From b888c7edb54e483ec0e3c2e2ce0eafd73acdcc65 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 24 Jul 2013 15:57:00 -0500 Subject: [PATCH] Initial import from kshowmail 3.3.1 sources --- AUTHORS | 4 + COPYING | 280 + ChangeLog | 196 + INSTALL | 176 + Makefile.am | 29 + Makefile.dist | 14 + README | 101 + ReleaseNotes | 16 + TODO | 0 acinclude.m4 | 11863 ++++++++++++++++ aclocal.m4 | 863 ++ build-kshowmail/RPMROOT/SPECS/kshowmail.spec | 48 + build-kshowmail/RPMROOT/tmp/rpm-tmp.22447 | 28 + build-kshowmail/rpmmacros | 2 + build-kshowmail/rpmrc | 1 + config.h | 238 + config.h.in | 237 + configure.files | 2 + configure.in | 142 + configure.in.in | 14 + doc/Makefile.am | 10 + doc/cs/Makefile.am | 10 + doc/cs/index.docbook | 516 + doc/de/Makefile.am | 10 + doc/de/index.docbook | 522 + doc/en/Makefile.am | 10 + doc/en/index.docbook | 516 + doc/es/Makefile.am | 10 + doc/es/index.docbook | 428 + doc/fr/Makefile.am | 10 + doc/fr/index.docbook | 372 + doc/html/AlertDlg_8cpp-source.html | 296 + doc/html/AlertDlg_8h-source.html | 79 + doc/html/AlertDlg_8moc-source.html | 126 + doc/html/CommandDlg_8cpp-source.html | 186 + doc/html/CommandDlg_8h-source.html | 82 + doc/html/CommandDlg_8moc-source.html | 144 + doc/html/CommandEntryDlg_8cpp-source.html | 167 + doc/html/CommandEntryDlg_8h-source.html | 82 + doc/html/CommandEntryDlg_8moc-source.html | 132 + doc/html/EditDlg_8cpp-source.html | 119 + doc/html/EditDlg_8h-source.html | 72 + doc/html/EditDlg_8moc-source.html | 126 + doc/html/FilterDlg_8cpp-source.html | 223 + doc/html/FilterDlg_8h-source.html | 90 + doc/html/FilterDlg_8moc-source.html | 147 + doc/html/FilterEntryDlg_8cpp-source.html | 332 + doc/html/FilterEntryDlg_8h-source.html | 110 + doc/html/FilterEntryDlg_8moc-source.html | 195 + doc/html/OptionDlg_8cpp-source.html | 579 + doc/html/OptionDlg_8h-source.html | 157 + doc/html/OptionDlg_8moc-source.html | 162 + doc/html/ServerDlg_8cpp-source.html | 204 + doc/html/ServerDlg_8h-source.html | 91 + doc/html/ServerDlg_8moc-source.html | 126 + doc/html/alertdialog_8cpp-source.html | 61 + doc/html/alertdialog_8h-source.html | 63 + doc/html/alertdialog_8moc_8cpp-source.html | 138 + doc/html/annotated.html | 70 + doc/html/classAlertDialog-members.html | 41 + doc/html/classAlertDialog.html | 144 + doc/html/classAlertDialog.png | Bin 0 -> 354 bytes doc/html/classAlertDlg-members.html | 39 + doc/html/classAlertDlg.html | 275 + doc/html/classAlertDlg.png | Bin 0 -> 360 bytes doc/html/classCommandDialog-members.html | 55 + doc/html/classCommandDialog.html | 81 + doc/html/classCommandDialog.png | Bin 0 -> 404 bytes doc/html/classCommandDlg-members.html | 49 + doc/html/classCommandDlg.html | 110 + doc/html/classCommandDlg.png | Bin 0 -> 413 bytes doc/html/classCommandEntry-members.html | 38 + doc/html/classCommandEntry.html | 69 + doc/html/classCommandEntryDialog-members.html | 52 + doc/html/classCommandEntryDialog.html | 69 + doc/html/classCommandEntryDialog.png | Bin 0 -> 497 bytes doc/html/classCommandEntryDlg-members.html | 48 + doc/html/classCommandEntryDlg.html | 107 + doc/html/classCommandEntryDlg.png | Bin 0 -> 504 bytes doc/html/classCommandList-members.html | 38 + doc/html/classCommandList.html | 69 + doc/html/classConfigElem-members.html | 149 + doc/html/classConfigElem.html | 2855 ++++ doc/html/classConfigList-members.html | 122 + doc/html/classConfigList.html | 2087 +++ doc/html/classEditDialog-members.html | 44 + doc/html/classEditDialog.html | 63 + doc/html/classEditDialog.png | Bin 0 -> 340 bytes doc/html/classEditDlg-members.html | 40 + doc/html/classEditDlg.html | 83 + doc/html/classEditDlg.png | Bin 0 -> 345 bytes doc/html/classFilter-members.html | 39 + doc/html/classFilter.html | 67 + doc/html/classFilterDialog-members.html | 58 + doc/html/classFilterDialog.html | 78 + doc/html/classFilterDialog.png | Bin 0 -> 352 bytes doc/html/classFilterDlg-members.html | 55 + doc/html/classFilterDlg.html | 128 + doc/html/classFilterDlg.png | Bin 0 -> 356 bytes doc/html/classFilterElem-members.html | 46 + doc/html/classFilterElem.html | 185 + doc/html/classFilterEntryDialog-members.html | 77 + doc/html/classFilterEntryDialog.html | 99 + doc/html/classFilterEntryDialog.png | Bin 0 -> 441 bytes doc/html/classFilterEntryDlg-members.html | 74 + doc/html/classFilterEntryDlg.html | 185 + doc/html/classFilterEntryDlg.png | Bin 0 -> 448 bytes doc/html/classFilterList-members.html | 36 + doc/html/classFilterList.html | 92 + doc/html/classFilterRecord-members.html | 50 + doc/html/classFilterRecord.html | 88 + doc/html/classKFeedbackAnswer-members.html | 40 + doc/html/classKFeedbackAnswer.html | 311 + doc/html/classKFeedbackDialog-members.html | 34 + doc/html/classKFeedbackDialog.html | 185 + doc/html/classKFeedbackForm-members.html | 40 + doc/html/classKFeedbackForm.html | 300 + doc/html/classKFeedbackQuestion-members.html | 44 + doc/html/classKFeedbackQuestion.html | 424 + .../classKFeedbackQuestionList-members.html | 38 + doc/html/classKFeedbackQuestionList.html | 343 + doc/html/classKShowMailApp-members.html | 85 + doc/html/classKShowMailApp.html | 1211 ++ doc/html/classKShowMailDock-members.html | 36 + doc/html/classKShowMailDock.html | 240 + doc/html/classKshowmailDoc-members.html | 38 + doc/html/classKshowmailDoc.html | 264 + doc/html/classKshowmailView-members.html | 45 + doc/html/classKshowmailView.html | 525 + doc/html/classLogger-members.html | 33 + doc/html/classLogger.html | 58 + doc/html/classOptionDialog-members.html | 123 + doc/html/classOptionDialog.html | 99 + doc/html/classOptionDialog.png | Bin 0 -> 371 bytes doc/html/classOptionDlg-members.html | 118 + doc/html/classOptionDlg.html | 317 + doc/html/classOptionDlg.png | Bin 0 -> 377 bytes doc/html/classServerDialog-members.html | 44 + doc/html/classServerDialog.html | 375 + doc/html/classServerDialog.png | Bin 0 -> 406 bytes doc/html/classServerDlg-members.html | 54 + doc/html/classServerDlg.html | 125 + doc/html/classServerDlg.png | Bin 0 -> 413 bytes doc/html/classShowListViewItem-members.html | 53 + doc/html/classShowListViewItem.html | 487 + doc/html/classShowRecord-members.html | 62 + doc/html/classShowRecord.html | 1060 ++ doc/html/classShowRecordElem-members.html | 86 + doc/html/classShowRecordElem.html | 1459 ++ doc/html/classUniqueApp-members.html | 32 + doc/html/classUniqueApp.html | 128 + doc/html/classes.html | 39 + doc/html/commanddialog_8cpp-source.html | 150 + doc/html/commanddialog_8h-source.html | 73 + doc/html/commanddialog_8moc_8cpp-source.html | 141 + doc/html/commandentry_8cpp-source.html | 143 + doc/html/commandentry_8h-source.html | 69 + doc/html/commandentrydialog_8cpp-source.html | 91 + doc/html/commandentrydialog_8h-source.html | 63 + .../commandentrydialog_8moc_8cpp-source.html | 129 + doc/html/commandlist_8cpp-source.html | 153 + doc/html/commandlist_8h-source.html | 66 + doc/html/config_8h-source.html | 265 + doc/html/configelem_8cpp-source.html | 1223 ++ doc/html/configelem_8h-source.html | 363 + doc/html/configlist_8cpp-source.html | 1055 ++ doc/html/configlist_8h-source.html | 283 + doc/html/constants_8h-source.html | 367 + doc/html/decodeRFC2047_8cpp-source.html | 204 + doc/html/decodeRFC2047_8h-source.html | 69 + .../dir_656923b733374505e0e2f68ecb68d952.html | 145 + doc/html/dirs.html | 41 + doc/html/doxygen.css | 358 + doc/html/doxygen.png | Bin 0 -> 1281 bytes doc/html/editdialog_8cpp-source.html | 74 + doc/html/editdialog_8h-source.html | 58 + doc/html/editdialog_8moc_8cpp-source.html | 123 + doc/html/files.html | 120 + doc/html/filter_8cpp-source.html | 76 + doc/html/filter_8h-source.html | 66 + doc/html/filterdialog_8cpp-source.html | 165 + doc/html/filterdialog_8h-source.html | 66 + doc/html/filterdialog_8moc_8cpp-source.html | 144 + doc/html/filterelem_8cpp-source.html | 324 + doc/html/filterelem_8h-source.html | 97 + doc/html/filterentrydialog_8cpp-source.html | 272 + doc/html/filterentrydialog_8h-source.html | 72 + .../filterentrydialog_8moc_8cpp-source.html | 192 + doc/html/filterlist_8cpp-source.html | 187 + doc/html/filterlist_8h-source.html | 74 + doc/html/functions.html | 107 + doc/html/functions_0x61.html | 136 + doc/html/functions_0x62.html | 130 + doc/html/functions_0x63.html | 285 + doc/html/functions_0x64.html | 115 + doc/html/functions_0x65.html | 79 + doc/html/functions_0x66.html | 116 + doc/html/functions_0x67.html | 225 + doc/html/functions_0x68.html | 91 + doc/html/functions_0x69.html | 110 + doc/html/functions_0x6b.html | 92 + doc/html/functions_0x6c.html | 126 + doc/html/functions_0x6d.html | 215 + doc/html/functions_0x6e.html | 108 + doc/html/functions_0x6f.html | 85 + doc/html/functions_0x70.html | 97 + doc/html/functions_0x71.html | 81 + doc/html/functions_0x72.html | 103 + doc/html/functions_0x73.html | 525 + doc/html/functions_0x74.html | 126 + doc/html/functions_0x75.html | 82 + doc/html/functions_0x76.html | 73 + doc/html/functions_0x7e.html | 147 + doc/html/functions_enum.html | 55 + doc/html/functions_func.html | 109 + doc/html/functions_rela.html | 47 + doc/html/functions_vars.html | 86 + doc/html/functions_vars_0x61.html | 94 + doc/html/functions_vars_0x62.html | 123 + doc/html/functions_vars_0x63.html | 192 + doc/html/functions_vars_0x64.html | 83 + doc/html/functions_vars_0x65.html | 70 + doc/html/functions_vars_0x66.html | 82 + doc/html/functions_vars_0x67.html | 90 + doc/html/functions_vars_0x68.html | 70 + doc/html/functions_vars_0x69.html | 70 + doc/html/functions_vars_0x6b.html | 70 + doc/html/functions_vars_0x6c.html | 98 + doc/html/functions_vars_0x6d.html | 204 + doc/html/functions_vars_0x6f.html | 67 + doc/html/functions_vars_0x70.html | 80 + doc/html/functions_vars_0x71.html | 72 + doc/html/functions_vars_0x73.html | 108 + doc/html/functions_vars_0x74.html | 105 + doc/html/hierarchy.html | 72 + doc/html/index.html | 22 + doc/html/kfeedback_8cpp-source.html | 515 + doc/html/kfeedback_8h-source.html | 257 + doc/html/kfeedback_8moc_8cpp-source.html | 335 + doc/html/kshowmail_8cpp-source.html | 822 ++ doc/html/kshowmail_8h-source.html | 221 + doc/html/kshowmail_8moc_8cpp-source.html | 204 + doc/html/kshowmaildoc_8cpp-source.html | 101 + doc/html/kshowmaildoc_8h-source.html | 86 + doc/html/kshowmaildoc_8moc_8cpp-source.html | 126 + doc/html/kshowmaildock_8cpp-source.html | 105 + doc/html/kshowmaildock_8h-source.html | 69 + doc/html/kshowmaildock_8moc_8cpp-source.html | 144 + doc/html/kshowmailfeedback_8cpp-source.html | 176 + doc/html/kshowmailview_8cpp-source.html | 450 + doc/html/kshowmailview_8h-source.html | 114 + doc/html/kshowmailview_8moc_8cpp-source.html | 171 + doc/html/logger_8cpp-source.html | 68 + doc/html/logger_8h-source.html | 59 + doc/html/main_8cpp-source.html | 136 + doc/html/namespaceConstants.html | 33 + doc/html/namespaceTypes.html | 230 + doc/html/namespacemembers.html | 135 + doc/html/namespacemembers_enum.html | 44 + doc/html/namespacemembers_eval.html | 72 + doc/html/namespaces.html | 34 + doc/html/optiondialog_8cpp-source.html | 290 + doc/html/optiondialog_8h-source.html | 77 + doc/html/optiondialog_8moc_8cpp-source.html | 159 + doc/html/serverdialog_8cpp-source.html | 279 + doc/html/serverdialog_8h-source.html | 131 + doc/html/serverdialog_8moc_8cpp-source.html | 114 + doc/html/showlistviewitem_8cpp-source.html | 123 + doc/html/showlistviewitem_8h-source.html | 79 + doc/html/showrecord_8cpp-source.html | 580 + doc/html/showrecord_8h-source.html | 150 + doc/html/showrecordelem_8cpp-source.html | 622 + doc/html/showrecordelem_8h-source.html | 202 + doc/html/tab_b.gif | Bin 0 -> 35 bytes doc/html/tab_l.gif | Bin 0 -> 706 bytes doc/html/tab_r.gif | Bin 0 -> 2585 bytes doc/html/tabs.css | 102 + doc/html/types_8h-source.html | 105 + doc/html/uniqueapp_8cpp-source.html | 99 + doc/html/uniqueapp_8h-source.html | 75 + doc/hu/Makefile.am | 10 + doc/hu/index.docbook | 481 + doc/it/Makefile.am | 10 + doc/it/index.docbook | 523 + doc/ru/Makefile.am | 10 + doc/ru/index.docbook | 517 + doc/sv/Makefile.am | 9 + doc/sv/index.docbook | 370 + kshowmail.lsm | 14 + kshowmail.spec | 120 + kshowmail/AlertDlg.ui | 114 + kshowmail/Makefile.am | 60 + kshowmail/alertdialog.cpp | 39 + kshowmail/alertdialog.h | 40 + kshowmail/configelem.cpp | 1759 +++ kshowmail/configelem.h | 1097 ++ kshowmail/configlist.cpp | 1203 ++ kshowmail/configlist.h | 734 + kshowmail/constants.h | 367 + kshowmail/decodeRFC2047.cpp | 182 + kshowmail/decodeRFC2047.h | 51 + kshowmail/encryption.cpp | 85 + kshowmail/encryption.h | 46 + kshowmail/filteritem.cpp | 166 + kshowmail/filteritem.h | 117 + kshowmail/filteritemcriteria.cpp | 241 + kshowmail/filteritemcriteria.h | 146 + kshowmail/filterlog.cpp | 235 + kshowmail/filterlog.h | 183 + kshowmail/filterlogentry.cpp | 145 + kshowmail/filterlogentry.h | 196 + kshowmail/filterlogview.cpp | 121 + kshowmail/filterlogview.h | 87 + kshowmail/filterlogviewdeleteditem.cpp | 58 + kshowmail/filterlogviewdeleteditem.h | 95 + kshowmail/filterlogviewmoveditem.cpp | 58 + kshowmail/filterlogviewmoveditem.h | 101 + kshowmail/headerfilter.cpp | 151 + kshowmail/headerfilter.h | 117 + kshowmail/kcmconfigs/Makefile.am | 36 + kshowmail/kcmconfigs/accountsetupdialog.cpp | 362 + kshowmail/kcmconfigs/accountsetupdialog.h | 165 + kshowmail/kcmconfigs/accountsetupitem.cpp | 207 + kshowmail/kcmconfigs/accountsetupitem.h | 242 + kshowmail/kcmconfigs/configaccounts.cpp | 203 + kshowmail/kcmconfigs/configaccounts.h | 131 + kshowmail/kcmconfigs/configactions.cpp | 267 + kshowmail/kcmconfigs/configactions.h | 202 + kshowmail/kcmconfigs/configdisplay.cpp | 221 + kshowmail/kcmconfigs/configdisplay.h | 169 + kshowmail/kcmconfigs/configfilter.cpp | 613 + kshowmail/kcmconfigs/configfilter.h | 288 + kshowmail/kcmconfigs/configgeneral.cpp | 181 + kshowmail/kcmconfigs/configgeneral.h | 141 + kshowmail/kcmconfigs/configlog.cpp | 255 + kshowmail/kcmconfigs/configlog.h | 152 + kshowmail/kcmconfigs/configspamcheck.cpp | 236 + kshowmail/kcmconfigs/configspamcheck.h | 161 + kshowmail/kcmconfigs/encryption.cpp | 85 + kshowmail/kcmconfigs/encryption.h | 46 + kshowmail/kcmconfigs/filtercriteriawidget.cpp | 338 + kshowmail/kcmconfigs/filtercriteriawidget.h | 163 + kshowmail/kcmconfigs/filtersetupdialog.cpp | 451 + kshowmail/kcmconfigs/filtersetupdialog.h | 191 + kshowmail/kcmconfigs/filtersetupitem.cpp | 347 + kshowmail/kcmconfigs/filtersetupitem.h | 240 + .../kshowmailconfigaccounts.desktop | 20 + .../kcmconfigs/kshowmailconfigactions.desktop | 20 + .../kcmconfigs/kshowmailconfigdisplay.desktop | 19 + .../kcmconfigs/kshowmailconfigfilter.desktop | 19 + .../kcmconfigs/kshowmailconfiggeneral.desktop | 19 + .../kcmconfigs/kshowmailconfiglog.desktop | 16 + .../kshowmailconfigspamcheck.desktop | 20 + kshowmail/kcmconfigs/kwalletaccess.cpp | 137 + kshowmail/kcmconfigs/kwalletaccess.h | 45 + kshowmail/kcmconfigs/mailboxwizard.cpp | 164 + kshowmail/kcmconfigs/mailboxwizard.h | 131 + .../kcmconfigs/mailboxwizardlistitem.cpp | 28 + kshowmail/kcmconfigs/mailboxwizardlistitem.h | 61 + kshowmail/kcmconfigs/senderlistdialog.cpp | 151 + kshowmail/kcmconfigs/senderlistdialog.h | 112 + kshowmail/kfeedback.cpp | 504 + kshowmail/kfeedback.h | 463 + kshowmail/kshowmail.cpp | 861 ++ kshowmail/kshowmail.desktop | 13 + kshowmail/kshowmail.h | 424 + kshowmail/kshowmaildoc.cpp | 81 + kshowmail/kshowmaildoc.h | 81 + kshowmail/kshowmaildock.cpp | 83 + kshowmail/kshowmaildock.h | 46 + kshowmail/kshowmailfeedback.cpp | 159 + kshowmail/kshowmailui.rc | 45 + kshowmail/kshowmailview.cpp | 449 + kshowmail/kshowmailview.h | 157 + kshowmail/kwalletaccess.cpp | 137 + kshowmail/kwalletaccess.h | 45 + kshowmail/main.cpp | 114 + kshowmail/senderlistfilter.cpp | 102 + kshowmail/senderlistfilter.h | 113 + kshowmail/serverdialog.cpp | 336 + kshowmail/serverdialog.h | 168 + kshowmail/showheaderdialog.cpp | 52 + kshowmail/showheaderdialog.h | 53 + kshowmail/showlistviewitem.cpp | 114 + kshowmail/showlistviewitem.h | 69 + kshowmail/showmaildialog.cpp | 101 + kshowmail/showmaildialog.h | 90 + kshowmail/showrecord.cpp | 669 + kshowmail/showrecord.h | 314 + kshowmail/showrecordelem.cpp | 632 + kshowmail/showrecordelem.h | 447 + kshowmail/templates/cpp_template | 16 + kshowmail/templates/header_template | 16 + kshowmail/types.h | 122 + kshowmail/uniqueapp.cpp | 78 + kshowmail/uniqueapp.h | 65 + pics/.xvpics/exclamation.png | 5 + pics/.xvpics/exec.png | Bin 0 -> 321 bytes pics/.xvpics/kshowmail.png | Bin 0 -> 2370 bytes pics/.xvpics/kshowmail16.png | 5 + pics/.xvpics/kshowmail24.png | Bin 0 -> 641 bytes pics/.xvpics/letter-closed.png | Bin 0 -> 289 bytes pics/.xvpics/letter-open.png | Bin 0 -> 321 bytes pics/.xvpics/mini-cross.png | Bin 0 -> 289 bytes pics/.xvpics/ok.png | Bin 0 -> 289 bytes pics/.xvpics/reload.png | Bin 0 -> 549 bytes pics/.xvpics/tool1.png | Bin 0 -> 549 bytes pics/.xvpics/tool2.png | Bin 0 -> 549 bytes pics/Makefile.am | 3 + pics/eraser.png | Bin 0 -> 235 bytes pics/kshowmail.png | Bin 0 -> 1722 bytes pics/kshowmail16.png | Bin 0 -> 606 bytes pics/kshowmail24.png | Bin 0 -> 870 bytes pics/letter-closed.png | Bin 0 -> 195 bytes pics/letter-open.png | Bin 0 -> 297 bytes pics/ok.png | Bin 0 -> 229 bytes pics/tool.png | Bin 0 -> 342 bytes pics/tool1.png | Bin 0 -> 328 bytes pics/tool3.png | Bin 0 -> 299 bytes po/Makefile.am | 8 + po/cs.po | 1908 +++ po/de.po | 1584 +++ po/es.po | 1563 ++ po/fr.po | 1873 +++ po/hu.po | 1934 +++ po/it.po | 1895 +++ po/kshowmail.pot | 1488 ++ po/ru.po | 1915 +++ po/sv.po | 1994 +++ sounds/Makefile.am | 2 + sounds/neuepost.wav | Bin 0 -> 137506 bytes sounds/newmail.wav | Bin 0 -> 94340 bytes stamp-h.in | 1 + subdirs | 5 + 434 files changed, 99359 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.dist create mode 100644 README create mode 100644 ReleaseNotes create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 build-kshowmail/RPMROOT/SPECS/kshowmail.spec create mode 100644 build-kshowmail/RPMROOT/tmp/rpm-tmp.22447 create mode 100644 build-kshowmail/rpmmacros create mode 100644 build-kshowmail/rpmrc create mode 100644 config.h create mode 100644 config.h.in create mode 100644 configure.files create mode 100644 configure.in create mode 100644 configure.in.in create mode 100644 doc/Makefile.am create mode 100644 doc/cs/Makefile.am create mode 100644 doc/cs/index.docbook create mode 100644 doc/de/Makefile.am create mode 100644 doc/de/index.docbook create mode 100644 doc/en/Makefile.am create mode 100644 doc/en/index.docbook create mode 100644 doc/es/Makefile.am create mode 100644 doc/es/index.docbook create mode 100644 doc/fr/Makefile.am create mode 100644 doc/fr/index.docbook create mode 100644 doc/html/AlertDlg_8cpp-source.html create mode 100644 doc/html/AlertDlg_8h-source.html create mode 100644 doc/html/AlertDlg_8moc-source.html create mode 100644 doc/html/CommandDlg_8cpp-source.html create mode 100644 doc/html/CommandDlg_8h-source.html create mode 100644 doc/html/CommandDlg_8moc-source.html create mode 100644 doc/html/CommandEntryDlg_8cpp-source.html create mode 100644 doc/html/CommandEntryDlg_8h-source.html create mode 100644 doc/html/CommandEntryDlg_8moc-source.html create mode 100644 doc/html/EditDlg_8cpp-source.html create mode 100644 doc/html/EditDlg_8h-source.html create mode 100644 doc/html/EditDlg_8moc-source.html create mode 100644 doc/html/FilterDlg_8cpp-source.html create mode 100644 doc/html/FilterDlg_8h-source.html create mode 100644 doc/html/FilterDlg_8moc-source.html create mode 100644 doc/html/FilterEntryDlg_8cpp-source.html create mode 100644 doc/html/FilterEntryDlg_8h-source.html create mode 100644 doc/html/FilterEntryDlg_8moc-source.html create mode 100644 doc/html/OptionDlg_8cpp-source.html create mode 100644 doc/html/OptionDlg_8h-source.html create mode 100644 doc/html/OptionDlg_8moc-source.html create mode 100644 doc/html/ServerDlg_8cpp-source.html create mode 100644 doc/html/ServerDlg_8h-source.html create mode 100644 doc/html/ServerDlg_8moc-source.html create mode 100644 doc/html/alertdialog_8cpp-source.html create mode 100644 doc/html/alertdialog_8h-source.html create mode 100644 doc/html/alertdialog_8moc_8cpp-source.html create mode 100644 doc/html/annotated.html create mode 100644 doc/html/classAlertDialog-members.html create mode 100644 doc/html/classAlertDialog.html create mode 100644 doc/html/classAlertDialog.png create mode 100644 doc/html/classAlertDlg-members.html create mode 100644 doc/html/classAlertDlg.html create mode 100644 doc/html/classAlertDlg.png create mode 100644 doc/html/classCommandDialog-members.html create mode 100644 doc/html/classCommandDialog.html create mode 100644 doc/html/classCommandDialog.png create mode 100644 doc/html/classCommandDlg-members.html create mode 100644 doc/html/classCommandDlg.html create mode 100644 doc/html/classCommandDlg.png create mode 100644 doc/html/classCommandEntry-members.html create mode 100644 doc/html/classCommandEntry.html create mode 100644 doc/html/classCommandEntryDialog-members.html create mode 100644 doc/html/classCommandEntryDialog.html create mode 100644 doc/html/classCommandEntryDialog.png create mode 100644 doc/html/classCommandEntryDlg-members.html create mode 100644 doc/html/classCommandEntryDlg.html create mode 100644 doc/html/classCommandEntryDlg.png create mode 100644 doc/html/classCommandList-members.html create mode 100644 doc/html/classCommandList.html create mode 100644 doc/html/classConfigElem-members.html create mode 100644 doc/html/classConfigElem.html create mode 100644 doc/html/classConfigList-members.html create mode 100644 doc/html/classConfigList.html create mode 100644 doc/html/classEditDialog-members.html create mode 100644 doc/html/classEditDialog.html create mode 100644 doc/html/classEditDialog.png create mode 100644 doc/html/classEditDlg-members.html create mode 100644 doc/html/classEditDlg.html create mode 100644 doc/html/classEditDlg.png create mode 100644 doc/html/classFilter-members.html create mode 100644 doc/html/classFilter.html create mode 100644 doc/html/classFilterDialog-members.html create mode 100644 doc/html/classFilterDialog.html create mode 100644 doc/html/classFilterDialog.png create mode 100644 doc/html/classFilterDlg-members.html create mode 100644 doc/html/classFilterDlg.html create mode 100644 doc/html/classFilterDlg.png create mode 100644 doc/html/classFilterElem-members.html create mode 100644 doc/html/classFilterElem.html create mode 100644 doc/html/classFilterEntryDialog-members.html create mode 100644 doc/html/classFilterEntryDialog.html create mode 100644 doc/html/classFilterEntryDialog.png create mode 100644 doc/html/classFilterEntryDlg-members.html create mode 100644 doc/html/classFilterEntryDlg.html create mode 100644 doc/html/classFilterEntryDlg.png create mode 100644 doc/html/classFilterList-members.html create mode 100644 doc/html/classFilterList.html create mode 100644 doc/html/classFilterRecord-members.html create mode 100644 doc/html/classFilterRecord.html create mode 100644 doc/html/classKFeedbackAnswer-members.html create mode 100644 doc/html/classKFeedbackAnswer.html create mode 100644 doc/html/classKFeedbackDialog-members.html create mode 100644 doc/html/classKFeedbackDialog.html create mode 100644 doc/html/classKFeedbackForm-members.html create mode 100644 doc/html/classKFeedbackForm.html create mode 100644 doc/html/classKFeedbackQuestion-members.html create mode 100644 doc/html/classKFeedbackQuestion.html create mode 100644 doc/html/classKFeedbackQuestionList-members.html create mode 100644 doc/html/classKFeedbackQuestionList.html create mode 100644 doc/html/classKShowMailApp-members.html create mode 100644 doc/html/classKShowMailApp.html create mode 100644 doc/html/classKShowMailDock-members.html create mode 100644 doc/html/classKShowMailDock.html create mode 100644 doc/html/classKshowmailDoc-members.html create mode 100644 doc/html/classKshowmailDoc.html create mode 100644 doc/html/classKshowmailView-members.html create mode 100644 doc/html/classKshowmailView.html create mode 100644 doc/html/classLogger-members.html create mode 100644 doc/html/classLogger.html create mode 100644 doc/html/classOptionDialog-members.html create mode 100644 doc/html/classOptionDialog.html create mode 100644 doc/html/classOptionDialog.png create mode 100644 doc/html/classOptionDlg-members.html create mode 100644 doc/html/classOptionDlg.html create mode 100644 doc/html/classOptionDlg.png create mode 100644 doc/html/classServerDialog-members.html create mode 100644 doc/html/classServerDialog.html create mode 100644 doc/html/classServerDialog.png create mode 100644 doc/html/classServerDlg-members.html create mode 100644 doc/html/classServerDlg.html create mode 100644 doc/html/classServerDlg.png create mode 100644 doc/html/classShowListViewItem-members.html create mode 100644 doc/html/classShowListViewItem.html create mode 100644 doc/html/classShowRecord-members.html create mode 100644 doc/html/classShowRecord.html create mode 100644 doc/html/classShowRecordElem-members.html create mode 100644 doc/html/classShowRecordElem.html create mode 100644 doc/html/classUniqueApp-members.html create mode 100644 doc/html/classUniqueApp.html create mode 100644 doc/html/classes.html create mode 100644 doc/html/commanddialog_8cpp-source.html create mode 100644 doc/html/commanddialog_8h-source.html create mode 100644 doc/html/commanddialog_8moc_8cpp-source.html create mode 100644 doc/html/commandentry_8cpp-source.html create mode 100644 doc/html/commandentry_8h-source.html create mode 100644 doc/html/commandentrydialog_8cpp-source.html create mode 100644 doc/html/commandentrydialog_8h-source.html create mode 100644 doc/html/commandentrydialog_8moc_8cpp-source.html create mode 100644 doc/html/commandlist_8cpp-source.html create mode 100644 doc/html/commandlist_8h-source.html create mode 100644 doc/html/config_8h-source.html create mode 100644 doc/html/configelem_8cpp-source.html create mode 100644 doc/html/configelem_8h-source.html create mode 100644 doc/html/configlist_8cpp-source.html create mode 100644 doc/html/configlist_8h-source.html create mode 100644 doc/html/constants_8h-source.html create mode 100644 doc/html/decodeRFC2047_8cpp-source.html create mode 100644 doc/html/decodeRFC2047_8h-source.html create mode 100644 doc/html/dir_656923b733374505e0e2f68ecb68d952.html create mode 100644 doc/html/dirs.html create mode 100644 doc/html/doxygen.css create mode 100644 doc/html/doxygen.png create mode 100644 doc/html/editdialog_8cpp-source.html create mode 100644 doc/html/editdialog_8h-source.html create mode 100644 doc/html/editdialog_8moc_8cpp-source.html create mode 100644 doc/html/files.html create mode 100644 doc/html/filter_8cpp-source.html create mode 100644 doc/html/filter_8h-source.html create mode 100644 doc/html/filterdialog_8cpp-source.html create mode 100644 doc/html/filterdialog_8h-source.html create mode 100644 doc/html/filterdialog_8moc_8cpp-source.html create mode 100644 doc/html/filterelem_8cpp-source.html create mode 100644 doc/html/filterelem_8h-source.html create mode 100644 doc/html/filterentrydialog_8cpp-source.html create mode 100644 doc/html/filterentrydialog_8h-source.html create mode 100644 doc/html/filterentrydialog_8moc_8cpp-source.html create mode 100644 doc/html/filterlist_8cpp-source.html create mode 100644 doc/html/filterlist_8h-source.html create mode 100644 doc/html/functions.html create mode 100644 doc/html/functions_0x61.html create mode 100644 doc/html/functions_0x62.html create mode 100644 doc/html/functions_0x63.html create mode 100644 doc/html/functions_0x64.html create mode 100644 doc/html/functions_0x65.html create mode 100644 doc/html/functions_0x66.html create mode 100644 doc/html/functions_0x67.html create mode 100644 doc/html/functions_0x68.html create mode 100644 doc/html/functions_0x69.html create mode 100644 doc/html/functions_0x6b.html create mode 100644 doc/html/functions_0x6c.html create mode 100644 doc/html/functions_0x6d.html create mode 100644 doc/html/functions_0x6e.html create mode 100644 doc/html/functions_0x6f.html create mode 100644 doc/html/functions_0x70.html create mode 100644 doc/html/functions_0x71.html create mode 100644 doc/html/functions_0x72.html create mode 100644 doc/html/functions_0x73.html create mode 100644 doc/html/functions_0x74.html create mode 100644 doc/html/functions_0x75.html create mode 100644 doc/html/functions_0x76.html create mode 100644 doc/html/functions_0x7e.html create mode 100644 doc/html/functions_enum.html create mode 100644 doc/html/functions_func.html create mode 100644 doc/html/functions_rela.html create mode 100644 doc/html/functions_vars.html create mode 100644 doc/html/functions_vars_0x61.html create mode 100644 doc/html/functions_vars_0x62.html create mode 100644 doc/html/functions_vars_0x63.html create mode 100644 doc/html/functions_vars_0x64.html create mode 100644 doc/html/functions_vars_0x65.html create mode 100644 doc/html/functions_vars_0x66.html create mode 100644 doc/html/functions_vars_0x67.html create mode 100644 doc/html/functions_vars_0x68.html create mode 100644 doc/html/functions_vars_0x69.html create mode 100644 doc/html/functions_vars_0x6b.html create mode 100644 doc/html/functions_vars_0x6c.html create mode 100644 doc/html/functions_vars_0x6d.html create mode 100644 doc/html/functions_vars_0x6f.html create mode 100644 doc/html/functions_vars_0x70.html create mode 100644 doc/html/functions_vars_0x71.html create mode 100644 doc/html/functions_vars_0x73.html create mode 100644 doc/html/functions_vars_0x74.html create mode 100644 doc/html/hierarchy.html create mode 100644 doc/html/index.html create mode 100644 doc/html/kfeedback_8cpp-source.html create mode 100644 doc/html/kfeedback_8h-source.html create mode 100644 doc/html/kfeedback_8moc_8cpp-source.html create mode 100644 doc/html/kshowmail_8cpp-source.html create mode 100644 doc/html/kshowmail_8h-source.html create mode 100644 doc/html/kshowmail_8moc_8cpp-source.html create mode 100644 doc/html/kshowmaildoc_8cpp-source.html create mode 100644 doc/html/kshowmaildoc_8h-source.html create mode 100644 doc/html/kshowmaildoc_8moc_8cpp-source.html create mode 100644 doc/html/kshowmaildock_8cpp-source.html create mode 100644 doc/html/kshowmaildock_8h-source.html create mode 100644 doc/html/kshowmaildock_8moc_8cpp-source.html create mode 100644 doc/html/kshowmailfeedback_8cpp-source.html create mode 100644 doc/html/kshowmailview_8cpp-source.html create mode 100644 doc/html/kshowmailview_8h-source.html create mode 100644 doc/html/kshowmailview_8moc_8cpp-source.html create mode 100644 doc/html/logger_8cpp-source.html create mode 100644 doc/html/logger_8h-source.html create mode 100644 doc/html/main_8cpp-source.html create mode 100644 doc/html/namespaceConstants.html create mode 100644 doc/html/namespaceTypes.html create mode 100644 doc/html/namespacemembers.html create mode 100644 doc/html/namespacemembers_enum.html create mode 100644 doc/html/namespacemembers_eval.html create mode 100644 doc/html/namespaces.html create mode 100644 doc/html/optiondialog_8cpp-source.html create mode 100644 doc/html/optiondialog_8h-source.html create mode 100644 doc/html/optiondialog_8moc_8cpp-source.html create mode 100644 doc/html/serverdialog_8cpp-source.html create mode 100644 doc/html/serverdialog_8h-source.html create mode 100644 doc/html/serverdialog_8moc_8cpp-source.html create mode 100644 doc/html/showlistviewitem_8cpp-source.html create mode 100644 doc/html/showlistviewitem_8h-source.html create mode 100644 doc/html/showrecord_8cpp-source.html create mode 100644 doc/html/showrecord_8h-source.html create mode 100644 doc/html/showrecordelem_8cpp-source.html create mode 100644 doc/html/showrecordelem_8h-source.html create mode 100644 doc/html/tab_b.gif create mode 100644 doc/html/tab_l.gif create mode 100644 doc/html/tab_r.gif create mode 100644 doc/html/tabs.css create mode 100644 doc/html/types_8h-source.html create mode 100644 doc/html/uniqueapp_8cpp-source.html create mode 100644 doc/html/uniqueapp_8h-source.html create mode 100644 doc/hu/Makefile.am create mode 100644 doc/hu/index.docbook create mode 100644 doc/it/Makefile.am create mode 100644 doc/it/index.docbook create mode 100644 doc/ru/Makefile.am create mode 100644 doc/ru/index.docbook create mode 100644 doc/sv/Makefile.am create mode 100644 doc/sv/index.docbook create mode 100644 kshowmail.lsm create mode 100644 kshowmail.spec create mode 100644 kshowmail/AlertDlg.ui create mode 100644 kshowmail/Makefile.am create mode 100644 kshowmail/alertdialog.cpp create mode 100644 kshowmail/alertdialog.h create mode 100644 kshowmail/configelem.cpp create mode 100644 kshowmail/configelem.h create mode 100644 kshowmail/configlist.cpp create mode 100644 kshowmail/configlist.h create mode 100644 kshowmail/constants.h create mode 100644 kshowmail/decodeRFC2047.cpp create mode 100644 kshowmail/decodeRFC2047.h create mode 100644 kshowmail/encryption.cpp create mode 100644 kshowmail/encryption.h create mode 100644 kshowmail/filteritem.cpp create mode 100644 kshowmail/filteritem.h create mode 100644 kshowmail/filteritemcriteria.cpp create mode 100644 kshowmail/filteritemcriteria.h create mode 100644 kshowmail/filterlog.cpp create mode 100644 kshowmail/filterlog.h create mode 100644 kshowmail/filterlogentry.cpp create mode 100644 kshowmail/filterlogentry.h create mode 100644 kshowmail/filterlogview.cpp create mode 100644 kshowmail/filterlogview.h create mode 100644 kshowmail/filterlogviewdeleteditem.cpp create mode 100644 kshowmail/filterlogviewdeleteditem.h create mode 100644 kshowmail/filterlogviewmoveditem.cpp create mode 100644 kshowmail/filterlogviewmoveditem.h create mode 100644 kshowmail/headerfilter.cpp create mode 100644 kshowmail/headerfilter.h create mode 100644 kshowmail/kcmconfigs/Makefile.am create mode 100644 kshowmail/kcmconfigs/accountsetupdialog.cpp create mode 100644 kshowmail/kcmconfigs/accountsetupdialog.h create mode 100644 kshowmail/kcmconfigs/accountsetupitem.cpp create mode 100644 kshowmail/kcmconfigs/accountsetupitem.h create mode 100644 kshowmail/kcmconfigs/configaccounts.cpp create mode 100644 kshowmail/kcmconfigs/configaccounts.h create mode 100644 kshowmail/kcmconfigs/configactions.cpp create mode 100644 kshowmail/kcmconfigs/configactions.h create mode 100644 kshowmail/kcmconfigs/configdisplay.cpp create mode 100644 kshowmail/kcmconfigs/configdisplay.h create mode 100644 kshowmail/kcmconfigs/configfilter.cpp create mode 100644 kshowmail/kcmconfigs/configfilter.h create mode 100644 kshowmail/kcmconfigs/configgeneral.cpp create mode 100644 kshowmail/kcmconfigs/configgeneral.h create mode 100644 kshowmail/kcmconfigs/configlog.cpp create mode 100644 kshowmail/kcmconfigs/configlog.h create mode 100644 kshowmail/kcmconfigs/configspamcheck.cpp create mode 100644 kshowmail/kcmconfigs/configspamcheck.h create mode 100644 kshowmail/kcmconfigs/encryption.cpp create mode 100644 kshowmail/kcmconfigs/encryption.h create mode 100644 kshowmail/kcmconfigs/filtercriteriawidget.cpp create mode 100644 kshowmail/kcmconfigs/filtercriteriawidget.h create mode 100644 kshowmail/kcmconfigs/filtersetupdialog.cpp create mode 100644 kshowmail/kcmconfigs/filtersetupdialog.h create mode 100644 kshowmail/kcmconfigs/filtersetupitem.cpp create mode 100644 kshowmail/kcmconfigs/filtersetupitem.h create mode 100644 kshowmail/kcmconfigs/kshowmailconfigaccounts.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfigactions.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfigdisplay.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfigfilter.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfiggeneral.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfiglog.desktop create mode 100644 kshowmail/kcmconfigs/kshowmailconfigspamcheck.desktop create mode 100644 kshowmail/kcmconfigs/kwalletaccess.cpp create mode 100644 kshowmail/kcmconfigs/kwalletaccess.h create mode 100644 kshowmail/kcmconfigs/mailboxwizard.cpp create mode 100644 kshowmail/kcmconfigs/mailboxwizard.h create mode 100644 kshowmail/kcmconfigs/mailboxwizardlistitem.cpp create mode 100644 kshowmail/kcmconfigs/mailboxwizardlistitem.h create mode 100644 kshowmail/kcmconfigs/senderlistdialog.cpp create mode 100644 kshowmail/kcmconfigs/senderlistdialog.h create mode 100644 kshowmail/kfeedback.cpp create mode 100644 kshowmail/kfeedback.h create mode 100644 kshowmail/kshowmail.cpp create mode 100644 kshowmail/kshowmail.desktop create mode 100644 kshowmail/kshowmail.h create mode 100644 kshowmail/kshowmaildoc.cpp create mode 100644 kshowmail/kshowmaildoc.h create mode 100644 kshowmail/kshowmaildock.cpp create mode 100644 kshowmail/kshowmaildock.h create mode 100644 kshowmail/kshowmailfeedback.cpp create mode 100644 kshowmail/kshowmailui.rc create mode 100644 kshowmail/kshowmailview.cpp create mode 100644 kshowmail/kshowmailview.h create mode 100644 kshowmail/kwalletaccess.cpp create mode 100644 kshowmail/kwalletaccess.h create mode 100644 kshowmail/main.cpp create mode 100644 kshowmail/senderlistfilter.cpp create mode 100644 kshowmail/senderlistfilter.h create mode 100644 kshowmail/serverdialog.cpp create mode 100644 kshowmail/serverdialog.h create mode 100644 kshowmail/showheaderdialog.cpp create mode 100644 kshowmail/showheaderdialog.h create mode 100644 kshowmail/showlistviewitem.cpp create mode 100644 kshowmail/showlistviewitem.h create mode 100644 kshowmail/showmaildialog.cpp create mode 100644 kshowmail/showmaildialog.h create mode 100644 kshowmail/showrecord.cpp create mode 100644 kshowmail/showrecord.h create mode 100644 kshowmail/showrecordelem.cpp create mode 100644 kshowmail/showrecordelem.h create mode 100644 kshowmail/templates/cpp_template create mode 100644 kshowmail/templates/header_template create mode 100644 kshowmail/types.h create mode 100644 kshowmail/uniqueapp.cpp create mode 100644 kshowmail/uniqueapp.h create mode 100644 pics/.xvpics/exclamation.png create mode 100644 pics/.xvpics/exec.png create mode 100644 pics/.xvpics/kshowmail.png create mode 100644 pics/.xvpics/kshowmail16.png create mode 100644 pics/.xvpics/kshowmail24.png create mode 100644 pics/.xvpics/letter-closed.png create mode 100644 pics/.xvpics/letter-open.png create mode 100644 pics/.xvpics/mini-cross.png create mode 100644 pics/.xvpics/ok.png create mode 100644 pics/.xvpics/reload.png create mode 100644 pics/.xvpics/tool1.png create mode 100644 pics/.xvpics/tool2.png create mode 100644 pics/Makefile.am create mode 100644 pics/eraser.png create mode 100644 pics/kshowmail.png create mode 100644 pics/kshowmail16.png create mode 100644 pics/kshowmail24.png create mode 100644 pics/letter-closed.png create mode 100644 pics/letter-open.png create mode 100644 pics/ok.png create mode 100644 pics/tool.png create mode 100644 pics/tool1.png create mode 100644 pics/tool3.png create mode 100644 po/Makefile.am create mode 100644 po/cs.po create mode 100644 po/de.po create mode 100644 po/es.po create mode 100644 po/fr.po create mode 100644 po/hu.po create mode 100644 po/it.po create mode 100644 po/kshowmail.pot create mode 100644 po/ru.po create mode 100644 po/sv.po create mode 100644 sounds/Makefile.am create mode 100644 sounds/neuepost.wav create mode 100644 sounds/newmail.wav create mode 100644 stamp-h.in create mode 100644 subdirs diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..5932234 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +Eggert Ehmke +Allistar Melville +Oleg Ivanov +Ulrich Weigelt 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..98118c0 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,196 @@ +Versions Changes +-------- ------- + +May 6 2000: V0.1: initial release + +May 7 2000: V0.2: minor improvements and bug fixes + implemented context menus + delete confirmation option + +May 10 2000: V0.3: several bug fixes + redesign of the configuration menu + implemented multiple accounts + implemented timer automatic + improved error diagnostic + +May 20 2000: V0.4 minor bug fixes + implemented connect via port 110 + implemented show of complete messages + +Jun 24 2000: V0.5 bug fixes + changed event handling to allow update of status line during transfer + store UIDL's / Message ID's in rc file to allow persistent detection of new mail + play sound if new mail + file dialog to select sound file + implemented scrambled password in rc file + command line parameter to select account + tool bar combobox to select account + +Jun 29 2000 V0.5.1 Spanish translation provided by Edgardo Garc� + Help file updated in english, german and spanish + modified password scrambling algorithm + +Jul 10 2000 V0.5.2 bug fixes + Implemented hide on startup + Implemented minimize/terminate if no new mail + Improved cache handling + Implemented configurable user commands + The application is started as unique instance + +Aug 2 2000 V0.5.3 A new option to allow keeping of new mails as "new" + The size of mails is now recognized correctly + Implementation of the anti-spam complain command + Swedish language files + +Oct 15 2000 V0.9 Delete key works now. A popup window can be shown + if new messages arrive. Config dialog updated. + +Oct 19 2000 V0.9.1 Bugfix release due to segfault in 0.9 + +Oct 20 2000 V0.9.2 Automatic backup of config file + Swedish language files updated + French language files added + Mail size options added + Launch external programs on new mail + +Dec 30 2001 V2.2.0 Final version for KDE 2.2.x. + Improved support of multiple accounts. + Implementation of pop3 kioslave + User interface adapted to KActions + Keyboard shortcuts finally work + Continuation at next account after errors + Persistent storage of headers in xml config file + +Jan 02 2002 V2.2.1 Bugfix release + The option dialog is divided by tab bars to make it smaller + New stop button to interrupt transfer + Changed icon format to png + +Jan 31 2002 V2.2.2 Bugfix release + The crash on kde shutdown has been fixed + Mail subjects are now RFC2047 decoded + The truncating of large messages works again + +Feb 24 2002 V2.2.3 Bugfix release + Crash when complain command is assigned to new mail fixed + Added time information to status line + Added account size information + Request password when empty + Show only messages of active accounts + Store iconsize and icontext of toolbar + Show user and host in statusbar. + show countdown counter in statusbar + +Apr 06 2002 V3.0.0 Migration to KDE3 + Bug 535377 order by header fields fixed + +Apr 25 2002 V3.0.1 Sort by message numbers fixed (multiple accounts) + New icons provided by Maic Szotek + Display and sort date in locale format + Hide taskbar button if minimized + Implement configurable pop3 timer + Animated traybar icon while fetching messages + Crash if no account assigned is fixed + Optimized sorting of new messages + Store sort column in config file + Crash and missing columns (542602) fixed + Improved tab order in dialogs + Beep if illegal user actions + Crash when disabling accounts (559122) fixed + +May 30 2002 V3.0.2 Implemented user feedback + Bug 562903 (Wrong account activated if sorted backw) fixed + +Jul 06 2002 V3.0.3 corrected compile errors in 3.0.2 + +Feb 22 2003 V3.0.4 corrected segfault when password, server url and account name are too long; + Finally set up the cvs account. (Hi, Allistar !); + Added the option for users to hide account or message columns in the main window; + Added french translation finally; + Added option to allow rich text formatting (simple html); + set tab focus to editdialog to allow keyboard navigation; + header information filtered in view complete mail; + fix of the locking problem when running commands; + security update: xml file has mode 0600 now. + +Sep 05 2004 V3.0.5 Bugfix: crash when storing empty password + +Dec 06 2003 V3.1.0 added confirm close box + Added the long awaited filters to fight the Swen worm + Implemented regular expressions as filter conditions + Added logfile to monitor deleted messages + Font now derived from KDE settings + Added reply option + Added save option + Added ungarian translation for GUI and Help + Fixed bug #853651 + +Jan 30 2004 V3.1.1 + Added italian translation for gui and help + Disabled save actions if nothing changed + Added tooltip for traybar + Improved html, we use KTextBrowser now + Czech gui translation added + +Jul 12 2005 V3.1.1 + Works fine with KDE3.4 + Fixed bug #860024 + Added "Close to tray" and "Minimize to tray" settings + Fixed bug with crashes on (de)activation of accounts + +Mar 31 2007 V3.1.2 + BUGFIX: Crashed, when you click on an item of the account list + +May 19 2007 V3.1.9.1 (3.2-pre1) + Revised all code for POP3 operations and moved it into the account + class. Now the refresh and delete operations of every account run + simultaneously and it doesn't crash at Quit anymore. + + Dropped the menu item Clear and Forced Refresh because they are + dispensable now. The mail list is cleared at every refresh. + + Removed the complain action. + + The view of complete messages was improved. It decodes the quoted + printable encoding (like "=25" ). But it is not perfect yet. + + The configure script is looking for the mimelib headers "mimepp.h" + and "datetime.h" now. If they are not installed, the user will be shown a + invitation to install the kdepim devel package. + + Revised the makefile.am files to avoid some warnings + + Replaced the admin folder + +Jul 06 2007 V3.2.0 + New setup dialog + + A configurable tool bar + + An easier code to build the GUI + + The warnings that kshowmail couldn't connect to the server during refresh, + if there is no network connection available, can be disabled now. + + You can use KWallet to store the passwords. + +Jul 14 2007 V3.2.1 + Fixed bug where if you configure 2 accounts, retrieve mail, and then deactivate + one of the accounts, it's number of messages still reflects in the tray icon. + + Fixed sort of message number and size columns in message list to be numerical + rather than alpha. + +Aug 04 2007 V3.2.9 (3.3-pre1) + Add support for SSL/TLS + +Apr 20 2008 V3.3.0 + Revised filter (dialog and worker) + * White- and Blacklist + * indefinite number of filters + * moving of mails into mailboxes + * ignoring of mails (e.g. for mailing lists) + Spam check with SpamAssassin (just basically) + Revised filter log + + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..da7136a --- /dev/null +++ b/INSTALL @@ -0,0 +1,176 @@ +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'. + +It is useful to set the KDEDIR environment variable to the proper location. +For SuSE this is /opt/kde3. Before starting, enter +export KDEDIR=/opt/kde3 + +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. + + If KDEDIR is not set, it can be helpful to run configure with the --prefix option: + ./configure --prefix=/opt/kde3 + + 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. Read the output of the install process carefully and + verify the files have been installed in the correct locations. If the + directory is wrong (not a subdirectory of KDEDIR) the icons will not be found. + + 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..8f4bc71 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,29 @@ +####### kdevelop will overwrite this part!!! (begin)########## + +SUBDIRS = kshowmail po doc pics sounds + +EXTRA_DIST = kshowmail.kdevprj admin AUTHORS COPYING ChangeLog INSTALL README TODO kshowmail.spec + +####### 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 + +$(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 + +$(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 + +MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files + +package-messages: + $(MAKE) -f admin/Makefile.common package-messages + $(MAKE) -C po merge + +dist-hook: + cd $(top_distdir) && perl admin/am_edit -padmin + cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs diff --git a/Makefile.dist b/Makefile.dist new file mode 100644 index 0000000..be59a86 --- /dev/null +++ b/Makefile.dist @@ -0,0 +1,14 @@ +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + @if test ! -d admin; then \ + echo "Please recheckout this module!" ;\ + echo "for cvs: use checkout once and after that update again" ;\ + echo "for cvsup: checkout kde-common from cvsup and" ;\ + echo " link kde-common/admin to ./admin" ;\ + exit 1 ;\ + fi + $(MAKE) -f admin/Makefile.common cvs + +.SILENT: diff --git a/README b/README new file mode 100644 index 0000000..cb6edd3 --- /dev/null +++ b/README @@ -0,0 +1,101 @@ +This program is written by Eggert Ehmke, eggert.ehmke@berlin.de. +It is distributed under the GNU public license. See COPYING for details. +It is based on the command line tool showmail written by Manfred Haertel, +Manfred.Haertel@rz-online.de. + +Kshowmail is a KDE tool to watch mails on a POP3 server. +Headers and complete mails can be viewed without loading them to the +local mail client. Unpleasant mail can be deleted from the server. +The list of displayed mails can be refreshed via configurable timers. +Filters can be assigned to mark known spam for deletion. +Multiple accounts are supported. +A sound can be played if new mail arrives. +A command menu allows user configurable commands like fetchmail or sendmail. +A special command can be defined to send complain mail against spam. + +The modifications I provided are mainly Qt/KDE stuff to generate a nice +GUI interface. I am using the great development tool kDevelop V2.1. + +If you find the tool useful, tell me about it. If you find any bugs or +want some additional features, just give me a hint. As time allows, +I will try to fix them. If you like to translate the language files, +I would be very happy. + +With version 0.5 the passwords are stored as scrambled text in the kshowmailrc file. +This is no absolute protection, but at least the password cannot be read as +clear text anymore. If you have old rc files with stored passwords, you must reeenter +them. + +With version 2.2.0 large parts of the configuration are stored in the kshowmail.xml file, +together with already loaded headers. The improves the speed of refresh a lot, as only +new headers are loaded again. However, this concept is again imcompatible with the old +rc file. You have to create your accounts again. + +Installation: see the INSTALL file and check the following: +make sure the environment variables KDEDIR, QTDIR and PATH contain the correct values. +For SuSE these are: +KDEDIR=/opt/kde3 +QTDIR=/usr/lib/qt3 +PATH=$KDEDIR/bin:$QTDIR/bin:... +If not already installed, you need the kde network include files. Get the +kdenetwork-devel and kdepim-devel rpm packages or the source files. + +Known bugs: +The connection to the pop3 server fails, if there is a null password. +Sound gets interrupted sometimes. + +Fixed bugs: +the messages are sorted in a wrong sequence; fixed in 0.2 +the optiondelete.xpm file is not installed via tgz; fixed in 0.2 +some messages are not translated into other languages; fixed in 0.3 +segfaults when working on empty config list; fixed in 0.3 +on some servers the service is called pop-3. fixed in 0.4 by connect via port 110 +the status line is only updated after transfer. fixed in 0.5 by changed event handling +during dialogs or message boxes conflicting timers fixed in 0.5 +password scrambling algorithm problem fixed in 0.5.1 +Endless loop if long messages are displayed fixed in 0.5.2 +kshowmail locks if several messages are shown in sequence fixed in 0.5.2 +Sometimes the toolbar/statusbar get lost fixed in 2.2.0 +If the number of UIDL's in the cache exceedes 200, fixed in 2.2.0; no uidl cache anymore +old mail may be shown as new, if still on the server. we use xml file now +the uidl0 is not found in the cache, even if it exists +If the first account has no new messages, and the +second account can't get connection, +the list is not refreshed. fixed in 2.2.1 +Crash when KDE shutdown fixed in 2.2.2 +The sorting of messages by other columns (size) +does not work. (535377) fixed in 3.0.0 +The sorting by message numbers does not work correctly fixed in 3.0.1 +in case of multiple accounts +The AlertDialog::signalOk does not work. (514243) fixed in 3.0.1, was KDE2 bug +Crash if all messages of last account are deleted fixed in 3.0.1, never seen again +Missing header fields if transfer interrupted (542602) fixed in 3.0.1 +Crash when disabling account (559122) fixed in 3.0.1 +Wrong account activated if sorted backward (562903) fixed in 3.0.2 + +Acknowledgements: +Since I started the kshowmail development, I received lots of feedback and constructive +critics from all over the world. I appreciate this very much and want to say "thank you" +to all of you. In particular: + +Manfred Haertel who wrote the original command line version. +Espen Sand who provided the timers and some keyboard shortcuts. +Nicolas Vignal who provided RPM's for RedHat, + and the french translation. +Serge Parmentier � who updated the french translation +Edgardo Garc�a who provided the spanish translation +Stephan Giesler who updated the spanish translation and + did some testing. +Mattias Newzella who provided the swedish translation +Aharon Schkolnik , who did a lot of testing and created a lot of +Matthias Doell , ideas that are now part of kshowmail. +Thomas Watz +Maic Szotek who provided the nice new icons for the + 3.x.x version. +Gustavo Zamorano S. who suggested the "Reply" feature and tested + some scripts. +Sandor Laza who provided the hungarian translation. +Gabriele Postorino who provided the italian translation. +Robert Kratky who provided the czech translation. + +Have a lot of fun! ;-) diff --git a/ReleaseNotes b/ReleaseNotes new file mode 100644 index 0000000..247b1e6 --- /dev/null +++ b/ReleaseNotes @@ -0,0 +1,16 @@ +Release Notes for Kshowmail + +20 April 2008 +Version 3.3.0 + Revised filter (dialog and worker) + * White- and Blacklist + * indefinite number of filters + * moving of mails into mailboxes + * ignoring of mails (e.g. for mailing lists) + Spam check with SpamAssassin (just basically) + Revised filter log + +04 August 2007 +Version 3.2.9 (3.3-pre1) + + Added support for SSL/TLS diff --git a/TODO b/TODO new file mode 100644 index 0000000..e69de29 diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..8b90176 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,11863 @@ +## -*- 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 ], [${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 + 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" + 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 +# include +# define environ (*_NSGetEnviron()) +#endif +]) + +AH_VERBATIM(_AIX_STRINGS_H_BZERO, +[ +/* + * AIX defines FD_SET in terms of bzero, but fails to include + * that defines bzero. + */ + +#if defined(_AIX) +#include +#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 +#include +#else +#include +#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 +#ifdef STDC_HEADERS +# include +#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 < +#include +EOF +if test "$kde_qtver" = "2"; then +cat >> conftest.$ac_ext < +#include +#include +EOF + +if test $kde_qtsubver -gt 0; then +cat >> conftest.$ac_ext <> conftest.$ac_ext < +#include +#include +EOF +fi + +echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext +cat >> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <&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 + +NewConnectionDialog + + + + testInput + + + + +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 < +#endif +#include +#include "confdefs.h" +#include + +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 + ], + [ + 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(, [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 +], + [setenv("VAR", "VALUE", 1);], + [int setenv (const char *, const char *, int)], + [SETENV]) +]) + +AC_DEFUN([AC_CHECK_UNSETENV], +[ + KDE_CHECK_FUNC_EXT(unsetenv, [ +#include +], + [unsetenv("VAR");], + [void unsetenv (const char *)], + [UNSETENV]) +]) + +AC_DEFUN([AC_CHECK_GETDOMAINNAME], +[ + KDE_CHECK_FUNC_EXT(getdomainname, [ +#include +#include +#include +], + [ +char buffer[200]; +getdomainname(buffer, 200); +], + [#include + int getdomainname (char *, size_t)], + [GETDOMAINNAME]) +]) + +AC_DEFUN([AC_CHECK_GETHOSTNAME], +[ + KDE_CHECK_FUNC_EXT(gethostname, [ +#include +#include +], + [ +char buffer[200]; +gethostname(buffer, 200); +], + [int gethostname (char *, unsigned int)], + [GETHOSTNAME]) +]) + +AC_DEFUN([AC_CHECK_USLEEP], +[ + KDE_CHECK_FUNC_EXT(usleep, [ +#include +], + [ +usleep(200); +], + [int usleep (unsigned int)], + [USLEEP]) +]) + + +AC_DEFUN([AC_CHECK_RANDOM], +[ + KDE_CHECK_FUNC_EXT(random, [ +#include +], + [ +random(); +], + [long int random(void)], + [RANDOM]) + + KDE_CHECK_FUNC_EXT(srandom, [ +#include +], + [ +srandom(27); +], + [void srandom(unsigned int)], + [SRANDOM]) + +]) + +AC_DEFUN([AC_CHECK_INITGROUPS], +[ + KDE_CHECK_FUNC_EXT(initgroups, [ +#include +#include +#include +], + [ +char buffer[200]; +initgroups(buffer, 27); +], + [int initgroups(const char *, gid_t)], + [INITGROUPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMPS], +[ + KDE_CHECK_FUNC_EXT(mkstemps, [ +#include +#include +], + [ +mkstemps("/tmp/aaaXXXXXX", 6); +], + [int mkstemps(char *, int)], + [MKSTEMPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMP], +[ + KDE_CHECK_FUNC_EXT(mkstemp, [ +#include +#include +], + [ +mkstemp("/tmp/aaaXXXXXX"); +], + [int mkstemp(char *)], + [MKSTEMP]) +]) + +AC_DEFUN([AC_CHECK_MKDTEMP], +[ + KDE_CHECK_FUNC_EXT(mkdtemp, [ +#include +#include +], + [ +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 +#include +#include +#include + ], + [ + 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 +#include +#include +#include + ], + [res_init()], + [int res_init(void)], + [RES_INIT]) +]) + +AC_DEFUN([AC_CHECK_STRLCPY], +[ + KDE_CHECK_FUNC_EXT(strlcpy, [ +#include +], +[ 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 +], +[ 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 +#include +#include +#include +#include +], +[ +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 +#include +#include +#include +], +[ +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 ], + [ + 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 +], +[ + 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 +], + [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 `pkg-config --libs OpenEXR` $LIBZ" + 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 + ], + [ + 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_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 + ], + [ + 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 + +#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 +], [ 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 + 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 + ], + [ + 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 +#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], +[ + AC_ARG_ENABLE(libsuffix, + AC_HELP_STRING([--enable-libsuffix], + [/lib directory suffix (64,32,none,auto[=default])]), + kdelibsuff=$enableval, kdelibsuff="auto") + + if test "$kdelibsuff" = "auto"; then + +cat > conftest.c << EOF +#include +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" || test "$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 + #include + ], + [ + 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 + #include + ], + [ + $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, 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 , 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 . +# Ulrich Drepper , 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 ], [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 , 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 + ], + [ + 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 ],[], + 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 + #include + #include + #include + int foo_test_dpms() + { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[], + ac_cv_have_dpms="yes", [ + LIBS="-lXdpms $LIBS" + AC_TRY_LINK([ + #include + #include + #include + #include + 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 ]) + AC_CHECK_DECL(DPMSCapable, + AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),, + [#include + #include ]) + AH_TEMPLATE(HAVE_DPMSINFO_PROTO, + [Define if you have the DPMSInfo prototype in ]) + AC_CHECK_DECL(DPMSInfo, + AC_DEFINE(HAVE_DPMSINFO_PROTO),, + [#include + #include ]) + 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 +#include +], [], + 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 ],[(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 +],[ + 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.5", + [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 +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 +#include +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 +], +[ +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 < +#endif +#include +#include +#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,/$,,'` + kde_libs_htmldir=$prefix/share/doc/HTML/ + 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` + + 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 + ], + [ + #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 < +#include + +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 +], + [ 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 + ], + [ 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 < +#include + 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 , 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 , 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 , 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 </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 < +#endif + +#include + +#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.so + # instead of lib.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 + ;; + +kfreebsd*-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 <&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 &1 /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)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + # 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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $libobjs $deplibs~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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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 $compiler_flags $libobjs $deplibs `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 $compiler_flags $libobjs $deplibs `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 $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + 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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $deplibs -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + + # 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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $deplibs -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 $compiler_flags $libobjs $deplibs~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* | kfreebsd*-gnu) + # 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + ;; + 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + ;; + 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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + _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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$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 < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$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 , 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 < $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 < 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 <> 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* | kfreebsd*-gnu) + # 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 <&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 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 says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${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 <&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 $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs `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 $compiler_flags $libobjs $deplibs `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 $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs `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)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + 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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $deplibs -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + # 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 $compiler_flags $libobjs $deplibs -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 $compiler_flags $deplibs -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 $compiler_flags $libobjs $deplibs~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* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $compiler_flags $libobjs $deplibs' + _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 $compiler_flags $libobjs $deplibs~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 $compiler_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $libobjs $deplibs' + ;; + 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 $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs' + _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 $compiler_flags $libobjs $deplibs' + _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 $compiler_flags $libobjs $deplibs$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} $compiler_flags $libobjs $deplibs ${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} $compiler_flags $libobjs $deplibs ${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 $compiler_flags $libobjs $deplibs' + _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 $compiler_flags $libobjs $deplibs~$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 $compiler_flags $libobjs $deplibs' + 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 $compiler_flags $libobjs $deplibs' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + 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 +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #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 +# 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]) +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..dd92cb3 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,863 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 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. + +# 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. + +# Copyright (C) 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. + +# 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. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# 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 +# 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 7 + +# 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]) +AC_SUBST([$1_FALSE]) +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 +# 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 + +# 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], 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/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]) +]) + +# 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. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /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 +# 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 12 + +# 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.58])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 +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +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 + 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 +]) +]) + + +# 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_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/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-"$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, 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_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 +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 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 whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# 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="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# 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 /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/build-kshowmail/RPMROOT/SPECS/kshowmail.spec b/build-kshowmail/RPMROOT/SPECS/kshowmail.spec new file mode 100644 index 0000000..8df44d4 --- /dev/null +++ b/build-kshowmail/RPMROOT/SPECS/kshowmail.spec @@ -0,0 +1,48 @@ +# This spec file was generated using Kpp +# If you find any problems with this spec file please report +# the error to ian geiser +Summary: +Name: kshowmail +Version: 3.0.1-beta +Release: 0 +Copyright: GPL +Vendor: Eggert Ehmke +Url: http://www.sourceforge.net/projects/kshowmail + +Packager: Eggert Ehmke +Group: Mail +Source: kshowmail-3.0.1-beta.tar.gz +BuildRoot: + +%description + + +%prep +%setup +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure \ + \ + $LOCALFLAGS +%build +# Setup for parallel builds +numprocs=`egrep -c ^cpu[0-9]+ /proc/stat || :` +if [ "$numprocs" = "0" ]; then + numprocs=1 +fi + +make -j$numprocs + +%install +make install-strip DESTDIR=$RPM_BUILD_ROOT + +cd $RPM_BUILD_ROOT +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > $RPM_BUILD_DIR/file.list.kshowmail +find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.kshowmail +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.kshowmail + +%clean +rm -rf $RPM_BUILD_ROOT/* +rm -rf $RPM_BUILD_DIR/kshowmail +rm -rf ../file.list.kshowmail + + +%files -f ../file.list.kshowmail diff --git a/build-kshowmail/RPMROOT/tmp/rpm-tmp.22447 b/build-kshowmail/RPMROOT/tmp/rpm-tmp.22447 new file mode 100644 index 0000000..0299be2 --- /dev/null +++ b/build-kshowmail/RPMROOT/tmp/rpm-tmp.22447 @@ -0,0 +1,28 @@ +#!/bin/sh + +RPM_SOURCE_DIR="/home/eggert/src/kshowmail//build-kshowmail/RPMROOT//SOURCES" +RPM_BUILD_DIR="/home/eggert/src/kshowmail//build-kshowmail/RPMROOT//BUILD" +RPM_OPT_FLAGS="-O2" +RPM_ARCH="i386" +RPM_OS="linux" +export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS +RPM_DOC_DIR="/usr/doc/packages" +export RPM_DOC_DIR +RPM_PACKAGE_NAME="kshowmail" +RPM_PACKAGE_VERSION="2.1.e" +RPM_PACKAGE_RELEASE="cd /home/eggert/src/kshowmail/build-kshowmail/RPMROOT/BUILD +rm -rf kshowmail-2.1.e +/bin/gzip -dc /home/eggert/src/kshowmail/build-kshowmail/RPMROOT/SOURCES/kshowmail-2.1.e.tar.gz | tar -xvvf - +STATUS=$? +if [ $STATUS -ne 0 ]; then + exit $STATUS +fi +cd kshowmail-2.1.e +[ `/usr/bin/id -u` = '0' ] && /bin/chown -Rhf root . +[ `/usr/bin/id -u` = '0' ] && /bin/chgrp -Rhf root . +/bin/chmod -Rf a+rX,g-w,o-w . +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure \ + \ + $LOCALFLAGS + +exit 0 \ No newline at end of file diff --git a/build-kshowmail/rpmmacros b/build-kshowmail/rpmmacros new file mode 100644 index 0000000..6c1e8a2 --- /dev/null +++ b/build-kshowmail/rpmmacros @@ -0,0 +1,2 @@ +%_topdir /home/eggert/src/kshowmail//build-kshowmail/RPMROOT/ +%_tmppath /home/eggert/src/kshowmail//build-kshowmail/RPMROOT/tmp/ diff --git a/build-kshowmail/rpmrc b/build-kshowmail/rpmrc new file mode 100644 index 0000000..eb05bb1 --- /dev/null +++ b/build-kshowmail/rpmrc @@ -0,0 +1 @@ +macrofiles: /usr/lib/rpm/macros:/usr/lib/rpm/%{_target}/macros:/etc/rpm/macros:/etc/rpm/%{_target}/macros:~/.rpmmacros:/home/eggert/src/kshowmail//build-kshowmail/rpmmacros diff --git a/config.h b/config.h new file mode 100644 index 0000000..8db2109 --- /dev/null +++ b/config.h @@ -0,0 +1,238 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CARBON_CARBON_H */ + +/* Define if you have the CoreAudio API */ +/* #undef HAVE_COREAUDIO */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CRT_EXTERNS_H */ + +/* Defines if your system has the crypt function */ +#define HAVE_CRYPT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have libjpeg */ +#define HAVE_LIBJPEG 1 + +/* Define if you have libpng */ +#define HAVE_LIBPNG 1 + +/* Define if you have a working libpthread (will enable threaded code) */ +#define HAVE_LIBPTHREAD 1 + +/* Define if you have libz */ +#define HAVE_LIBZ 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if your system needs _NSGetEnviron to set up the environment */ +/* #undef HAVE_NSGETENVIRON */ + +/* Define if you have res_init */ +#define HAVE_RES_INIT 1 + +/* Define if you have the res_init prototype */ +#define HAVE_RES_INIT_PROTO 1 + +/* Define if you have a STL implementation by SGI */ +#define HAVE_SGI_STL 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* 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 to 1 if you have the header file. */ +#define HAVE_SYS_BITYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Suffix for lib directories */ +#define KDELIBSUFF "" + +/* Name of package */ +#define PACKAGE "kshowmail" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* The size of `char *', as computed by sizeof. */ +#define SIZEOF_CHAR_P 4 + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 4 + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT 2 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 4 + +/* The size of `unsigned long', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_LONG 4 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "3.3.1" + +/* 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 + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif + + + +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# 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 +#include +#else +#include +#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 + + + +#if defined(__SVR4) && !defined(__svr4__) +#define __svr4__ 1 +#endif + + +/* type to use in place of socklen_t if not defined */ +#define kde_socklen_t socklen_t + +/* type to use in place of socklen_t if not defined (deprecated, use + kde_socklen_t) */ +#define ksize_t socklen_t diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..01ee35e --- /dev/null +++ b/config.h.in @@ -0,0 +1,237 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_CARBON_CARBON_H + +/* Define if you have the CoreAudio API */ +#undef HAVE_COREAUDIO + +/* Define to 1 if you have the 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 header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* 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 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 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 header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the 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 to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the 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 + +/* 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 + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif + + + +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# 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 +#include +#else +#include +#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 + + + +#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.files b/configure.files new file mode 100644 index 0000000..030bce8 --- /dev/null +++ b/configure.files @@ -0,0 +1,2 @@ +./admin/configure.in.min +configure.in.in diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..3858e7d --- /dev/null +++ b/configure.in @@ -0,0 +1,142 @@ +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., 51 Franklin Street, Fifth Floor, +dnl Boston, MA 02110-1301, 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(kshowmail, 3.3.1) 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) +AC_PATH_KDE +dnl ======================================================= +dnl FILE: configure.in.in +dnl ======================================================= + +#MIN_CONFIG(3) + +dnl PACKAGE set before + +dnl check for mimelib/mimepp.h and mimelib/datetime.h + +AC_MSG_CHECKING(for headers $kde_incdir/mimelib/mimepp.h and $kde_incdir/mimelib/datetime.h) +AC_FIND_FILE("/mimelib/mimepp.h", $kde_incdirs, mimeppdir) +AC_FIND_FILE("/mimelib/datetime.h", $kde_incdirs, datetimedir) +if test $mimeppdir = "NO" || test $datetimedir = "NO"; then + AC_MSG_ERROR(Headers $kde_incdir/mimelib/mimepp.h or $kde_incdir/mimelib/datetime.h not found. Please install kdepim devel package.) +else + AC_MSG_RESULT([found]) +fi +KDE_CREATE_SUBDIRSLIST +AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ doc/Makefile ]) +AC_CONFIG_FILES([ doc/cs/Makefile ]) +AC_CONFIG_FILES([ doc/de/Makefile ]) +AC_CONFIG_FILES([ doc/en/Makefile ]) +AC_CONFIG_FILES([ doc/es/Makefile ]) +AC_CONFIG_FILES([ doc/fr/Makefile ]) +AC_CONFIG_FILES([ doc/hu/Makefile ]) +AC_CONFIG_FILES([ doc/it/Makefile ]) +AC_CONFIG_FILES([ doc/ru/Makefile ]) +AC_CONFIG_FILES([ doc/sv/Makefile ]) +AC_CONFIG_FILES([ kshowmail/Makefile ]) +AC_CONFIG_FILES([ kshowmail/kcmconfigs/Makefile ]) +AC_CONFIG_FILES([ pics/Makefile ]) +AC_CONFIG_FILES([ po/Makefile ]) +AC_CONFIG_FILES([ sounds/Makefile ]) +AC_OUTPUT +# 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 x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then + echo "" + echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility" + echo "was not included. Therefore, GCC symbol visibility support remains disabled." + echo "" + echo "For better performance, consider including the Qt visibility supporting patch" + echo "located at:" + echo "" + echo "http://bugs.kde.org/show_bug.cgi?id=109386" + echo "" + echo "and recompile all of Qt and KDE. Note, this is entirely optional and" + echo "everything will continue to work just fine without it." + echo "" +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.in b/configure.in.in new file mode 100644 index 0000000..210b16c --- /dev/null +++ b/configure.in.in @@ -0,0 +1,14 @@ +#MIN_CONFIG(3) + +AM_INIT_AUTOMAKE(kshowmail, 3.3.1) + +dnl check for mimelib/mimepp.h and mimelib/datetime.h + +AC_MSG_CHECKING(for headers $kde_incdir/mimelib/mimepp.h and $kde_incdir/mimelib/datetime.h) +AC_FIND_FILE("/mimelib/mimepp.h", $kde_incdirs, mimeppdir) +AC_FIND_FILE("/mimelib/datetime.h", $kde_incdirs, datetimedir) +if test $mimeppdir = "NO" || test $datetimedir = "NO"; then + AC_MSG_ERROR(Headers $kde_incdir/mimelib/mimepp.h or $kde_incdir/mimelib/datetime.h not found. Please install kdepim devel package.) +else + AC_MSG_RESULT([found]) +fi diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..3afcb22 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + +SUBDIRS = en de es sv fr hu it ru + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = ru +KDE_DOCS = kshowmail + + diff --git a/doc/cs/Makefile.am b/doc/cs/Makefile.am new file mode 100644 index 0000000..ff41fa8 --- /dev/null +++ b/doc/cs/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = en +KDE_DOCS = kshowmail + diff --git a/doc/cs/index.docbook b/doc/cs/index.docbook new file mode 100644 index 0000000..4832400 --- /dev/null +++ b/doc/cs/index.docbook @@ -0,0 +1,516 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +The Kshowmail Handbook + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +Eggert Ehmke + + + +&FDLNotice; + + + +01/02/2004 +3.1.1 + + + + + +This Handbook describes Kshowmail Version 3.1.1 + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker + + +
+ + + + +Introduction + + + + +Kshowmail is a KDE tool to watch mails on a POP3 server. +Headers and complete mails can be viewed without loading them to the +local mail client. +Unpleasant mail can be deleted from the server. +The list of displayed mails can be refreshed via configurable timers. +Filters can be defined to mark known spam and unwanted mail. +Mails marked by filters can be deleted automatically. +A sound can be played if new mail arrives. +A command menu allows user configurable commands like dcop commands to launch kmail. +A special command can be defined to send complain mail against spam. +Multiple accounts are supported. + + + + +Using Kshowmail + + + + +General Usage + +Add some accounts in the "Options" config dialog. Connect to the internet. Now you may list the +mails on the pop3 servers by pressing the "Refresh" button. All other buttons and menu entries +should explain themself. +Have fun ! + + + + Keyboard-Shortcuts + + These keyboard shortcuts are defined: + + F2 + + Show headers of selected mails + + + + F3 + + Show complete selected mails + + + + F5 + + Refresh new mails + + + + Shift-F5 + + Force refresh of all mails + + + + F10 + + Configure accounts + + + + Del + + Delete selected mails from server + + + + Ctrl-C + + Clear the mail list. + (No mails will be deleted from the server) + + + + + + + Filters + + Filters can be used to select known spam and other unwanted mail. + You can define as much filters as you want. + They will be applied on all mails each time the message list is refreshed. + + + In the Dialogue "Filter" you can select a state. + In the state "Deactivated" all filters are switched off. + In the state "Activated" all filters are switched on. + Filtered mails are selected in the message list and can be deleted manually. + In the state "Automatic delete" all filtered mails are deleted immediatly. + Please be careful when you select this state ! + It may be useful to test new filters some time in the "Activated" state. + In the file ~/.kde/share/apps/kshowmail/kshowmail.log you can monitor mails that have been deleted automatically. + + + + Each filter contains one or two conditions, that can be linked together. + Especially powerful conditions can be created using regular expressions. + Here the regular expressions of the Qt-Library are utilized, + for a detailed documentation see the documentation of the class KRegExpEditor, + or one of the numerous texts about regular expressions in the internet. + + What is a regular expression? + + + + + Regular Expressions examples + + MS Corporation|Microsoft: either "MS Corporation" or "Microsoft" will be recognized + + + (mail|message) delivery: either "mail delivery" or "message delivery" will be recognized + + + ms (program )?security: either "ms security" or "ms program security" will be recognized + + + [\x0100-\xffff]: all characters outside the ASCII character set are recognized (chinese and korean characters) + + + These templates can be combined arbitrarily. + + + + + +Command Line Parameters + +You can provide the selected account on the command line. +If the option -config is set on the command line, the configuration dialog is started immediatly. +This can be helpful, if the function "Terminate kshowmail if no new mail" is activated. +The option -refresh can be used to start the refresh processing immediatly. + + + +External programs + +To start external programs like kmail, add a entry in the commands menu. +Command names show up in the Actions menu. If they contain the character '&', the following letter will +be used as keyboard shortcut. + + The following parameters are placeholders and will be substituted by the actual values: + <user> User name + <passwd> Password + <server> Server + <header> The mail header will be copied to a temporary file, the name of this file will be substituted here. + <body> The mail body will be copied to a temporary file, the name of this file will be substituted here. + + A very effective method is the dcop command that allows to call selected methods of + other KDE programs. + You can create a command that calls KMail to get the mail from the server: + + + dcop kmail KMailIface checkMail + + + The KDE program kdcop is useful to evaluate the functions of other KDE programs. + + + + Sending complain mails + + The command to send complain mails is a special one. + To keep flexibility, it has been implemented as an external command too. + I suggest to use the perl program "spam.pl" version 0.20 or better of Daniel Stenberg. + It can be received at http://spam.sourceforge.net. + To make it run with kshowmail, follow these steps: + + + 1. Install spam.pl in a suitable directory, say /usr/local/bin. + + + 2. Create the files ~/.spam/friends and ~/.spam/from. + More details are available in the spam.pl documentation. + + + 3. Create an entry in the kshowmail command menu. + The name of the entry has to be "complain" ! + Otherwise the command will not be recognized correctly. + Enter this text as command line: + + + spam.pl -d < <body> + + + This causes the mail body to be piped into spam.pl. + + + The debug option -d may be removed later, if you are satisfied with the results. + Only then the complain mails will be actually sent. + Add other options as you like. + + + Be careful to choose the right entries in the ~/.spam/friends file. + At least the local domain should be inserted. + Use this feature at your own risk ! + + + As you press the button "Send complain mail", for each highlighted mail + there will be one or more complain mails generated and sent immediatly. + The receiver of these mails are determined by spam.pl. + As long as the option -d is activated, only a message will be displayed to show what would happen. + To activate the feature, remove the debug flag. + + + If you prefer other anti spam programs, try to set them up in a similar way. + Contact me if there are any problems. + + + + + +Questions and Answers + + + +&reporting.bugs; +&updating.documentation; + + + + +To be provided + + +To be provided. + + + + + + + + + +Credits and License + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Contributors: + + + +Nicolas Vignal nicolas.vignal@fnac.net who provided RPMs for RedHat, +and the french translation. + + + + +Edgardo Garcia edyx@mindless.com who provided the spanish translation + + + + +Mattias Newzella newzella@swipnet.se who provided the swedish translation + + + + +Sandor Laza slaza@xs4all.nl who provided the hungarian translation + + + + +Gabriele Postorino g.posto@tin.it who provided the italian translation + + + + +Many users did a lot of testing and created a lot of +ideas that are now part of kshowmail. +I want to say "thank you" to all of you ! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +How to obtain Kshowmail + + +The actual version is to be found on + +http://sourceforge.net/projects/kshowmail +or on +http://freshmeat.net + + + + + +Requirements + + + + + Developed and tested under SuSE 8.2. + In order to successfully use Kshowmail, you need KDE 3.1.x and Qt 3.1.x. + + + + +You can find a list of changes at + +http://sourceforge.net/projects/kshowmail + + + + +Compilation and Installation + + + In order to compile and install Kshowmail on your system, type the following in the base + directory of Kshowmail: + + % ./configure + or even: + % ./configure --prefix=$KDEDIR + + % make + + as root: + % make install + + It may be useful to set the environment variable KDEDIR before these steps. + + + + Since Kshowmail uses autoconf and automake you should have not trouble compiling it. + Should you run into problems please report them to me. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/de/Makefile.am b/doc/de/Makefile.am new file mode 100644 index 0000000..8108eb8 --- /dev/null +++ b/doc/de/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = de +KDE_DOCS = kshowmail + diff --git a/doc/de/index.docbook b/doc/de/index.docbook new file mode 100644 index 0000000..47ae09b --- /dev/null +++ b/doc/de/index.docbook @@ -0,0 +1,522 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +Das KShowmail Handbuch + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +Eggert Ehmke + + + +&FDLNotice; + + + +01/02/2004 +3.1.1 + + + + + +Dieses Handbuch beschreibt KShowmail Version 3.1.1 + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker + + +
+ + + + +Einführung + + + + +KShowmail ist ein KDE-Tool, mit dem Nachrichten (Emails) auf einem POP3-Server +überwacht werden können. +Headers und vollständige Nachrichten können betrachtet werden, ohne sie dem lokalen Mail-Client zuzustellen. +Ungewünschte Nachrichten können auf dem Server gelöscht werden. +Die Liste der angezeigten Nachrichten kann periodisch erneuert werden. +Filter können definiert werden, um bekannte Spam zu kennzeichnen. +Die durch Filter gekennzeichneten Nchrichten können automatisch gelöscht werden. +Beim Eintreffen neuer Nachrichten kann ein Klang abgespielt werden. +Ein Menü "Kommandos" erlaubt die Einrichtung von benutzerdefinierten +Kommandos wie dcop zum Aufrufen von Funktionen anderer KDE-Programme. +Zum Versenden von Beschwerden wegen Spam kann ein besonderes Kommando eingerichtet werden. +Mehrere Pop3-Konten können überwacht werden. + + + + +Benutzung + + + + +Allgemein + +Im Dialog "Einstellungen/Konten einrichten" können Benutzerkonten eingerichtet werden. +Wenn eine Verbindung zum Internet besteht, +können die Nachrichten auf dem POP3-Server durch Drücken des Buttons "Nachrichten erneuern" angezeigt werden. +Im Dialog "Einstellungen/Filter einrichten" können Filter eingerichtet werden, +um Nachrichten von bekannten Spammern auszufiltern. +Alle anderen Buttons und Menü-Funktionen sollten selbsterklärend sein. +Viel Spaß ! + + + + Tastatur-Kürzel + + Diese Tastatur-Kürzel sind definiert: + + F2 + + Vorspann der markierten Nachrichten anzeigen + + + + F3 + + Vollständige markierte Nachrichten anzeigen + + + + F5 + + Nachrichten erneuern + + + + Umschalt-F5 + + Erzwungenes Erneuern aller Nachrichten + + + + F10 + + Konten einrichten + + + + Entf + + Markierte Nachrichten löschen + + + + Strg-C + + Liste der geladenen Nachrichten löschen + (Nachrichten werden nicht vom Server gelöscht) + + + + + + + + Filter + + Mit Hilfe von Filtern ist es möglich, bekannte Spammer und andere unerwünschte Nachrichten auszufiltern. + Es können beliebig viele Filter eingerichtet werden. + Sie werden jeweils beim Erneuern der Nachrichtenliste auf alle vorhandenen Nachrichten angewandt. + + + Im Dialog "Filter" kann der Status eingestellt werden. + Im Status "Deaktiviert" sind alle Filter ausgeschaltet. + Im Status "Aktiviert" sind alle Filter eingeschaltet. + Gefilterte Nachrichten werden in der Nachrichtenliste markiert und können manuell gelöscht werden. + Im Status "Automatisches Löschen" werden alle gefilterten Nachrichten sofort gelöscht. + Bitte Vorsicht beim Aktivieren dieses Status ! + Es ist sinnvoll, neue Filter zunächst einige Zeit im Status "Aktiviert" zu testen. + In der Datei ~/.kde/share/apps/kshowmail/kshowmail.log können automatisch gelöschte Nachrichten + überprüft werden. + + + + Jeder Filter besteht aus ein oder zwei Bedingungen, die miteinander verknüpft werden können. + Besonders aussagekräftige Bedingungen können mit Hilfe der "Regulären Ausdrücke" formuliert werden. + Es werden die Regulären Ausdrücke der Qt-Bibliothek verwendet, für eine genauere Dokumentation der Syntax + siehe die Dokumentation der Klasse KRegExpEditor oder eine der vielen Texte zu "Regular Expressions" im Internet. + + Was ist ein regulärer Ausdruck? + + + + + Beispiele zu Regulären Ausdrücken + + MS Corporation|Microsoft: entweder "MS Corporation" oder "Microsoft" wird erkannt + + + (mail|message) delivery: entweder "mail delivery" oder "message delivery" wird erkannt + + + ms (program )?security: entweder "ms security" oder "ms program security" wird erkannt + + + [\x0100-\xffff]: alle Zeichen ausserhalb des ASCII-Alphabets werden erkannt (chinesische und koreanische Schriftzeichen) + + + Diese Muster lassen sich beliebig kombinieren. + + + + + + Kommandozeilen-Parameter + + Das gewünschte Benutzerkonto kann beim Aufruf des Programms auf der Kommandozeile übergeben werden. + Wird das Programm mit der Option -config gestartet, so wird unmittelbar der Konfigurationsdialog gestartet. + Dies kann nützlich sein, wenn die Funktion "Beenden von KShowmail, wenn keine neuen Nachrichten" aktiviert ist. + Die Option -refresh kann benutzt werden, um die Erneuerung der Nachrichten sofort zu starten. + + + + +Externe Kommandos + +Im Menü "Kommandos" können externe Kommandos wie dcop eingetragen werden. Die Kommandonamen +erscheinen danach im gleichen Menü. Wenn der Kommandoname das Zeichen '&' enthält, kann das folgende Zeichen +als Tastaturkürzel benutzt werden. + + +Die folgenden Parameter sind Platzhalter und werden beim Aufruf durch aktuelle +Werte ersetzt: + + <user> Benutzername + <passwd> Passwort + <server> Server + +<header> Der Vorspann der Nachricht wird in eine temporäre Datei kopiert, der Name dieser Datei wird hier eingetragen. + + +<body> Die vollständige Nachricht wird in eine temporäre Datei kopiert, der Name dieser Datei wird hier eingetragen. + + + + Eine hilfreiche Methode ist das Kommando dcop, mit dem man ausgewählte Funktionen + anderer KDE-Programme aufrufen kann. + Mit dem folgenden Kommando wird die Mail durch KMail abgerufen: + + + dcop kmail KMailIface checkMail + + + Das KDE-Programm kdcop ist hilfreich, um die Funktionen von anderen KDE-Programmen zu erkunden. + + + + + Verschicken von Beschwerden + +Eine besondere Rolle spielt das Kommando zum Verschicken von Beschwerden wegen Spam. +Um möglichst flexibel zu bleiben, wird es ebenfalls als externes Kommando realisiert. +Ich empfehle die Benutzung von "spam.pl" Version 0.21 von Daniel Stenberg. +Es ist zu beziehen unter http://spam.sourceforge.net. +Um es in KShowmail einzubinden, sind folgende Schritte notwendig: + +1. Installiere spam.pl in ein geeignetes Verzeichnis, z.B. /usr/local/bin. +2. Richte die Dateien ~/.spam/friends und ~/.spam/from ein. +Weitere Details sind der Dokumentation von spam.pl zu entnehmen. +3. Einrichten eines Eintrages im Kommandomenü von KShowmail. +Der Name des Menüeintrages muß "complain" lauten ! +Sonst wird das Kommando nicht richtig erkannt. +Als Kommandozeile wird folgender Text eingetragen: + + spam.pl -d < <body> + Hier wird der Text der Nachricht nach stdin von spam.pl umgeleitet. + + +Die Option -d (Debug) kann später entfernt werden, wenn man mit der Einrichtung zufrieden ist. +Erst dann werden die Beschwerden tatsächlich abgeschickt. +Andere Optionen können nach Bedarf hinzugefügt werden. + + +Der Inhalt der Datei ~/.spam/friends sollte sorgfältig gewählt werden. +Mindestens die eigene Domain sollte darin stehen. +Die Benutzung dieses Features geschieht auf eigene Gefahr ! + + +Bei Betätigen des Buttons "Beschwerde schicken" wird für jede markierte Nachricht +eine oder mehrere Beschwerden erzeugt, die sofort verschickt werden. +Die Empfänger dieser Nachrichten werden von spam.pl festgelegt. +Solange die Debugoption -d in der Kommandozeile steht, wird lediglich ein Fenster angezeigt, +aus dem zu entnehmen ist, an welche Empfänger die Nachricht gehen würde. +Die Funktion wird also aktiviert, indem das Debugflag entfernt wird ! + + +Wer ein anderes Anti-Spam-Programm bevorzugt, kann versuchen, es auf ähnliche Weise einzubinden. +Wenn es dabei Probleme geben sollte, werde ich versuchen zu helfen. + + + + + +Fragen und Antworten + + + +&reporting.bugs; +&updating.documentation; + + + + +keine Fragen ... + + +... keine Antworten ! + + + + + + + + + +Beiträge + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Mitwirkende: + + + +Nicolas Vignal nicolas.vignal@fnac.net erstellte RPM's für RedHat, +und die französische Übersetzung. + + + + +Edgardo Garcia edyx@mindless.com erstellte die spanische Übersetzung. + + + + +Mattias Newzella newzella@swipnet.se erstellte die schwedische Übersetzung. + + + + +Sandor Laza slaza@xs4all.nl erstellte die ungarische Übersetzung. + + + + +Gabriele Postorino g.posto@tin.it erstellte die italienische Übersetzung. + + + + +Viele Benutzer haben mir bei den Tests geholfen und viele Ideen gehabt, die in das Programm +eingeflossen sind. Bei allen möchte ich mich bedanken ! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +Wo bekomme ich KShowmail ? + + +Die aktuelle Version gibt es immer unter + +http://sourceforge.net/projects/kshowmail +oder bei +http://freshmeat.net + + + + +Voraussetzungen + + + + +Entwickelt und getestet unter SuSE Linux 8.2. +Das Programm sollte sich unter allen Linux-Distributionen übersetzen lassen. +Qt 3.1.x und KDE 3.1.x werden benötigt, und die X include Dateien. + + + + +Die aktuellen Änderungen befinden sich in der Datei Changelog oder bei + +http://sourceforge.net/projects/kshowmail/ + + + + + Kompilation und Installation + + Um KShowmail zu übersetzen und zu installieren, benutze diese Kommandos + im Installationsverzeichnis: + + % ./configure + oder auch + % ./configure --prefix=$KDEDIR + + % make + + Als root: + % make install + + Es ist sinnvoll, die Umgebungsvariable KDEDIR vorher richtig zu setzen. + + + + Da KShowmail autoconf benutzt, sollte es keine Probleme geben. + Falls doch irgendwelche Schwierigkeiten auftreten sollten, wende dich an mich. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am new file mode 100644 index 0000000..ff41fa8 --- /dev/null +++ b/doc/en/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = en +KDE_DOCS = kshowmail + diff --git a/doc/en/index.docbook b/doc/en/index.docbook new file mode 100644 index 0000000..4832400 --- /dev/null +++ b/doc/en/index.docbook @@ -0,0 +1,516 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +The Kshowmail Handbook + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +Eggert Ehmke + + + +&FDLNotice; + + + +01/02/2004 +3.1.1 + + + + + +This Handbook describes Kshowmail Version 3.1.1 + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker + + +
+ + + + +Introduction + + + + +Kshowmail is a KDE tool to watch mails on a POP3 server. +Headers and complete mails can be viewed without loading them to the +local mail client. +Unpleasant mail can be deleted from the server. +The list of displayed mails can be refreshed via configurable timers. +Filters can be defined to mark known spam and unwanted mail. +Mails marked by filters can be deleted automatically. +A sound can be played if new mail arrives. +A command menu allows user configurable commands like dcop commands to launch kmail. +A special command can be defined to send complain mail against spam. +Multiple accounts are supported. + + + + +Using Kshowmail + + + + +General Usage + +Add some accounts in the "Options" config dialog. Connect to the internet. Now you may list the +mails on the pop3 servers by pressing the "Refresh" button. All other buttons and menu entries +should explain themself. +Have fun ! + + + + Keyboard-Shortcuts + + These keyboard shortcuts are defined: + + F2 + + Show headers of selected mails + + + + F3 + + Show complete selected mails + + + + F5 + + Refresh new mails + + + + Shift-F5 + + Force refresh of all mails + + + + F10 + + Configure accounts + + + + Del + + Delete selected mails from server + + + + Ctrl-C + + Clear the mail list. + (No mails will be deleted from the server) + + + + + + + Filters + + Filters can be used to select known spam and other unwanted mail. + You can define as much filters as you want. + They will be applied on all mails each time the message list is refreshed. + + + In the Dialogue "Filter" you can select a state. + In the state "Deactivated" all filters are switched off. + In the state "Activated" all filters are switched on. + Filtered mails are selected in the message list and can be deleted manually. + In the state "Automatic delete" all filtered mails are deleted immediatly. + Please be careful when you select this state ! + It may be useful to test new filters some time in the "Activated" state. + In the file ~/.kde/share/apps/kshowmail/kshowmail.log you can monitor mails that have been deleted automatically. + + + + Each filter contains one or two conditions, that can be linked together. + Especially powerful conditions can be created using regular expressions. + Here the regular expressions of the Qt-Library are utilized, + for a detailed documentation see the documentation of the class KRegExpEditor, + or one of the numerous texts about regular expressions in the internet. + + What is a regular expression? + + + + + Regular Expressions examples + + MS Corporation|Microsoft: either "MS Corporation" or "Microsoft" will be recognized + + + (mail|message) delivery: either "mail delivery" or "message delivery" will be recognized + + + ms (program )?security: either "ms security" or "ms program security" will be recognized + + + [\x0100-\xffff]: all characters outside the ASCII character set are recognized (chinese and korean characters) + + + These templates can be combined arbitrarily. + + + + + +Command Line Parameters + +You can provide the selected account on the command line. +If the option -config is set on the command line, the configuration dialog is started immediatly. +This can be helpful, if the function "Terminate kshowmail if no new mail" is activated. +The option -refresh can be used to start the refresh processing immediatly. + + + +External programs + +To start external programs like kmail, add a entry in the commands menu. +Command names show up in the Actions menu. If they contain the character '&', the following letter will +be used as keyboard shortcut. + + The following parameters are placeholders and will be substituted by the actual values: + <user> User name + <passwd> Password + <server> Server + <header> The mail header will be copied to a temporary file, the name of this file will be substituted here. + <body> The mail body will be copied to a temporary file, the name of this file will be substituted here. + + A very effective method is the dcop command that allows to call selected methods of + other KDE programs. + You can create a command that calls KMail to get the mail from the server: + + + dcop kmail KMailIface checkMail + + + The KDE program kdcop is useful to evaluate the functions of other KDE programs. + + + + Sending complain mails + + The command to send complain mails is a special one. + To keep flexibility, it has been implemented as an external command too. + I suggest to use the perl program "spam.pl" version 0.20 or better of Daniel Stenberg. + It can be received at http://spam.sourceforge.net. + To make it run with kshowmail, follow these steps: + + + 1. Install spam.pl in a suitable directory, say /usr/local/bin. + + + 2. Create the files ~/.spam/friends and ~/.spam/from. + More details are available in the spam.pl documentation. + + + 3. Create an entry in the kshowmail command menu. + The name of the entry has to be "complain" ! + Otherwise the command will not be recognized correctly. + Enter this text as command line: + + + spam.pl -d < <body> + + + This causes the mail body to be piped into spam.pl. + + + The debug option -d may be removed later, if you are satisfied with the results. + Only then the complain mails will be actually sent. + Add other options as you like. + + + Be careful to choose the right entries in the ~/.spam/friends file. + At least the local domain should be inserted. + Use this feature at your own risk ! + + + As you press the button "Send complain mail", for each highlighted mail + there will be one or more complain mails generated and sent immediatly. + The receiver of these mails are determined by spam.pl. + As long as the option -d is activated, only a message will be displayed to show what would happen. + To activate the feature, remove the debug flag. + + + If you prefer other anti spam programs, try to set them up in a similar way. + Contact me if there are any problems. + + + + + +Questions and Answers + + + +&reporting.bugs; +&updating.documentation; + + + + +To be provided + + +To be provided. + + + + + + + + + +Credits and License + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Contributors: + + + +Nicolas Vignal nicolas.vignal@fnac.net who provided RPMs for RedHat, +and the french translation. + + + + +Edgardo Garcia edyx@mindless.com who provided the spanish translation + + + + +Mattias Newzella newzella@swipnet.se who provided the swedish translation + + + + +Sandor Laza slaza@xs4all.nl who provided the hungarian translation + + + + +Gabriele Postorino g.posto@tin.it who provided the italian translation + + + + +Many users did a lot of testing and created a lot of +ideas that are now part of kshowmail. +I want to say "thank you" to all of you ! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +How to obtain Kshowmail + + +The actual version is to be found on + +http://sourceforge.net/projects/kshowmail +or on +http://freshmeat.net + + + + + +Requirements + + + + + Developed and tested under SuSE 8.2. + In order to successfully use Kshowmail, you need KDE 3.1.x and Qt 3.1.x. + + + + +You can find a list of changes at + +http://sourceforge.net/projects/kshowmail + + + + +Compilation and Installation + + + In order to compile and install Kshowmail on your system, type the following in the base + directory of Kshowmail: + + % ./configure + or even: + % ./configure --prefix=$KDEDIR + + % make + + as root: + % make install + + It may be useful to set the environment variable KDEDIR before these steps. + + + + Since Kshowmail uses autoconf and automake you should have not trouble compiling it. + Should you run into problems please report them to me. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/es/Makefile.am b/doc/es/Makefile.am new file mode 100644 index 0000000..c4df70b --- /dev/null +++ b/doc/es/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = es +KDE_DOCS = kshowmail + diff --git a/doc/es/index.docbook b/doc/es/index.docbook new file mode 100644 index 0000000..69c25c5 --- /dev/null +++ b/doc/es/index.docbook @@ -0,0 +1,428 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +El manual del Kshowmail + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +Eggert Ehmke + + + +&FDLNotice; + + + +20.02.2003 +3.0.4 + + + + + +Este manual describe al Kshowmail versión 3.0.4 + + + + + + +KDE +kshowmail +kmail +pop3 +chequear correo + + +
+ + + + +Introducción + + + + +Kshowmail es una herramienta KDE para ver mensajes en un servidor pop3. +Es posible ver encabezados y correos completos sin necesidad de bajarlos al +cliente de correo local. Los correos no deseados pueden ser borrados del servidor. +La lista de correos mostrados puede ser actualizada periódicamente. +Un sonido puede ser tocado cuando llega nuevo correo. +El menú de "comandos" permite agregar comandos elegidos por el usuario como fetchmail o sendmail. +Se puede definir un comando especial para enviar un mensaje de protesta contra los correos spam. +Se pueden monitorear varias cuentas POP3. + + + + +Uso + + + + +Uso General + +Agregue una o varias cuentas en el cuadro "Opciones". Conéctese a Internet. +Ahora puede listar los correos en el servidor POP3 presionando el botón "Renovar lista de mensajes". +Los demás botones y entradas del menú deberían ser autoexplicativos. +Disfrútelo! + + + + Accesos directos + + Estos accesos directos están configurados: + + F2 + + Mostrar encabezales de mensajes seleccionados + + + + F3 + + Mostrar mensajes seleccionadas + + + + F5 + + Renovar mensajes nuevos + + + + Shift-F5 + + Forzar renovación de toda la lista + + + + F10 + + Configurar cuentas + + + + Supr + + Borrar mensajes seleccionados del servidor + + + + Ctrl-C + + Borrar lista de mensajes. + (No se borrarán mensajes del servidor) + + + + + +Parametros de la línea de comando + +Iniciando el programa a travéz de la línea de comando se puede especificar la cuenta deseada. +Si se usa la opción -config iniciando el programa desde la línea de comandos, se mostrará directamente el cuadro de +configuración de Kshowmail. Esto puede resultar útil si está activa la opción "Finalizar Kshowmail si no hay correo nuevo". +La Opción -refresh puede ser aplicada para refrescar la lista de mensajes directamente al iniciar el programa. + + + +Programas externos + +Para iniciar programas externos tal como el sendmail o fetchmail, agregue una entrada en el menú "Comandos". +Los nombres de los comandos aparecerán en el mismo menú. Si el nombre del comando tiene el caractér '&' la siguiente +letra será usada como atajo de teclado. + + +Los siguientes parámetros son variables y al llamarles estarán remplazados por los valores actuáles: + + <user> Nombre de usuario + <passwd> Contraseña + <server> Servidor + +<header> El encabezado del correo será copiado a un archivo temporal, el nombre de dicho archivo será sustituido acá. + + +<body> El cuerpo del correo será copiado a un archivo temporal, el nombre de dicho archivo será sustituido acá. + + + +Enviar correos de quejas + +El comando para enviar correos de protesta es especial. +Para mantener la flexibilidad, se lo ha implementado como un comando externo también. +Sugiero usar el programa perl "spam.pl" versión 0.20 o superior de Daniel Stenberg. +Se puede encontren en +http://spam.sourceforge.net. +Para incorporarlo al kshowmail siga las siguientes instrucciones: + + +1. Instale spam.pl en un directorio adecuado, supongamos /usr/local/bin. +2. Cree los archivos ˜/.spam/friends y ˜/.spam/from. +Para mas detalle remítase a la documentación de spam.pl. +3. Cree una entrada en el menú "comando" del kshowmail. +El nombre del menú debe ser "complain" ! +De lo contrario el comando no será reconocido correctamente. +Ingrese este texto como línea de comando: + + + spam.pl -d < <body> + Esto hará que el cuerpo del mensaje será desviado a stdin de spam.pl. + +La opción de depuración -d puede ser removida más tarde si está satisfecho con los resultados. +Recién en este momento las quejas serán enviadas. +Agrege otras opciones si gusta. + + +Se recomienda seleccionar bien el contenido del archivo ~/.spam/friends. +Al menos el propio dominio debería aparecer aquí. +El uso de esta opción queda bajo su propia responsibilidad! + + +Presionando el botón "Mandar queja" generan para cada correo mensajes de queja y se envían instantáneamente. +Los receptores de estos mensajes están definidos por spam.pl. +Mientras en la linea de comando aparece la opción de depuración (-d), sólo se mostrará una ventana que le +muestra a cual receptores se enviarían mensajes. +Entonces la funcionalidad está activada cuando se remueve la opción de depuración! + + +Otros programas Anti-Spam se pueden intentar de incluir de forma parecida. Si ocurren problemas, intentaré de ayudar. + + + + + +Preguntas y Respuestas + + + +&reporting.bugs; +&updating.documentation; + + + + +no hay preguntas... + + +...no hay respuestas! + + + + + + + + + +Créditos y licensia + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Contribuciones: + + + +Nicolas Vignal nicolas.vignal@fnac.net generó los RPM's para RedHat, y realizó la traducción al francés. + + + + +Stephan Giesler giesler@gmx.net hizo la traducción español a base de la de Edgardo Garcia edyx@mindless.com. + + + + +Mattias Newzella newzella@swipnet.se realizó la traducción al sueco. + + + + +Muchos usuarios me ayudaron con pruebas y ideas que fueron incluidas en el programa. Se les agradezco a todos! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +Donde puedo conseguir Kshowmail? + + +La versión más reciente siempre se encuentra en + +http://sourceforge.net/projects/kshowmail +o en +http://freshmeat.net + + + + +Requerimientos + + + + +Desarollado y probado bajo SuSE Linux 8.1. +No tendría que haber problemas con compilarlo en cualquier distribución Linux. +Qt 3.1.x y KDE 3.1.x son necesarios, como también los archivos include de X. + + + + +Los cambios más recientes se encuentran en el archivo Changelog o en + +http://sourceforge.net/projects/kshowmail + + + + +Compilación e Instalación + +Para compilar e instarlar Kshowmail ejecutá estos comandos en el directorio de instalación: + +% ./configure +% make +% make install + + + + +Como Kshowmail utiliza autoconf, no deberían ocurrir problemas. Si igualmente ocurren, contactame. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/fr/Makefile.am b/doc/fr/Makefile.am new file mode 100644 index 0000000..fdd5123 --- /dev/null +++ b/doc/fr/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = fr +KDE_DOCS = kshowmail + diff --git a/doc/fr/index.docbook b/doc/fr/index.docbook new file mode 100644 index 0000000..af4e833 --- /dev/null +++ b/doc/fr/index.docbook @@ -0,0 +1,372 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +Le manuel de Kshowmail + + + + +Eggert + +Ehmke + +
eggert.ehmke@berlin.de
+
+
+
+ + + + +2000 +2001 +2002 +2003 +Eggert Ehmke + + + +&FDLNotice; + + + +03/05/2003 +3.0.4 + + + + + +Ce manuel décrit la version 3.0.4 de Kshowmail + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker +notificateur + + + +
+ + + + +Introduction + + + + +Kshowmail est un outil KDE destiné à vérifier les mails sur un serveur POP3. +Les en-têtes et les messages complets peuvent être visualisés sans avoir à les +télécharger dans son programme de courrier électronique. Les messages non désirés +peuvent être effacés directement sur le serveur. La liste des messages affichés +peut être rafraîchie par le biais de chronomètres configurables. +Un son peut être joué à l'arrivée de nouveaux messages. +Un menu de commandes permet à l'utilisateur de lancer des commandes +configurables telles que fetchmail ou sendmail. +Une commande spéciale peut être définie afin d'envoyer un message de plainte +relatif au spam. Le programme peut gérer plusieurs comptes. + + + + +Utiliser Kshowmail + + + + +Utilisation générale + +Ajoutez un ou plusieurs comptes via la boîte de dialogue "Options". Connectez-vous à Internet. +Vous êtes maintenant en mesure d'afficher la liste des messages présents sur les différents serveurs POP3 +en cliquant sur le bouton "Rafraîchir". Tous les autres boutons et entrées de menus parlent d'eux-mêmes. +La touche "Delete" peut être utilisée pour effacer des messages. +Bon amusement avec Kshowmail ! + + + +Paramètres de la ligne de commande + +Vous pouvez stipuler un compte déterminer dans la ligne de commande. +Si l'option -config est indiquée dans la ligne de commande, la boîte de configuration sera immédiatement affichée. +Ceci peut être utile si la fonction "Fermer Kshowmail en l'absence de nouveau message" est activée. +L'option -refresh peut être utilisée pour lancer le rafraîchissement de la liste des messages immédiatement. + + + +Programmes externes + +Pour lancer des programmes externes tels que Fetchmail, ajoutez une entrée dans le menu des commandes. +Les noms des commandes apparaissent dans le menu des actions. Si ils contiennent le caractère '&'la lettre suivante sera +utilisée comme raccourci clavier. + + Les paramètres suivants sont des variables et seront remplacés par leurs valeurs actuelles: + <user> Utilisateur + <passwd> Mot de passe + <server> Serveur + <header> L'en-tête du message sera copié dans un fichier temporaire. Le nom de ce fichier sera indiqué ici. + <body> Le corps du message sera copié dans un fichier temporaire. Le nom de ce fichier sera indiqué ici. + + + Envoi de messages de plainte + +La commande pour envoyer des messages de plainte est une commande particulière. +Afin d'assurer la flexibilité du programme, elle a été implémentée comme commande externe également. +Je vous suggère d'utiliser le programme perl "spam.pl" version 0.20 ou ultérieure de Daniel Stenberg. +Il peut être obtenu à l'adresse http://spam.sourceforge.net. +Afin qu'il puisse fonctionner avec Kshowmail, suivez les étapes suivantes: + +1. Installez spam.pl dans un répertoire qui vous convient, par exemple /usr/local/bin. +2. Créez les fichiers ~/.spam/friends et ~/.spam/from. +Vous trouverez plus de détails dans la documentation de spam.pl. +3. Créez une entrée dans le menu des commandes de kshowmail. +Le nom de cette entrée doit être "complain" ! +Autrement, la commande ne sera pas reconnue correctement. +Entrez le texte suivant en tant que ligne de commande: + spam.pl -d < <body> + Ceci enverra le corps du message dans spam.pl. + + L'option debug -d pourra être enlevée plus tard, si vous êtes satisfait du résultat. +Les messages de plainte seront seulement envoyés à ce moment-là. +Ajoutez d'autres options comme vous le souhaitez. + Faites attention de choisir les bonnes entrées dans le fichier ~/.spam/friends. +Au moins le domaine local devra être renseigné. +Utilisez cette fonction à vos risques et périls ! + Lorsque vous presserez le bouton "Envoyer un message de plainte", un ou plusieurs messages de plainte seront générés et envoyés +immédiatement pour chacun des messages sélectionnés. +Le destinataire de ces messages sera déterminé par spam.pl. +Aussi longtemps que l'option -d sera activée, seul un message sera affiché pour indiquer ce qui se passera. +Pour activer la fonction, enlevez l'indicateur de debug. + Si vous préférez d'autres programmes antispam, essayez de les installer d'une manière identique. +Contactez-moi si vous deviez rencontrer un quelconque problème. + + + + +Questions et réponses + + + +&reporting.bugs; +&updating.documentation; + + + + +A venir. + + +A venir. + + + + + + + + + +Credits et Licence + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Contributeurs: + + +Manfred Haertel Manfred.Haertel@rz-online.de +qui a écrit la version originale en ligne de commande. + + + + +Nicolas Vignal nicolas.vignal@fnac.net qui a fourni les RPM's pour RedHat, +et la traduction française. + + + + +Edgardo Garcia edyx@mindless.com qui a fourni la traduction espagnole. + + + + +Mattias Newzella newzella@swipnet.se qui a fourni la traduction suédoise. + + + + +Beaucoup d'autres utilisateurs ont longuement testé le programme et ont apporté nombre d'idées +qui font maintenant partie de kshowmail. +A vous tous, je vous dis "merci" ! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +Comment obtenir Kshowmail ? + + +La version actuelle peut être récupérée à + +http://sourceforge.net/projects/kshowmail/ +ou à +http://freshmeat.net + + + + + +Eléments requis + + + + +Afin de pouvoir utiliser avec succès Kshowmail, vous avez besoin de Qt 3.x.x et KDE 3.x.x. + + + + +Vous trouverez la liste des modifications à + +http://sourceforge.net/projects/kshowmail + + + + +Compilation et installation + + +Afin de pouvoir compiler et installer Kshowmail sur votre système, tapez les commandes suivantes +dans le répertoire racine de Kshowmail: + +% ./configure +% make +% make install + + + +Kshowmail utilisant autoconf et automake, vous ne devriez rencontrer aucun problème lors de la compilation. +Si vous deviez malgré tout en rencontrer, merci de bien vouloir me les rapporter. + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/html/AlertDlg_8cpp-source.html b/doc/html/AlertDlg_8cpp-source.html new file mode 100644 index 0000000..30a0afa --- /dev/null +++ b/doc/html/AlertDlg_8cpp-source.html @@ -0,0 +1,296 @@ + + +kshowmail: kshowmail/AlertDlg.cpp Source File + + + + + + +

AlertDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file './AlertDlg.ui'
+00005 **
+00006 ** Created: Fr Jun 29 22:08:57 2007
+00007 **      by: The User Interface Compiler ($Id: AlertDlg_8cpp-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "AlertDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qlabel.h>
+00017 #include <qlayout.h>
+00018 #include <qtooltip.h>
+00019 #include <qwhatsthis.h>
+00020 #include <qimage.h>
+00021 #include <qpixmap.h>
+00022 
+00023 static const char* const img0_AlertDlg[] = { 
+00024 "48 48 114 2",
+00025 "Qt c None",
+00026 ".D c #000000",
+00027 ".2 c #101c18",
+00028 "#e c #101c20",
+00029 ".U c #102020",
+00030 ".Z c #103820",
+00031 "#c c #181c20",
+00032 "#d c #201810",
+00033 "#b c #201c20",
+00034 ".6 c #202020",
+00035 "#S c #202810",
+00036 "#C c #204841",
+00037 ".M c #313000",
+00038 "#K c #313029",
+00039 ".J c #313031",
+00040 "#T c #313839",
+00041 "#M c #313841",
+00042 "#p c #413041",
+00043 "#J c #414000",
+00044 ".O c #414841",
+00045 ".1 c #4a3808",
+00046 ".N c #524c52",
+00047 ".r c #525052",
+00048 ".R c #525952",
+00049 "#y c #527973",
+00050 "#q c #52814a",
+00051 "#B c #528152",
+00052 "#L c #5a6152",
+00053 "#z c #622429",
+00054 ".7 c #624852",
+00055 "#I c #626152",
+00056 "#V c #626162",
+00057 ".E c #626973",
+00058 "#x c #6a3000",
+00059 ".t c #733062",
+00060 ".v c #734052",
+00061 "#o c #736973",
+00062 "#n c #737562",
+00063 ".s c #737583",
+00064 "#U c #737983",
+00065 "#A c #835d6a",
+00066 ".S c #836131",
+00067 ".T c #946931",
+00068 "#D c #9491a4",
+00069 "#l c #94aab4",
+00070 "#v c #9caea4",
+00071 ".K c #a44052",
+00072 "#w c #a49994",
+00073 "#j c #a4aac5",
+00074 "#k c #a4b2a4",
+00075 "#i c #a4c2a4",
+00076 "#E c #a4e2b4",
+00077 ".L c #b44831",
+00078 ".5 c #b47952",
+00079 "#G c #bd8983",
+00080 ".o c #bde2c5",
+00081 ".0 c #c57973",
+00082 ".u c #c5c2d5",
+00083 ".p c #c5cac5",
+00084 ".q c #c5d2f6",
+00085 ".C c #c5e2c5",
+00086 ".8 c #d58173",
+00087 "#H c #d5ae9c",
+00088 "#t c #d5c6bd",
+00089 ".l c #d5d2d5",
+00090 ".i c #d5ded5",
+00091 ".k c #d5e2d5",
+00092 ".h c #d5eede",
+00093 ".F c #d5eee6",
+00094 ".w c #d5f2e6",
+00095 "#r c #de6d6a",
+00096 "#F c #de958b",
+00097 "#O c #dea5a4",
+00098 ".3 c #deaea4",
+00099 "#. c #deb2a4",
+00100 ".Y c #deba62",
+00101 "#u c #debab4",
+00102 "#g c #decabd",
+00103 ".m c #dedabd",
+00104 ".e c #dee2e6",
+00105 "#s c #e61818",
+00106 ".P c #e67d73",
+00107 "#Q c #e6898b",
+00108 "#a c #e68d8b",
+00109 ".Q c #e69141",
+00110 ".W c #e6958b",
+00111 "#f c #e69594",
+00112 ".n c #e6dac5",
+00113 ".j c #e6e2d5",
+00114 ".c c #e6e2e6",
+00115 ".f c #e6f2cd",
+00116 ".g c #e6f2d5",
+00117 ".d c #e6fae6",
+00118 ".# c #e6fff6",
+00119 "#N c #ee655a",
+00120 ".B c #ee6962",
+00121 ".x c #ee7d7b",
+00122 "#P c #eeba9c",
+00123 "#R c #f61810",
+00124 ".y c #f63431",
+00125 ".4 c #f64441",
+00126 ".V c #f64841",
+00127 ".X c #f64c4a",
+00128 "#m c #f6504a",
+00129 ".9 c #f66562",
+00130 ".H c #f67d73",
+00131 ".b c #f6f2f6",
+00132 ".a c #f6fff6",
+00133 ".z c #ff0000",
+00134 ".I c #ff1810",
+00135 "#h c #ff1818",
+00136 ".A c #ff1c18",
+00137 "## c #ff3031",
+00138 ".G c #ff4c4a",
+00139 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00140 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00141 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00142 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00143 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00144 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00145 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00146 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00147 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00148 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00149 "Qt.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.a.#.aQtQtQtQtQt",
+00150 "Qt.b.c.d.e.d.c.c.e.c.c.c.f.c.g.c.h.c.i.c.i.j.i.k.i.j.i.k.i.l.i.l.m.l.n.l.o.l.p.l.p.q.#.r.sQtQtQt",
+00151 "Qt.#.b.t.t.u.t.u.t.v.c.c.c.c.c.w.c.w.c.w.x.y.z.z.A.B.k.k.k.k.k.l.k.l.k.l.C.l.p.l.q.C.#.D.r.EQtQt",
+00152 "Qt.a.e.d.c.c.e.c.c.c.f.c.g.c.h.c.F.c.h.G.z.z.i.H.z.z.I.k.i.k.m.l.n.l.o.C.J.K.L.K.M.q.#.D.N.OQtQt",
+00153 "Qt.#.b.t.t.t.c.t.c.t.t.c.c.w.c.w.c.w.x.z.z.z.k.w.z.z.z.P.k.l.k.l.k.C.l.l.Q.n.R.S.T.p.#.D.U.OQtQt",
+00154 "Qt.b.c.c.e.c.c.c.f.c.g.c.h.c.F.c.h.j.V.z.z.z.W.k.z.z.z.X.m.l.n.l.o.l.C.C.Y.Z.v.0.1.q.#.D.2.OQtQt",
+00155 "Qt.#.c.t.t.v.c.t.c.v.t.t.t.w.c.w.k.w.x.z.z.z.k.3.z.z.z.4.k.l.k.C.l.C.l.l.5.6.Z.7.8.C.#.D.U.OQtQt",
+00156 "Qt.a.e.d.c.c.f.c.g.c.f.c.g.c.h.j.i.j.i.9.V#..i##.z.z.z#a.n.l.m.l.n.l.o.C#b.Z#c.Z#d.p.#.D#e.OQtQt",
+00157 "Qt.#.b.c.c.c.c.c.c.c.c.c.c.w.c.w.c.w.k.w.k.k#f.z.z.z.A.k.k.l.l.l.l.C.p.C.l.C.p.C.p.p.#.D.U.OQtQt",
+00158 "Qt.b.c.c.e.c.c.c.f.c.g.c.h.c.i.c.i.j.i.k.i#g#h.z.z.z.3.l.m.l.n.l.o.l.p.l.p.q.p.p.p.l.#.D.2.OQtQt",
+00159 "Qt.#.c.c.c.c.c.c.c.c.c#i#j.w.c#k.k#k.k#l.k#m.z.z.A.W.k.l.k.l.k.C.l.C.p.C.p.C.p.p.p.k.#.D.U.OQtQt",
+00160 "Qt.a.e.c.c.c.f.c.g.c.h.D#n#o.o.q#n#p#q.D#r.z.z#s#t.k.m.l.n.l.o.l.C.l.o.q.p.q.p.q.p.k.#.D#e.OQtQt",
+00161 "Qt.#.c.c.c.c.c.c.c.w.k.w.k.w.k.w.k.w.k#u.z.z.x.k.k.l.k.l.k.C.l.C.l.C.p.C.p.p.p.p.p.k.#.D.U.OQtQt",
+00162 "Qt.b.c.c.f.c.g.c.h.c.F#o#q.j.i#p#v#w.J##.I#x.i#w.m.l.n#p.o.l.C.l.o.q.p.p.p.q.p.p.p.l.#.D.2.OQtQt",
+00163 "Qt.#.c.c.c.c.c.w.c.w.c#y.p#y#p#l.D.C#z.z#A.D.k#B#w.D.k#C#D.C.l.C.p.C.p.C.p.C.p#E.p.k.#.D.U.OQtQt",
+00164 "Qt.a.f.c.g.c.h.c.F.c.i.j.i.j.i.j.i.j#F.G.i.j.i.j.i.j.i.j.C.l.o.q.p.q.p.q.p.p.p.p.C.k.#.D#e.OQtQt",
+00165 "Qt.#.c.c.c.w.c.w.c.w.k#y.l.D#k.C#p.C#G#H#o#l.k.l#o.w.E.l#o.J.p#B.l.J.p.C.p.p.p.p.l.k.#.D.U.OQtQt",
+00166 "Qt.b.g.c.h.c.F.c.h.j.i#o#q.q#B#k#q#o.J#o.o.D#I.l#q#J#I.l#K#J#I#I#L#J.p.p.p.u.p.p.o.l.#.D.2#MQtQt",
+00167 "Qt.#.c.w.c.w.c.w.k.w.k.w.k.w.k.k.k#N.z.z.9.l.k.C.l.C.l.C.p.C.p.C.p.C.p.p.p.p.p#E.p.k.#.D.U#MQtQt",
+00168 "Qt.a.f.c.g.c.h.j.i.j.i.j.i.k.i.k.3.z.z.z.z#O.m.l.n.l.o.q.p.q.p.q.p.p.p.p.p.p#P.u.C.k.#.D#e#MQtQt",
+00169 "Qt.#.c.c.c.w.c.w.c.w.k.w.k.k.k.k#f.z.z.z.z#Q.l.l.l.C.l.C.l.C.p.C.p.p.p.p.p#E.p#E.l.k.#.D.U#MQtQt",
+00170 "Qt.b.g.c.h.c.i.c.i.j.i.k.i.k.i.k.i#h.z.z#R.l.n.l.o.l.p.l.p.q.p.p.p.p.p.l.o.l.p.l.o.l.#.D.2#MQtQt",
+00171 "Qt.#.c.w.c.w.c.w.k.w.k.k.k.w.k.l.k.k#f#Q.k.k.k.l.k.k.k.l.k.k.k.l.k.k.k.l.k.k.k.l.k.k.#.D.U#MQtQt",
+00172 "Qt.a.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.D#e#MQtQt",
+00173 "QtQt.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.U#MQtQt",
+00174 "QtQt.s.r#S#S#S#S#S#S#S#S#S#S#S.U.2.U#e.U.2.U#e.U.2.U#e.U.2.U#e.U.2.U#e.U.2.U#e.U.2.U#e.U#T#MQtQt",
+00175 "QtQtQt#U#U.r.r.r.r.r.r.r.r.r.r.r.r.r.r.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O#M#M#M#M#M#M#M#M#M#M#M#VQtQt",
+00176 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00177 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00178 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00179 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00180 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00181 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00182 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00183 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00184 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00185 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+00186 "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};
+00187 
+00188 
+00189 /*
+00190  *  Constructs a AlertDlg as a child of 'parent', with the
+00191  *  name 'name' and widget flags set to 'f'.
+00192  *
+00193  *  The dialog will by default be modeless, unless you set 'modal' to
+00194  *  TRUE to construct a modal dialog.
+00195  */
+00196 AlertDlg::AlertDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00197     : QDialog( parent, name, modal, fl ),
+00198       image0( (const char **) img0_AlertDlg )
+00199 {
+00200     if ( !name )
+00201        setName( "AlertDlg" );
+00202     AlertDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "AlertDlgLayout"); 
+00203 
+00204     m_ButtonIgnore = new QPushButton( this, "m_ButtonIgnore" );
+00205 
+00206     AlertDlgLayout->addWidget( m_ButtonIgnore, 2, 2 );
+00207 
+00208     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00209 
+00210     AlertDlgLayout->addMultiCellWidget( m_ButtonOk, 2, 2, 0, 1 );
+00211 
+00212     PixmapLabel2 = new QLabel( this, "PixmapLabel2" );
+00213     PixmapLabel2->setPixmap( image0 );
+00214     PixmapLabel2->setScaledContents( TRUE );
+00215 
+00216     AlertDlgLayout->addMultiCellWidget( PixmapLabel2, 0, 1, 0, 0 );
+00217 
+00218     QLabel_1 = new QLabel( this, "QLabel_1" );
+00219     QFont QLabel_1_font(  QLabel_1->font() );
+00220     QLabel_1_font.setPointSize( 14 );
+00221     QLabel_1_font.setBold( TRUE );
+00222     QLabel_1_font.setItalic( TRUE );
+00223     QLabel_1->setFont( QLabel_1_font ); 
+00224 
+00225     AlertDlgLayout->addMultiCellWidget( QLabel_1, 0, 0, 1, 2 );
+00226 
+00227     QLabel_2 = new QLabel( this, "QLabel_2" );
+00228     QFont QLabel_2_font(  QLabel_2->font() );
+00229     QLabel_2_font.setPointSize( 14 );
+00230     QLabel_2_font.setBold( TRUE );
+00231     QLabel_2_font.setItalic( TRUE );
+00232     QLabel_2->setFont( QLabel_2_font ); 
+00233 
+00234     AlertDlgLayout->addMultiCellWidget( QLabel_2, 1, 1, 1, 2 );
+00235     languageChange();
+00236     resize( QSize(271, 127).expandedTo(minimumSizeHint()) );
+00237     clearWState( WState_Polished );
+00238 
+00239     // signals and slots connections
+00240     connect( m_ButtonIgnore, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00241     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+00242     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotOk() ) );
+00243 
+00244     // tab order
+00245     setTabOrder( m_ButtonOk, m_ButtonIgnore );
+00246 }
+00247 
+00248 /*
+00249  *  Destroys the object and frees any allocated resources
+00250  */
+00251 AlertDlg::~AlertDlg()
+00252 {
+00253     // no need to delete child widgets, Qt does it all for us
+00254 }
+00255 
+00256 /*
+00257  *  Sets the strings of the subwidgets using the current
+00258  *  language.
+00259  */
+00260 void AlertDlg::languageChange()
+00261 {
+00262     setCaption( tr2i18n( "KShowmail" ) );
+00263     m_ButtonIgnore->setText( tr2i18n( "Ignore" ) );
+00264     m_ButtonOk->setText( tr2i18n( "Show main window" ) );
+00265     QLabel_1->setText( tr2i18n( "New mail" ) );
+00266     QLabel_2->setText( tr2i18n( "has arrived !" ) );
+00267 }
+00268 
+00269 void AlertDlg::slotOk()
+00270 {
+00271     qWarning( "AlertDlg::slotOk(): Not implemented yet" );
+00272 }
+00273 
+00274 #include "AlertDlg.moc"
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/AlertDlg_8h-source.html b/doc/html/AlertDlg_8h-source.html new file mode 100644 index 0000000..37b166d --- /dev/null +++ b/doc/html/AlertDlg_8h-source.html @@ -0,0 +1,79 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/AlertDlg.h Source File + + + + + + + +

AlertDlg.h

Go to the documentation of this file.
00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file './AlertDlg.ui'
+00003 **
+00004 ** Created: Di Apr 1 21:55:26 2008
+00005 **      by: The User Interface Compiler ($Id: AlertDlg_8h-source.html,v 1.13 2009/02/24 20:22:47 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef ALERTDLG_H
+00011 #define ALERTDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qpixmap.h>
+00015 #include <qdialog.h>
+00016 
+00017 class QVBoxLayout;
+00018 class QHBoxLayout;
+00019 class QGridLayout;
+00020 class QSpacerItem;
+00021 class QPushButton;
+00022 class QLabel;
+00023 
+00024 class AlertDlg : public QDialog
+00025 {
+00026     Q_OBJECT
+00027 
+00028 public:
+00029     AlertDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00030     ~AlertDlg();
+00031 
+00032     QPushButton* m_ButtonIgnore;
+00033     QPushButton* m_ButtonOk;
+00034     QLabel* PixmapLabel2;
+00035     QLabel* QLabel_1;
+00036     QLabel* QLabel_2;
+00037 
+00038 public slots:
+00039     virtual void slotOk();
+00040 
+00041 protected:
+00042     QGridLayout* AlertDlgLayout;
+00043 
+00044 protected slots:
+00045     virtual void languageChange();
+00046 
+00047 private:
+00048     QPixmap image0;
+00049 
+00050 };
+00051 
+00052 #endif // ALERTDLG_H
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/AlertDlg_8moc-source.html b/doc/html/AlertDlg_8moc-source.html new file mode 100644 index 0000000..9f63528 --- /dev/null +++ b/doc/html/AlertDlg_8moc-source.html @@ -0,0 +1,126 @@ + + +kshowmail: kshowmail/AlertDlg.moc Source File + + + + + + +

AlertDlg.moc

00001 /****************************************************************************
+00002 ** AlertDlg meta object code from reading C++ file 'AlertDlg.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:08:57 2007
+00005 **      by: The Qt MOC ($Id: AlertDlg_8moc-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "AlertDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *AlertDlg::className() const
+00023 {
+00024     return "AlertDlg";
+00025 }
+00026 
+00027 QMetaObject *AlertDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_AlertDlg( "AlertDlg", &AlertDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString AlertDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "AlertDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString AlertDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "AlertDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* AlertDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotOk", 0, 0 };
+00056     static const QUMethod slot_1 = {"languageChange", 0, 0 };
+00057     static const QMetaData slot_tbl[] = {
+00058        { "slotOk()", &slot_0, QMetaData::Public },
+00059        { "languageChange()", &slot_1, QMetaData::Protected }
+00060     };
+00061     metaObj = QMetaObject::new_metaobject(
+00062        "AlertDlg", parentObject,
+00063        slot_tbl, 2,
+00064        0, 0,
+00065 #ifndef QT_NO_PROPERTIES
+00066        0, 0,
+00067        0, 0,
+00068 #endif // QT_NO_PROPERTIES
+00069        0, 0 );
+00070     cleanUp_AlertDlg.setMetaObject( metaObj );
+00071     return metaObj;
+00072 }
+00073 
+00074 void* AlertDlg::qt_cast( const char* clname )
+00075 {
+00076     if ( !qstrcmp( clname, "AlertDlg" ) )
+00077        return this;
+00078     return QDialog::qt_cast( clname );
+00079 }
+00080 
+00081 bool AlertDlg::qt_invoke( int _id, QUObject* _o )
+00082 {
+00083     switch ( _id - staticMetaObject()->slotOffset() ) {
+00084     case 0: slotOk(); break;
+00085     case 1: languageChange(); break;
+00086     default:
+00087        return QDialog::qt_invoke( _id, _o );
+00088     }
+00089     return TRUE;
+00090 }
+00091 
+00092 bool AlertDlg::qt_emit( int _id, QUObject* _o )
+00093 {
+00094     return QDialog::qt_emit(_id,_o);
+00095 }
+00096 #ifndef QT_NO_PROPERTIES
+00097 
+00098 bool AlertDlg::qt_property( int id, int f, QVariant* v)
+00099 {
+00100     return QDialog::qt_property( id, f, v);
+00101 }
+00102 
+00103 bool AlertDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00104 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandDlg_8cpp-source.html b/doc/html/CommandDlg_8cpp-source.html new file mode 100644 index 0000000..d1c77e0 --- /dev/null +++ b/doc/html/CommandDlg_8cpp-source.html @@ -0,0 +1,186 @@ + + +kshowmail: kshowmail/CommandDlg.cpp Source File + + + + + + +

CommandDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/CommandDlg.ui'
+00005 **
+00006 ** Created: Di Mai 15 19:57:53 2007
+00007 **      by: The User Interface Compiler ($Id: CommandDlg_8cpp-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "CommandDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qgroupbox.h>
+00017 #include <qcombobox.h>
+00018 #include <qlayout.h>
+00019 #include <qtooltip.h>
+00020 #include <qwhatsthis.h>
+00021 
+00022 /*
+00023  *  Constructs a CommandDlg as a child of 'parent', with the
+00024  *  name 'name' and widget flags set to 'f'.
+00025  *
+00026  *  The dialog will by default be modeless, unless you set 'modal' to
+00027  *  TRUE to construct a modal dialog.
+00028  */
+00029 CommandDlg::CommandDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00030     : QDialog( parent, name, modal, fl )
+00031 {
+00032     if ( !name )
+00033        setName( "CommandDlg" );
+00034     setSizeGripEnabled( FALSE );
+00035     CommandDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "CommandDlgLayout"); 
+00036 
+00037     Layout6 = new QHBoxLayout( 0, 0, 6, "Layout6"); 
+00038     Spacer11 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00039     Layout6->addItem( Spacer11 );
+00040 
+00041     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00042     Layout6->addWidget( m_ButtonOk );
+00043 
+00044     m_ButtonCancel = new QPushButton( this, "m_ButtonCancel" );
+00045     Layout6->addWidget( m_ButtonCancel );
+00046 
+00047     CommandDlgLayout->addLayout( Layout6, 1, 0 );
+00048 
+00049     QGroupBox_1 = new QGroupBox( this, "QGroupBox_1" );
+00050     QGroupBox_1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, QGroupBox_1->sizePolicy().hasHeightForWidth() ) );
+00051     QGroupBox_1->setColumnLayout(0, Qt::Vertical );
+00052     QGroupBox_1->layout()->setSpacing( 6 );
+00053     QGroupBox_1->layout()->setMargin( 11 );
+00054     QGroupBox_1Layout = new QGridLayout( QGroupBox_1->layout() );
+00055     QGroupBox_1Layout->setAlignment( Qt::AlignTop );
+00056 
+00057     m_ButtonAdd = new QPushButton( QGroupBox_1, "m_ButtonAdd" );
+00058     m_ButtonAdd->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_ButtonAdd->sizePolicy().hasHeightForWidth() ) );
+00059 
+00060     QGroupBox_1Layout->addWidget( m_ButtonAdd, 1, 0 );
+00061 
+00062     m_ButtonEdit = new QPushButton( QGroupBox_1, "m_ButtonEdit" );
+00063     m_ButtonEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_ButtonEdit->sizePolicy().hasHeightForWidth() ) );
+00064 
+00065     QGroupBox_1Layout->addWidget( m_ButtonEdit, 1, 1 );
+00066 
+00067     m_ButtonCopy = new QPushButton( QGroupBox_1, "m_ButtonCopy" );
+00068     m_ButtonCopy->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_ButtonCopy->sizePolicy().hasHeightForWidth() ) );
+00069 
+00070     QGroupBox_1Layout->addWidget( m_ButtonCopy, 1, 2 );
+00071 
+00072     m_ButtonDelete = new QPushButton( QGroupBox_1, "m_ButtonDelete" );
+00073     m_ButtonDelete->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_ButtonDelete->sizePolicy().hasHeightForWidth() ) );
+00074 
+00075     QGroupBox_1Layout->addWidget( m_ButtonDelete, 1, 3 );
+00076 
+00077     m_ComboCommand = new QComboBox( FALSE, QGroupBox_1, "m_ComboCommand" );
+00078     m_ComboCommand->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, m_ComboCommand->sizePolicy().hasHeightForWidth() ) );
+00079     m_ComboCommand->setInsertionPolicy( QComboBox::AtTop );
+00080 
+00081     QGroupBox_1Layout->addMultiCellWidget( m_ComboCommand, 0, 0, 0, 3 );
+00082 
+00083     CommandDlgLayout->addWidget( QGroupBox_1, 0, 0 );
+00084     languageChange();
+00085     resize( QSize(378, 146).expandedTo(minimumSizeHint()) );
+00086     clearWState( WState_Polished );
+00087 
+00088     // signals and slots connections
+00089     connect( m_ButtonAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) );
+00090     connect( m_ButtonEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) );
+00091     connect( m_ButtonCopy, SIGNAL( clicked() ), this, SLOT( slotCopy() ) );
+00092     connect( m_ButtonDelete, SIGNAL( clicked() ), this, SLOT( slotDelete() ) );
+00093     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotOk() ) );
+00094     connect( m_ButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00095     connect( m_ComboCommand, SIGNAL( activated(int) ), this, SLOT( slotCommandActivated(int) ) );
+00096 
+00097     // tab order
+00098     setTabOrder( m_ComboCommand, m_ButtonAdd );
+00099     setTabOrder( m_ButtonAdd, m_ButtonEdit );
+00100     setTabOrder( m_ButtonEdit, m_ButtonCopy );
+00101     setTabOrder( m_ButtonCopy, m_ButtonDelete );
+00102     setTabOrder( m_ButtonDelete, m_ButtonOk );
+00103     setTabOrder( m_ButtonOk, m_ButtonCancel );
+00104 }
+00105 
+00106 /*
+00107  *  Destroys the object and frees any allocated resources
+00108  */
+00109 CommandDlg::~CommandDlg()
+00110 {
+00111     // no need to delete child widgets, Qt does it all for us
+00112 }
+00113 
+00114 /*
+00115  *  Sets the strings of the subwidgets using the current
+00116  *  language.
+00117  */
+00118 void CommandDlg::languageChange()
+00119 {
+00120     setCaption( tr2i18n( "Command" ) );
+00121     m_ButtonOk->setText( tr2i18n( "OK" ) );
+00122     m_ButtonCancel->setText( tr2i18n( "Cancel" ) );
+00123     QGroupBox_1->setTitle( tr2i18n( "User commands" ) );
+00124     m_ButtonAdd->setText( tr2i18n( "Add" ) );
+00125     QToolTip::add( m_ButtonAdd, tr2i18n( "Add user command" ) );
+00126     m_ButtonEdit->setText( tr2i18n( "Edit" ) );
+00127     QToolTip::add( m_ButtonEdit, tr2i18n( "Edit user command" ) );
+00128     m_ButtonCopy->setText( tr2i18n( "Copy" ) );
+00129     QToolTip::add( m_ButtonCopy, tr2i18n( "Copy user command" ) );
+00130     m_ButtonDelete->setText( tr2i18n( "Delete" ) );
+00131     QToolTip::add( m_ButtonDelete, tr2i18n( "Delete user command" ) );
+00132 }
+00133 
+00134 void CommandDlg::slotCommandActivated(int)
+00135 {
+00136     qWarning( "CommandDlg::slotCommandActivated(int): Not implemented yet" );
+00137 }
+00138 
+00139 void CommandDlg::slotAdd()
+00140 {
+00141     qWarning( "CommandDlg::slotAdd(): Not implemented yet" );
+00142 }
+00143 
+00144 void CommandDlg::slotCopy()
+00145 {
+00146     qWarning( "CommandDlg::slotCopy(): Not implemented yet" );
+00147 }
+00148 
+00149 void CommandDlg::slotDelete()
+00150 {
+00151     qWarning( "CommandDlg::slotDelete(): Not implemented yet" );
+00152 }
+00153 
+00154 void CommandDlg::slotEdit()
+00155 {
+00156     qWarning( "CommandDlg::slotEdit(): Not implemented yet" );
+00157 }
+00158 
+00159 void CommandDlg::slotOk()
+00160 {
+00161     qWarning( "CommandDlg::slotOk(): Not implemented yet" );
+00162 }
+00163 
+00164 #include "CommandDlg.moc"
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandDlg_8h-source.html b/doc/html/CommandDlg_8h-source.html new file mode 100644 index 0000000..5360a53 --- /dev/null +++ b/doc/html/CommandDlg_8h-source.html @@ -0,0 +1,82 @@ + + +kshowmail: kshowmail/CommandDlg.h Source File + + + + + + +

CommandDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/CommandDlg.ui'
+00003 **
+00004 ** Created: Di Mai 15 19:57:52 2007
+00005 **      by: The User Interface Compiler ($Id: CommandDlg_8h-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef COMMANDDLG_H
+00011 #define COMMANDDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class QPushButton;
+00021 class QGroupBox;
+00022 class QComboBox;
+00023 
+00024 class CommandDlg : public QDialog
+00025 {
+00026     Q_OBJECT
+00027 
+00028 public:
+00029     CommandDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00030     ~CommandDlg();
+00031 
+00032     QPushButton* m_ButtonOk;
+00033     QPushButton* m_ButtonCancel;
+00034     QGroupBox* QGroupBox_1;
+00035     QPushButton* m_ButtonAdd;
+00036     QPushButton* m_ButtonEdit;
+00037     QPushButton* m_ButtonCopy;
+00038     QPushButton* m_ButtonDelete;
+00039     QComboBox* m_ComboCommand;
+00040 
+00041 public slots:
+00042     virtual void slotCommandActivated(int);
+00043     virtual void slotAdd();
+00044     virtual void slotCopy();
+00045     virtual void slotDelete();
+00046     virtual void slotEdit();
+00047     virtual void slotOk();
+00048 
+00049 protected:
+00050     QGridLayout* CommandDlgLayout;
+00051     QHBoxLayout* Layout6;
+00052     QSpacerItem* Spacer11;
+00053     QGridLayout* QGroupBox_1Layout;
+00054 
+00055 protected slots:
+00056     virtual void languageChange();
+00057 
+00058 };
+00059 
+00060 #endif // COMMANDDLG_H
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandDlg_8moc-source.html b/doc/html/CommandDlg_8moc-source.html new file mode 100644 index 0000000..caed33d --- /dev/null +++ b/doc/html/CommandDlg_8moc-source.html @@ -0,0 +1,144 @@ + + +kshowmail: kshowmail/CommandDlg.moc Source File + + + + + + +

CommandDlg.moc

00001 /****************************************************************************
+00002 ** CommandDlg meta object code from reading C++ file 'CommandDlg.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: CommandDlg_8moc-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "CommandDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *CommandDlg::className() const
+00023 {
+00024     return "CommandDlg";
+00025 }
+00026 
+00027 QMetaObject *CommandDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_CommandDlg( "CommandDlg", &CommandDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString CommandDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "CommandDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString CommandDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "CommandDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* CommandDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUParameter param_slot_0[] = {
+00056        { 0, &static_QUType_int, 0, QUParameter::In }
+00057     };
+00058     static const QUMethod slot_0 = {"slotCommandActivated", 1, param_slot_0 };
+00059     static const QUMethod slot_1 = {"slotAdd", 0, 0 };
+00060     static const QUMethod slot_2 = {"slotCopy", 0, 0 };
+00061     static const QUMethod slot_3 = {"slotDelete", 0, 0 };
+00062     static const QUMethod slot_4 = {"slotEdit", 0, 0 };
+00063     static const QUMethod slot_5 = {"slotOk", 0, 0 };
+00064     static const QUMethod slot_6 = {"languageChange", 0, 0 };
+00065     static const QMetaData slot_tbl[] = {
+00066        { "slotCommandActivated(int)", &slot_0, QMetaData::Public },
+00067        { "slotAdd()", &slot_1, QMetaData::Public },
+00068        { "slotCopy()", &slot_2, QMetaData::Public },
+00069        { "slotDelete()", &slot_3, QMetaData::Public },
+00070        { "slotEdit()", &slot_4, QMetaData::Public },
+00071        { "slotOk()", &slot_5, QMetaData::Public },
+00072        { "languageChange()", &slot_6, QMetaData::Protected }
+00073     };
+00074     metaObj = QMetaObject::new_metaobject(
+00075        "CommandDlg", parentObject,
+00076        slot_tbl, 7,
+00077        0, 0,
+00078 #ifndef QT_NO_PROPERTIES
+00079        0, 0,
+00080        0, 0,
+00081 #endif // QT_NO_PROPERTIES
+00082        0, 0 );
+00083     cleanUp_CommandDlg.setMetaObject( metaObj );
+00084     return metaObj;
+00085 }
+00086 
+00087 void* CommandDlg::qt_cast( const char* clname )
+00088 {
+00089     if ( !qstrcmp( clname, "CommandDlg" ) )
+00090        return this;
+00091     return QDialog::qt_cast( clname );
+00092 }
+00093 
+00094 bool CommandDlg::qt_invoke( int _id, QUObject* _o )
+00095 {
+00096     switch ( _id - staticMetaObject()->slotOffset() ) {
+00097     case 0: slotCommandActivated((int)static_QUType_int.get(_o+1)); break;
+00098     case 1: slotAdd(); break;
+00099     case 2: slotCopy(); break;
+00100     case 3: slotDelete(); break;
+00101     case 4: slotEdit(); break;
+00102     case 5: slotOk(); break;
+00103     case 6: languageChange(); break;
+00104     default:
+00105        return QDialog::qt_invoke( _id, _o );
+00106     }
+00107     return TRUE;
+00108 }
+00109 
+00110 bool CommandDlg::qt_emit( int _id, QUObject* _o )
+00111 {
+00112     return QDialog::qt_emit(_id,_o);
+00113 }
+00114 #ifndef QT_NO_PROPERTIES
+00115 
+00116 bool CommandDlg::qt_property( int id, int f, QVariant* v)
+00117 {
+00118     return QDialog::qt_property( id, f, v);
+00119 }
+00120 
+00121 bool CommandDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00122 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandEntryDlg_8cpp-source.html b/doc/html/CommandEntryDlg_8cpp-source.html new file mode 100644 index 0000000..cb77c01 --- /dev/null +++ b/doc/html/CommandEntryDlg_8cpp-source.html @@ -0,0 +1,167 @@ + + +kshowmail: kshowmail/CommandEntryDlg.cpp Source File + + + + + + +

CommandEntryDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/CommandEntryDlg.ui'
+00005 **
+00006 ** Created: Di Mai 15 19:57:54 2007
+00007 **      by: The User Interface Compiler ($Id: CommandEntryDlg_8cpp-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "CommandEntryDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qgroupbox.h>
+00016 #include <qpushbutton.h>
+00017 #include <qcheckbox.h>
+00018 #include <qlineedit.h>
+00019 #include <qlayout.h>
+00020 #include <qtooltip.h>
+00021 #include <qwhatsthis.h>
+00022 
+00023 /*
+00024  *  Constructs a CommandEntryDlg as a child of 'parent', with the
+00025  *  name 'name' and widget flags set to 'f'.
+00026  *
+00027  *  The dialog will by default be modeless, unless you set 'modal' to
+00028  *  TRUE to construct a modal dialog.
+00029  */
+00030 CommandEntryDlg::CommandEntryDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00031     : QDialog( parent, name, modal, fl )
+00032 {
+00033     if ( !name )
+00034        setName( "CommandEntryDlg" );
+00035     setSizeGripEnabled( FALSE );
+00036     CommandEntryDlgLayout = new QVBoxLayout( this, 11, 6, "CommandEntryDlgLayout"); 
+00037 
+00038     QGroupBox_1 = new QGroupBox( this, "QGroupBox_1" );
+00039     QGroupBox_1->setFrameShape( QGroupBox::Box );
+00040     QGroupBox_1->setFrameShadow( QGroupBox::Sunken );
+00041     QGroupBox_1->setColumnLayout(0, Qt::Vertical );
+00042     QGroupBox_1->layout()->setSpacing( 6 );
+00043     QGroupBox_1->layout()->setMargin( 11 );
+00044     QGroupBox_1Layout = new QGridLayout( QGroupBox_1->layout() );
+00045     QGroupBox_1Layout->setAlignment( Qt::AlignTop );
+00046 
+00047     m_ButtonPath = new QPushButton( QGroupBox_1, "m_ButtonPath" );
+00048 
+00049     QGroupBox_1Layout->addWidget( m_ButtonPath, 1, 0 );
+00050 
+00051     m_ButtonTest = new QPushButton( QGroupBox_1, "m_ButtonTest" );
+00052 
+00053     QGroupBox_1Layout->addWidget( m_ButtonTest, 0, 2 );
+00054 
+00055     m_checkModal = new QCheckBox( QGroupBox_1, "m_checkModal" );
+00056 
+00057     QGroupBox_1Layout->addMultiCellWidget( m_checkModal, 2, 2, 1, 2 );
+00058 
+00059     m_EditName = new QLineEdit( QGroupBox_1, "m_EditName" );
+00060     m_EditName->setFocusPolicy( QLineEdit::StrongFocus );
+00061 
+00062     QGroupBox_1Layout->addWidget( m_EditName, 0, 1 );
+00063 
+00064     m_EditPath = new QLineEdit( QGroupBox_1, "m_EditPath" );
+00065     m_EditPath->setFocusPolicy( QLineEdit::StrongFocus );
+00066 
+00067     QGroupBox_1Layout->addMultiCellWidget( m_EditPath, 1, 1, 1, 2 );
+00068     spacer3 = new QSpacerItem( 90, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00069     QGroupBox_1Layout->addItem( spacer3, 2, 0 );
+00070     Spacer16 = new QSpacerItem( 150, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00071     QGroupBox_1Layout->addItem( Spacer16, 0, 0 );
+00072     CommandEntryDlgLayout->addWidget( QGroupBox_1 );
+00073 
+00074     layout2 = new QHBoxLayout( 0, 0, 6, "layout2"); 
+00075     Spacer17 = new QSpacerItem( 207, 16, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00076     layout2->addItem( Spacer17 );
+00077 
+00078     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00079     layout2->addWidget( m_ButtonOk );
+00080 
+00081     m_ButtonCancel = new QPushButton( this, "m_ButtonCancel" );
+00082     layout2->addWidget( m_ButtonCancel );
+00083     CommandEntryDlgLayout->addLayout( layout2 );
+00084     languageChange();
+00085     resize( QSize(387, 207).expandedTo(minimumSizeHint()) );
+00086     clearWState( WState_Polished );
+00087 
+00088     // signals and slots connections
+00089     connect( m_ButtonTest, SIGNAL( clicked() ), this, SLOT( slotTest() ) );
+00090     connect( m_ButtonPath, SIGNAL( clicked() ), this, SLOT( slotPath() ) );
+00091     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotOk() ) );
+00092     connect( m_ButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00093 
+00094     // tab order
+00095     setTabOrder( m_EditName, m_ButtonTest );
+00096     setTabOrder( m_ButtonTest, m_ButtonPath );
+00097     setTabOrder( m_ButtonPath, m_EditPath );
+00098     setTabOrder( m_EditPath, m_checkModal );
+00099     setTabOrder( m_checkModal, m_ButtonOk );
+00100     setTabOrder( m_ButtonOk, m_ButtonCancel );
+00101 }
+00102 
+00103 /*
+00104  *  Destroys the object and frees any allocated resources
+00105  */
+00106 CommandEntryDlg::~CommandEntryDlg()
+00107 {
+00108     // no need to delete child widgets, Qt does it all for us
+00109 }
+00110 
+00111 /*
+00112  *  Sets the strings of the subwidgets using the current
+00113  *  language.
+00114  */
+00115 void CommandEntryDlg::languageChange()
+00116 {
+00117     setCaption( tr2i18n( "User command" ) );
+00118     QGroupBox_1->setTitle( tr2i18n( "Menu Entry" ) );
+00119     m_ButtonPath->setText( tr2i18n( "Command:" ) );
+00120     QToolTip::add( m_ButtonPath, tr2i18n( "Press button to select command path" ) );
+00121     m_ButtonTest->setText( tr2i18n( "Test" ) );
+00122     QToolTip::add( m_ButtonTest, tr2i18n( "Execute the command immediatly" ) );
+00123     m_checkModal->setText( tr2i18n( "Wait for command to complete" ) );
+00124     QToolTip::add( m_EditName, tr2i18n( "Enter menu entry name" ) );
+00125     QToolTip::add( m_EditPath, tr2i18n( "<qt>Enter path to selected command and arguments<br>&lt;user&gt;, &lt;server&gt;, &lt;passwd&gt;, &lt;header&gt; and &lt;body&gt; may be used as arguments</qt>" ) );
+00126     m_ButtonOk->setText( tr2i18n( "OK" ) );
+00127     m_ButtonCancel->setText( tr2i18n( "Cancel" ) );
+00128 }
+00129 
+00130 void CommandEntryDlg::slotOk()
+00131 {
+00132     qWarning( "CommandEntryDlg::slotOk(): Not implemented yet" );
+00133 }
+00134 
+00135 void CommandEntryDlg::slotPath()
+00136 {
+00137     qWarning( "CommandEntryDlg::slotPath(): Not implemented yet" );
+00138 }
+00139 
+00140 void CommandEntryDlg::slotTest()
+00141 {
+00142     qWarning( "CommandEntryDlg::slotTest(): Not implemented yet" );
+00143 }
+00144 
+00145 #include "CommandEntryDlg.moc"
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandEntryDlg_8h-source.html b/doc/html/CommandEntryDlg_8h-source.html new file mode 100644 index 0000000..8c24852 --- /dev/null +++ b/doc/html/CommandEntryDlg_8h-source.html @@ -0,0 +1,82 @@ + + +kshowmail: kshowmail/CommandEntryDlg.h Source File + + + + + + +

CommandEntryDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/CommandEntryDlg.ui'
+00003 **
+00004 ** Created: Di Mai 15 19:57:53 2007
+00005 **      by: The User Interface Compiler ($Id: CommandEntryDlg_8h-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef COMMANDENTRYDLG_H
+00011 #define COMMANDENTRYDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class QGroupBox;
+00021 class QPushButton;
+00022 class QCheckBox;
+00023 class QLineEdit;
+00024 
+00025 class CommandEntryDlg : public QDialog
+00026 {
+00027     Q_OBJECT
+00028 
+00029 public:
+00030     CommandEntryDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00031     ~CommandEntryDlg();
+00032 
+00033     QGroupBox* QGroupBox_1;
+00034     QPushButton* m_ButtonPath;
+00035     QPushButton* m_ButtonTest;
+00036     QCheckBox* m_checkModal;
+00037     QLineEdit* m_EditName;
+00038     QLineEdit* m_EditPath;
+00039     QPushButton* m_ButtonOk;
+00040     QPushButton* m_ButtonCancel;
+00041 
+00042 public slots:
+00043     virtual void slotOk();
+00044     virtual void slotPath();
+00045     virtual void slotTest();
+00046 
+00047 protected:
+00048     QVBoxLayout* CommandEntryDlgLayout;
+00049     QGridLayout* QGroupBox_1Layout;
+00050     QSpacerItem* spacer3;
+00051     QSpacerItem* Spacer16;
+00052     QHBoxLayout* layout2;
+00053     QSpacerItem* Spacer17;
+00054 
+00055 protected slots:
+00056     virtual void languageChange();
+00057 
+00058 };
+00059 
+00060 #endif // COMMANDENTRYDLG_H
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/CommandEntryDlg_8moc-source.html b/doc/html/CommandEntryDlg_8moc-source.html new file mode 100644 index 0000000..848ed78 --- /dev/null +++ b/doc/html/CommandEntryDlg_8moc-source.html @@ -0,0 +1,132 @@ + + +kshowmail: kshowmail/CommandEntryDlg.moc Source File + + + + + + +

CommandEntryDlg.moc

00001 /****************************************************************************
+00002 ** CommandEntryDlg meta object code from reading C++ file 'CommandEntryDlg.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:54 2007
+00005 **      by: The Qt MOC ($Id: CommandEntryDlg_8moc-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "CommandEntryDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *CommandEntryDlg::className() const
+00023 {
+00024     return "CommandEntryDlg";
+00025 }
+00026 
+00027 QMetaObject *CommandEntryDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_CommandEntryDlg( "CommandEntryDlg", &CommandEntryDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString CommandEntryDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "CommandEntryDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString CommandEntryDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "CommandEntryDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* CommandEntryDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotOk", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotPath", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotTest", 0, 0 };
+00058     static const QUMethod slot_3 = {"languageChange", 0, 0 };
+00059     static const QMetaData slot_tbl[] = {
+00060        { "slotOk()", &slot_0, QMetaData::Public },
+00061        { "slotPath()", &slot_1, QMetaData::Public },
+00062        { "slotTest()", &slot_2, QMetaData::Public },
+00063        { "languageChange()", &slot_3, QMetaData::Protected }
+00064     };
+00065     metaObj = QMetaObject::new_metaobject(
+00066        "CommandEntryDlg", parentObject,
+00067        slot_tbl, 4,
+00068        0, 0,
+00069 #ifndef QT_NO_PROPERTIES
+00070        0, 0,
+00071        0, 0,
+00072 #endif // QT_NO_PROPERTIES
+00073        0, 0 );
+00074     cleanUp_CommandEntryDlg.setMetaObject( metaObj );
+00075     return metaObj;
+00076 }
+00077 
+00078 void* CommandEntryDlg::qt_cast( const char* clname )
+00079 {
+00080     if ( !qstrcmp( clname, "CommandEntryDlg" ) )
+00081        return this;
+00082     return QDialog::qt_cast( clname );
+00083 }
+00084 
+00085 bool CommandEntryDlg::qt_invoke( int _id, QUObject* _o )
+00086 {
+00087     switch ( _id - staticMetaObject()->slotOffset() ) {
+00088     case 0: slotOk(); break;
+00089     case 1: slotPath(); break;
+00090     case 2: slotTest(); break;
+00091     case 3: languageChange(); break;
+00092     default:
+00093        return QDialog::qt_invoke( _id, _o );
+00094     }
+00095     return TRUE;
+00096 }
+00097 
+00098 bool CommandEntryDlg::qt_emit( int _id, QUObject* _o )
+00099 {
+00100     return QDialog::qt_emit(_id,_o);
+00101 }
+00102 #ifndef QT_NO_PROPERTIES
+00103 
+00104 bool CommandEntryDlg::qt_property( int id, int f, QVariant* v)
+00105 {
+00106     return QDialog::qt_property( id, f, v);
+00107 }
+00108 
+00109 bool CommandEntryDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00110 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/EditDlg_8cpp-source.html b/doc/html/EditDlg_8cpp-source.html new file mode 100644 index 0000000..4a36681 --- /dev/null +++ b/doc/html/EditDlg_8cpp-source.html @@ -0,0 +1,119 @@ + + +kshowmail: kshowmail/EditDlg.cpp Source File + + + + + + +

EditDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/EditDlg.ui'
+00005 **
+00006 ** Created: Di Mai 15 19:57:53 2007
+00007 **      by: The User Interface Compiler ($Id: EditDlg_8cpp-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "EditDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <ktextbrowser.h>
+00016 #include <qpushbutton.h>
+00017 #include <qlayout.h>
+00018 #include <qtooltip.h>
+00019 #include <qwhatsthis.h>
+00020 
+00021 /*
+00022  *  Constructs a EditDlg as a child of 'parent', with the
+00023  *  name 'name' and widget flags set to 'f'.
+00024  *
+00025  *  The dialog will by default be modeless, unless you set 'modal' to
+00026  *  TRUE to construct a modal dialog.
+00027  */
+00028 EditDlg::EditDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00029     : QDialog( parent, name, modal, fl )
+00030 {
+00031     if ( !name )
+00032        setName( "EditDlg" );
+00033     EditDlgLayout = new QVBoxLayout( this, 11, 6, "EditDlgLayout"); 
+00034 
+00035     headerlayout = new QGridLayout( 0, 1, 1, 0, 6, "headerlayout"); 
+00036     EditDlgLayout->addLayout( headerlayout );
+00037 
+00038     m_Edit = new KTextBrowser( this, "m_Edit" );
+00039     m_Edit->setFocusPolicy( KTextBrowser::TabFocus );
+00040     m_Edit->setTextFormat( KTextBrowser::AutoText );
+00041     m_Edit->setReadOnly( TRUE );
+00042     m_Edit->setUndoRedoEnabled( FALSE );
+00043     EditDlgLayout->addWidget( m_Edit );
+00044 
+00045     layout3 = new QHBoxLayout( 0, 0, 6, "layout3"); 
+00046 
+00047     _buttonReply = new QPushButton( this, "_buttonReply" );
+00048     layout3->addWidget( _buttonReply );
+00049     Spacer15 = new QSpacerItem( 120, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00050     layout3->addItem( Spacer15 );
+00051 
+00052     _buttonOk = new QPushButton( this, "_buttonOk" );
+00053     layout3->addWidget( _buttonOk );
+00054 
+00055     _buttonCancel = new QPushButton( this, "_buttonCancel" );
+00056     layout3->addWidget( _buttonCancel );
+00057     EditDlgLayout->addLayout( layout3 );
+00058     languageChange();
+00059     resize( QSize(444, 447).expandedTo(minimumSizeHint()) );
+00060     clearWState( WState_Polished );
+00061 
+00062     // signals and slots connections
+00063     connect( _buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+00064     connect( _buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00065     connect( _buttonReply, SIGNAL( clicked() ), this, SLOT( slotReplyClicked() ) );
+00066 
+00067     // tab order
+00068     setTabOrder( _buttonOk, m_Edit );
+00069 }
+00070 
+00071 /*
+00072  *  Destroys the object and frees any allocated resources
+00073  */
+00074 EditDlg::~EditDlg()
+00075 {
+00076     // no need to delete child widgets, Qt does it all for us
+00077 }
+00078 
+00079 /*
+00080  *  Sets the strings of the subwidgets using the current
+00081  *  language.
+00082  */
+00083 void EditDlg::languageChange()
+00084 {
+00085     setCaption( tr2i18n( "Message" ) );
+00086     _buttonReply->setText( tr2i18n( "Reply" ) );
+00087     QToolTip::add( _buttonReply, tr2i18n( "Send reply mail" ) );
+00088     _buttonOk->setText( tr2i18n( "OK" ) );
+00089     _buttonCancel->setText( tr2i18n( "Cancel" ) );
+00090 }
+00091 
+00092 void EditDlg::slotReplyClicked()
+00093 {
+00094     qWarning( "EditDlg::slotReplyClicked(): Not implemented yet" );
+00095 }
+00096 
+00097 #include "EditDlg.moc"
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/EditDlg_8h-source.html b/doc/html/EditDlg_8h-source.html new file mode 100644 index 0000000..d45462b --- /dev/null +++ b/doc/html/EditDlg_8h-source.html @@ -0,0 +1,72 @@ + + +kshowmail: kshowmail/EditDlg.h Source File + + + + + + +

EditDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/EditDlg.ui'
+00003 **
+00004 ** Created: Di Mai 15 19:57:52 2007
+00005 **      by: The User Interface Compiler ($Id: EditDlg_8h-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef EDITDLG_H
+00011 #define EDITDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class KTextBrowser;
+00021 class QPushButton;
+00022 
+00023 class EditDlg : public QDialog
+00024 {
+00025     Q_OBJECT
+00026 
+00027 public:
+00028     EditDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00029     ~EditDlg();
+00030 
+00031     KTextBrowser* m_Edit;
+00032     QPushButton* _buttonReply;
+00033     QPushButton* _buttonOk;
+00034     QPushButton* _buttonCancel;
+00035 
+00036 public slots:
+00037     virtual void slotReplyClicked();
+00038 
+00039 protected:
+00040     QVBoxLayout* EditDlgLayout;
+00041     QGridLayout* headerlayout;
+00042     QHBoxLayout* layout3;
+00043     QSpacerItem* Spacer15;
+00044 
+00045 protected slots:
+00046     virtual void languageChange();
+00047 
+00048 };
+00049 
+00050 #endif // EDITDLG_H
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/EditDlg_8moc-source.html b/doc/html/EditDlg_8moc-source.html new file mode 100644 index 0000000..9a51142 --- /dev/null +++ b/doc/html/EditDlg_8moc-source.html @@ -0,0 +1,126 @@ + + +kshowmail: kshowmail/EditDlg.moc Source File + + + + + + +

EditDlg.moc

00001 /****************************************************************************
+00002 ** EditDlg meta object code from reading C++ file 'EditDlg.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: EditDlg_8moc-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "EditDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *EditDlg::className() const
+00023 {
+00024     return "EditDlg";
+00025 }
+00026 
+00027 QMetaObject *EditDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_EditDlg( "EditDlg", &EditDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString EditDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "EditDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString EditDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "EditDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* EditDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotReplyClicked", 0, 0 };
+00056     static const QUMethod slot_1 = {"languageChange", 0, 0 };
+00057     static const QMetaData slot_tbl[] = {
+00058        { "slotReplyClicked()", &slot_0, QMetaData::Public },
+00059        { "languageChange()", &slot_1, QMetaData::Protected }
+00060     };
+00061     metaObj = QMetaObject::new_metaobject(
+00062        "EditDlg", parentObject,
+00063        slot_tbl, 2,
+00064        0, 0,
+00065 #ifndef QT_NO_PROPERTIES
+00066        0, 0,
+00067        0, 0,
+00068 #endif // QT_NO_PROPERTIES
+00069        0, 0 );
+00070     cleanUp_EditDlg.setMetaObject( metaObj );
+00071     return metaObj;
+00072 }
+00073 
+00074 void* EditDlg::qt_cast( const char* clname )
+00075 {
+00076     if ( !qstrcmp( clname, "EditDlg" ) )
+00077        return this;
+00078     return QDialog::qt_cast( clname );
+00079 }
+00080 
+00081 bool EditDlg::qt_invoke( int _id, QUObject* _o )
+00082 {
+00083     switch ( _id - staticMetaObject()->slotOffset() ) {
+00084     case 0: slotReplyClicked(); break;
+00085     case 1: languageChange(); break;
+00086     default:
+00087        return QDialog::qt_invoke( _id, _o );
+00088     }
+00089     return TRUE;
+00090 }
+00091 
+00092 bool EditDlg::qt_emit( int _id, QUObject* _o )
+00093 {
+00094     return QDialog::qt_emit(_id,_o);
+00095 }
+00096 #ifndef QT_NO_PROPERTIES
+00097 
+00098 bool EditDlg::qt_property( int id, int f, QVariant* v)
+00099 {
+00100     return QDialog::qt_property( id, f, v);
+00101 }
+00102 
+00103 bool EditDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00104 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterDlg_8cpp-source.html b/doc/html/FilterDlg_8cpp-source.html new file mode 100644 index 0000000..6ce5017 --- /dev/null +++ b/doc/html/FilterDlg_8cpp-source.html @@ -0,0 +1,223 @@ + + +kshowmail: kshowmail/FilterDlg.cpp Source File + + + + + + +

FilterDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file './FilterDlg.ui'
+00005 **
+00006 ** Created: Fr Jun 29 22:08:56 2007
+00007 **      by: The User Interface Compiler ($Id: FilterDlg_8cpp-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "FilterDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qbuttongroup.h>
+00017 #include <qradiobutton.h>
+00018 #include <qgroupbox.h>
+00019 #include <qcombobox.h>
+00020 #include <qlayout.h>
+00021 #include <qtooltip.h>
+00022 #include <qwhatsthis.h>
+00023 
+00024 /*
+00025  *  Constructs a FilterDlg as a child of 'parent', with the
+00026  *  name 'name' and widget flags set to 'f'.
+00027  *
+00028  *  The dialog will by default be modeless, unless you set 'modal' to
+00029  *  TRUE to construct a modal dialog.
+00030  */
+00031 FilterDlg::FilterDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00032     : QDialog( parent, name, modal, fl )
+00033 {
+00034     if ( !name )
+00035        setName( "FilterDlg" );
+00036     setSizeGripEnabled( FALSE );
+00037     FilterDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "FilterDlgLayout"); 
+00038 
+00039     Layout6 = new QHBoxLayout( 0, 0, 6, "Layout6"); 
+00040     Spacer11 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00041     Layout6->addItem( Spacer11 );
+00042 
+00043     _buttonOk = new QPushButton( this, "_buttonOk" );
+00044     Layout6->addWidget( _buttonOk );
+00045 
+00046     _buttonCancel = new QPushButton( this, "_buttonCancel" );
+00047     Layout6->addWidget( _buttonCancel );
+00048 
+00049     FilterDlgLayout->addLayout( Layout6, 2, 0 );
+00050 
+00051     buttonGroup1 = new QButtonGroup( this, "buttonGroup1" );
+00052     buttonGroup1->setColumnLayout(0, Qt::Vertical );
+00053     buttonGroup1->layout()->setSpacing( 6 );
+00054     buttonGroup1->layout()->setMargin( 11 );
+00055     buttonGroup1Layout = new QGridLayout( buttonGroup1->layout() );
+00056     buttonGroup1Layout->setAlignment( Qt::AlignTop );
+00057 
+00058     _radioOff = new QRadioButton( buttonGroup1, "_radioOff" );
+00059 
+00060     buttonGroup1Layout->addWidget( _radioOff, 0, 0 );
+00061 
+00062     _radioOn = new QRadioButton( buttonGroup1, "_radioOn" );
+00063 
+00064     buttonGroup1Layout->addWidget( _radioOn, 1, 0 );
+00065 
+00066     _radioAuto = new QRadioButton( buttonGroup1, "_radioAuto" );
+00067 
+00068     buttonGroup1Layout->addWidget( _radioAuto, 2, 0 );
+00069 
+00070     FilterDlgLayout->addWidget( buttonGroup1, 0, 0 );
+00071 
+00072     QGroupBox_1 = new QGroupBox( this, "QGroupBox_1" );
+00073     QGroupBox_1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, QGroupBox_1->sizePolicy().hasHeightForWidth() ) );
+00074     QGroupBox_1->setColumnLayout(0, Qt::Vertical );
+00075     QGroupBox_1->layout()->setSpacing( 6 );
+00076     QGroupBox_1->layout()->setMargin( 11 );
+00077     QGroupBox_1Layout = new QGridLayout( QGroupBox_1->layout() );
+00078     QGroupBox_1Layout->setAlignment( Qt::AlignTop );
+00079 
+00080     _comboFilter = new QComboBox( FALSE, QGroupBox_1, "_comboFilter" );
+00081     _comboFilter->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _comboFilter->sizePolicy().hasHeightForWidth() ) );
+00082     _comboFilter->setInsertionPolicy( QComboBox::AtTop );
+00083 
+00084     QGroupBox_1Layout->addMultiCellWidget( _comboFilter, 0, 0, 0, 3 );
+00085 
+00086     _buttonAdd = new QPushButton( QGroupBox_1, "_buttonAdd" );
+00087     _buttonAdd->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _buttonAdd->sizePolicy().hasHeightForWidth() ) );
+00088 
+00089     QGroupBox_1Layout->addWidget( _buttonAdd, 1, 0 );
+00090 
+00091     _buttonEdit = new QPushButton( QGroupBox_1, "_buttonEdit" );
+00092     _buttonEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _buttonEdit->sizePolicy().hasHeightForWidth() ) );
+00093 
+00094     QGroupBox_1Layout->addWidget( _buttonEdit, 1, 1 );
+00095 
+00096     _buttonCopy = new QPushButton( QGroupBox_1, "_buttonCopy" );
+00097     _buttonCopy->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _buttonCopy->sizePolicy().hasHeightForWidth() ) );
+00098 
+00099     QGroupBox_1Layout->addWidget( _buttonCopy, 1, 2 );
+00100 
+00101     _buttonDelete = new QPushButton( QGroupBox_1, "_buttonDelete" );
+00102     _buttonDelete->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _buttonDelete->sizePolicy().hasHeightForWidth() ) );
+00103 
+00104     QGroupBox_1Layout->addWidget( _buttonDelete, 1, 3 );
+00105 
+00106     FilterDlgLayout->addWidget( QGroupBox_1, 1, 0 );
+00107     languageChange();
+00108     resize( QSize(407, 255).expandedTo(minimumSizeHint()) );
+00109     clearWState( WState_Polished );
+00110 
+00111     // signals and slots connections
+00112     connect( _buttonAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) );
+00113     connect( _buttonEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) );
+00114     connect( _buttonCopy, SIGNAL( clicked() ), this, SLOT( slotCopy() ) );
+00115     connect( _buttonDelete, SIGNAL( clicked() ), this, SLOT( slotDelete() ) );
+00116     connect( _buttonOk, SIGNAL( clicked() ), this, SLOT( slotOk() ) );
+00117     connect( _buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00118     connect( _comboFilter, SIGNAL( activated(int) ), this, SLOT( slotFilterActivated(int) ) );
+00119     connect( _radioAuto, SIGNAL( clicked() ), this, SLOT( slotAutomaticActivated() ) );
+00120 
+00121     // tab order
+00122     setTabOrder( _comboFilter, _buttonAdd );
+00123     setTabOrder( _buttonAdd, _buttonEdit );
+00124     setTabOrder( _buttonEdit, _buttonCopy );
+00125     setTabOrder( _buttonCopy, _buttonDelete );
+00126     setTabOrder( _buttonDelete, _buttonOk );
+00127     setTabOrder( _buttonOk, _buttonCancel );
+00128 }
+00129 
+00130 /*
+00131  *  Destroys the object and frees any allocated resources
+00132  */
+00133 FilterDlg::~FilterDlg()
+00134 {
+00135     // no need to delete child widgets, Qt does it all for us
+00136 }
+00137 
+00138 /*
+00139  *  Sets the strings of the subwidgets using the current
+00140  *  language.
+00141  */
+00142 void FilterDlg::languageChange()
+00143 {
+00144     setCaption( tr2i18n( "Filters" ) );
+00145     _buttonOk->setText( tr2i18n( "OK" ) );
+00146     _buttonCancel->setText( tr2i18n( "Cancel" ) );
+00147     buttonGroup1->setTitle( tr2i18n( "Filter Status" ) );
+00148     _radioOff->setText( tr2i18n( "Off" ) );
+00149     QToolTip::add( _radioOff, tr2i18n( "Filters are switched off" ) );
+00150     _radioOn->setText( tr2i18n( "On" ) );
+00151     QToolTip::add( _radioOn, tr2i18n( "Filters are switched on" ) );
+00152     _radioAuto->setText( tr2i18n( "Automatic Delete" ) );
+00153     QToolTip::add( _radioAuto, tr2i18n( "Filters are switched on and are applied automatically" ) );
+00154     QGroupBox_1->setTitle( tr2i18n( "Filters" ) );
+00155     QToolTip::add( _comboFilter, tr2i18n( "<qt>Filters are counted for each automatic deletion;<br>Filters with high counters are listed first</qt>" ) );
+00156     _buttonAdd->setText( tr2i18n( "Add" ) );
+00157     QToolTip::add( _buttonAdd, tr2i18n( "Add filter" ) );
+00158     _buttonEdit->setText( tr2i18n( "Edit" ) );
+00159     QToolTip::add( _buttonEdit, tr2i18n( "Edit filter" ) );
+00160     _buttonCopy->setText( tr2i18n( "Copy" ) );
+00161     QToolTip::add( _buttonCopy, tr2i18n( "Copy filter" ) );
+00162     _buttonDelete->setText( tr2i18n( "Delete" ) );
+00163     QToolTip::add( _buttonDelete, tr2i18n( "Delete filter" ) );
+00164 }
+00165 
+00166 void FilterDlg::slotAdd()
+00167 {
+00168     qWarning( "FilterDlg::slotAdd(): Not implemented yet" );
+00169 }
+00170 
+00171 void FilterDlg::slotCopy()
+00172 {
+00173     qWarning( "FilterDlg::slotCopy(): Not implemented yet" );
+00174 }
+00175 
+00176 void FilterDlg::slotDelete()
+00177 {
+00178     qWarning( "FilterDlg::slotDelete(): Not implemented yet" );
+00179 }
+00180 
+00181 void FilterDlg::slotEdit()
+00182 {
+00183     qWarning( "FilterDlg::slotEdit(): Not implemented yet" );
+00184 }
+00185 
+00186 void FilterDlg::slotOk()
+00187 {
+00188     qWarning( "FilterDlg::slotOk(): Not implemented yet" );
+00189 }
+00190 
+00191 void FilterDlg::slotFilterActivated(int)
+00192 {
+00193     qWarning( "FilterDlg::slotFilterActivated(int): Not implemented yet" );
+00194 }
+00195 
+00196 void FilterDlg::slotAutomaticActivated()
+00197 {
+00198     qWarning( "FilterDlg::slotAutomaticActivated(): Not implemented yet" );
+00199 }
+00200 
+00201 #include "FilterDlg.moc"
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterDlg_8h-source.html b/doc/html/FilterDlg_8h-source.html new file mode 100644 index 0000000..b4dfc31 --- /dev/null +++ b/doc/html/FilterDlg_8h-source.html @@ -0,0 +1,90 @@ + + +kshowmail: kshowmail/FilterDlg.h Source File + + + + + + +

FilterDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file './FilterDlg.ui'
+00003 **
+00004 ** Created: Fr Jun 29 22:08:23 2007
+00005 **      by: The User Interface Compiler ($Id: FilterDlg_8h-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef FILTERDLG_H
+00011 #define FILTERDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class QPushButton;
+00021 class QButtonGroup;
+00022 class QRadioButton;
+00023 class QGroupBox;
+00024 class QComboBox;
+00025 
+00026 class FilterDlg : public QDialog
+00027 {
+00028     Q_OBJECT
+00029 
+00030 public:
+00031     FilterDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00032     ~FilterDlg();
+00033 
+00034     QPushButton* _buttonOk;
+00035     QPushButton* _buttonCancel;
+00036     QButtonGroup* buttonGroup1;
+00037     QRadioButton* _radioOff;
+00038     QRadioButton* _radioOn;
+00039     QRadioButton* _radioAuto;
+00040     QGroupBox* QGroupBox_1;
+00041     QComboBox* _comboFilter;
+00042     QPushButton* _buttonAdd;
+00043     QPushButton* _buttonEdit;
+00044     QPushButton* _buttonCopy;
+00045     QPushButton* _buttonDelete;
+00046 
+00047 public slots:
+00048     virtual void slotAdd();
+00049     virtual void slotCopy();
+00050     virtual void slotDelete();
+00051     virtual void slotEdit();
+00052     virtual void slotOk();
+00053     virtual void slotFilterActivated(int);
+00054     virtual void slotAutomaticActivated();
+00055 
+00056 protected:
+00057     QGridLayout* FilterDlgLayout;
+00058     QHBoxLayout* Layout6;
+00059     QSpacerItem* Spacer11;
+00060     QGridLayout* buttonGroup1Layout;
+00061     QGridLayout* QGroupBox_1Layout;
+00062 
+00063 protected slots:
+00064     virtual void languageChange();
+00065 
+00066 };
+00067 
+00068 #endif // FILTERDLG_H
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterDlg_8moc-source.html b/doc/html/FilterDlg_8moc-source.html new file mode 100644 index 0000000..7fd3c59 --- /dev/null +++ b/doc/html/FilterDlg_8moc-source.html @@ -0,0 +1,147 @@ + + +kshowmail: kshowmail/FilterDlg.moc Source File + + + + + + +

FilterDlg.moc

00001 /****************************************************************************
+00002 ** FilterDlg meta object code from reading C++ file 'FilterDlg.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:08:56 2007
+00005 **      by: The Qt MOC ($Id: FilterDlg_8moc-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "FilterDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *FilterDlg::className() const
+00023 {
+00024     return "FilterDlg";
+00025 }
+00026 
+00027 QMetaObject *FilterDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_FilterDlg( "FilterDlg", &FilterDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString FilterDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "FilterDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString FilterDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "FilterDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* FilterDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotAdd", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotCopy", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotDelete", 0, 0 };
+00058     static const QUMethod slot_3 = {"slotEdit", 0, 0 };
+00059     static const QUMethod slot_4 = {"slotOk", 0, 0 };
+00060     static const QUParameter param_slot_5[] = {
+00061        { 0, &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_5 = {"slotFilterActivated", 1, param_slot_5 };
+00064     static const QUMethod slot_6 = {"slotAutomaticActivated", 0, 0 };
+00065     static const QUMethod slot_7 = {"languageChange", 0, 0 };
+00066     static const QMetaData slot_tbl[] = {
+00067        { "slotAdd()", &slot_0, QMetaData::Public },
+00068        { "slotCopy()", &slot_1, QMetaData::Public },
+00069        { "slotDelete()", &slot_2, QMetaData::Public },
+00070        { "slotEdit()", &slot_3, QMetaData::Public },
+00071        { "slotOk()", &slot_4, QMetaData::Public },
+00072        { "slotFilterActivated(int)", &slot_5, QMetaData::Public },
+00073        { "slotAutomaticActivated()", &slot_6, QMetaData::Public },
+00074        { "languageChange()", &slot_7, QMetaData::Protected }
+00075     };
+00076     metaObj = QMetaObject::new_metaobject(
+00077        "FilterDlg", parentObject,
+00078        slot_tbl, 8,
+00079        0, 0,
+00080 #ifndef QT_NO_PROPERTIES
+00081        0, 0,
+00082        0, 0,
+00083 #endif // QT_NO_PROPERTIES
+00084        0, 0 );
+00085     cleanUp_FilterDlg.setMetaObject( metaObj );
+00086     return metaObj;
+00087 }
+00088 
+00089 void* FilterDlg::qt_cast( const char* clname )
+00090 {
+00091     if ( !qstrcmp( clname, "FilterDlg" ) )
+00092        return this;
+00093     return QDialog::qt_cast( clname );
+00094 }
+00095 
+00096 bool FilterDlg::qt_invoke( int _id, QUObject* _o )
+00097 {
+00098     switch ( _id - staticMetaObject()->slotOffset() ) {
+00099     case 0: slotAdd(); break;
+00100     case 1: slotCopy(); break;
+00101     case 2: slotDelete(); break;
+00102     case 3: slotEdit(); break;
+00103     case 4: slotOk(); break;
+00104     case 5: slotFilterActivated((int)static_QUType_int.get(_o+1)); break;
+00105     case 6: slotAutomaticActivated(); break;
+00106     case 7: languageChange(); break;
+00107     default:
+00108        return QDialog::qt_invoke( _id, _o );
+00109     }
+00110     return TRUE;
+00111 }
+00112 
+00113 bool FilterDlg::qt_emit( int _id, QUObject* _o )
+00114 {
+00115     return QDialog::qt_emit(_id,_o);
+00116 }
+00117 #ifndef QT_NO_PROPERTIES
+00118 
+00119 bool FilterDlg::qt_property( int id, int f, QVariant* v)
+00120 {
+00121     return QDialog::qt_property( id, f, v);
+00122 }
+00123 
+00124 bool FilterDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00125 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterEntryDlg_8cpp-source.html b/doc/html/FilterEntryDlg_8cpp-source.html new file mode 100644 index 0000000..36bc851 --- /dev/null +++ b/doc/html/FilterEntryDlg_8cpp-source.html @@ -0,0 +1,332 @@ + + +kshowmail: kshowmail/FilterEntryDlg.cpp Source File + + + + + + +

FilterEntryDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file './FilterEntryDlg.ui'
+00005 **
+00006 ** Created: Fr Jun 29 22:08:54 2007
+00007 **      by: The User Interface Compiler ($Id: FilterEntryDlg_8cpp-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "FilterEntryDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qlineedit.h>
+00017 #include <qgroupbox.h>
+00018 #include <qcombobox.h>
+00019 #include <qcheckbox.h>
+00020 #include <qspinbox.h>
+00021 #include <qlayout.h>
+00022 #include <qtooltip.h>
+00023 #include <qwhatsthis.h>
+00024 
+00025 /*
+00026  *  Constructs a FilterEntryDlg as a child of 'parent', with the
+00027  *  name 'name' and widget flags set to 'f'.
+00028  *
+00029  *  The dialog will by default be modeless, unless you set 'modal' to
+00030  *  TRUE to construct a modal dialog.
+00031  */
+00032 FilterEntryDlg::FilterEntryDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00033     : QDialog( parent, name, modal, fl )
+00034 {
+00035     if ( !name )
+00036        setName( "FilterEntryDlg" );
+00037     setSizeGripEnabled( FALSE );
+00038     FilterEntryDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "FilterEntryDlgLayout"); 
+00039 
+00040     _editName = new QLineEdit( this, "_editName" );
+00041     _editName->setEnabled( TRUE );
+00042     _editName->setReadOnly( TRUE );
+00043 
+00044     FilterEntryDlgLayout->addWidget( _editName, 0, 0 );
+00045 
+00046     QGroupBox_1 = new QGroupBox( this, "QGroupBox_1" );
+00047     QGroupBox_1->setFrameShape( QGroupBox::Box );
+00048     QGroupBox_1->setFrameShadow( QGroupBox::Sunken );
+00049     QGroupBox_1->setColumnLayout(0, Qt::Vertical );
+00050     QGroupBox_1->layout()->setSpacing( 6 );
+00051     QGroupBox_1->layout()->setMargin( 11 );
+00052     QGroupBox_1Layout = new QGridLayout( QGroupBox_1->layout() );
+00053     QGroupBox_1Layout->setAlignment( Qt::AlignTop );
+00054 
+00055     _comboItem1 = new QComboBox( FALSE, QGroupBox_1, "_comboItem1" );
+00056 
+00057     QGroupBox_1Layout->addMultiCellWidget( _comboItem1, 0, 0, 0, 1 );
+00058 
+00059     _comboExpression1 = new QComboBox( FALSE, QGroupBox_1, "_comboExpression1" );
+00060 
+00061     QGroupBox_1Layout->addMultiCellWidget( _comboExpression1, 0, 0, 2, 3 );
+00062 
+00063     _editMatch1 = new QLineEdit( QGroupBox_1, "_editMatch1" );
+00064 
+00065     QGroupBox_1Layout->addMultiCellWidget( _editMatch1, 1, 1, 0, 3 );
+00066 
+00067     _comboSecondCondition = new QComboBox( FALSE, QGroupBox_1, "_comboSecondCondition" );
+00068 
+00069     QGroupBox_1Layout->addMultiCellWidget( _comboSecondCondition, 3, 3, 0, 3 );
+00070 
+00071     _checkCaseSensitive1 = new QCheckBox( QGroupBox_1, "_checkCaseSensitive1" );
+00072 
+00073     QGroupBox_1Layout->addWidget( _checkCaseSensitive1, 2, 0 );
+00074     spacer2 = new QSpacerItem( 50, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00075     QGroupBox_1Layout->addItem( spacer2, 2, 1 );
+00076 
+00077     _buttonEditRegExp1 = new QPushButton( QGroupBox_1, "_buttonEditRegExp1" );
+00078 
+00079     QGroupBox_1Layout->addWidget( _buttonEditRegExp1, 2, 3 );
+00080 
+00081     _checkRegExp1 = new QCheckBox( QGroupBox_1, "_checkRegExp1" );
+00082 
+00083     QGroupBox_1Layout->addWidget( _checkRegExp1, 2, 2 );
+00084 
+00085     FilterEntryDlgLayout->addWidget( QGroupBox_1, 1, 0 );
+00086 
+00087     _groupBox2 = new QGroupBox( this, "_groupBox2" );
+00088     _groupBox2->setEnabled( FALSE );
+00089     _groupBox2->setColumnLayout(0, Qt::Vertical );
+00090     _groupBox2->layout()->setSpacing( 6 );
+00091     _groupBox2->layout()->setMargin( 11 );
+00092     _groupBox2Layout = new QGridLayout( _groupBox2->layout() );
+00093     _groupBox2Layout->setAlignment( Qt::AlignTop );
+00094 
+00095     _comboItem2 = new QComboBox( FALSE, _groupBox2, "_comboItem2" );
+00096 
+00097     _groupBox2Layout->addMultiCellWidget( _comboItem2, 0, 0, 0, 1 );
+00098 
+00099     _comboExpression2 = new QComboBox( FALSE, _groupBox2, "_comboExpression2" );
+00100 
+00101     _groupBox2Layout->addMultiCellWidget( _comboExpression2, 0, 0, 2, 3 );
+00102 
+00103     _editMatch2 = new QLineEdit( _groupBox2, "_editMatch2" );
+00104 
+00105     _groupBox2Layout->addMultiCellWidget( _editMatch2, 1, 1, 0, 3 );
+00106 
+00107     _checkCaseSensitive2 = new QCheckBox( _groupBox2, "_checkCaseSensitive2" );
+00108 
+00109     _groupBox2Layout->addWidget( _checkCaseSensitive2, 2, 0 );
+00110     spacer3 = new QSpacerItem( 140, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00111     _groupBox2Layout->addItem( spacer3, 2, 1 );
+00112 
+00113     _checkRegExp2 = new QCheckBox( _groupBox2, "_checkRegExp2" );
+00114 
+00115     _groupBox2Layout->addWidget( _checkRegExp2, 2, 2 );
+00116 
+00117     _buttonEditRegExp2 = new QPushButton( _groupBox2, "_buttonEditRegExp2" );
+00118 
+00119     _groupBox2Layout->addWidget( _buttonEditRegExp2, 2, 3 );
+00120 
+00121     FilterEntryDlgLayout->addWidget( _groupBox2, 2, 0 );
+00122 
+00123     Layout11 = new QHBoxLayout( 0, 0, 6, "Layout11"); 
+00124     Spacer17 = new QSpacerItem( 20, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00125     Layout11->addItem( Spacer17 );
+00126 
+00127     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00128     Layout11->addWidget( m_ButtonOk );
+00129 
+00130     m_ButtonCancel = new QPushButton( this, "m_ButtonCancel" );
+00131     Layout11->addWidget( m_ButtonCancel );
+00132 
+00133     FilterEntryDlgLayout->addLayout( Layout11, 4, 0 );
+00134 
+00135     groupBox3 = new QGroupBox( this, "groupBox3" );
+00136     groupBox3->setColumnLayout(0, Qt::Vertical );
+00137     groupBox3->layout()->setSpacing( 6 );
+00138     groupBox3->layout()->setMargin( 11 );
+00139     groupBox3Layout = new QHBoxLayout( groupBox3->layout() );
+00140     groupBox3Layout->setAlignment( Qt::AlignTop );
+00141 
+00142     _spinCounter = new QSpinBox( groupBox3, "_spinCounter" );
+00143     _spinCounter->setMaxValue( 99999 );
+00144     groupBox3Layout->addWidget( _spinCounter );
+00145 
+00146     _buttonResetCounter = new QPushButton( groupBox3, "_buttonResetCounter" );
+00147     groupBox3Layout->addWidget( _buttonResetCounter );
+00148 
+00149     FilterEntryDlgLayout->addWidget( groupBox3, 3, 0 );
+00150     languageChange();
+00151     resize( QSize(540, 484).expandedTo(minimumSizeHint()) );
+00152     clearWState( WState_Polished );
+00153 
+00154     // signals and slots connections
+00155     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotOk() ) );
+00156     connect( m_ButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00157     connect( _editMatch1, SIGNAL( textChanged(const QString&) ), this, SLOT( slotMatch1Changed(const QString&) ) );
+00158     connect( _comboItem1, SIGNAL( activated(int) ), this, SLOT( slotItem1Selected(int) ) );
+00159     connect( _comboExpression1, SIGNAL( activated(int) ), this, SLOT( slotCondition1Selected(int) ) );
+00160     connect( _comboItem2, SIGNAL( activated(int) ), this, SLOT( slotItem2Selected(int) ) );
+00161     connect( _comboExpression2, SIGNAL( activated(int) ), this, SLOT( slotCondition2Selected(int) ) );
+00162     connect( _comboSecondCondition, SIGNAL( activated(int) ), this, SLOT( slotSecondCondition(int) ) );
+00163     connect( _editMatch2, SIGNAL( textChanged(const QString&) ), this, SLOT( slotMatch2Changed(const QString&) ) );
+00164     connect( _buttonResetCounter, SIGNAL( clicked() ), this, SLOT( slotResetCounter() ) );
+00165     connect( _spinCounter, SIGNAL( valueChanged(int) ), this, SLOT( slotCounterChanged(int) ) );
+00166     connect( _buttonEditRegExp1, SIGNAL( clicked() ), this, SLOT( slotEditRegExp1() ) );
+00167     connect( _buttonEditRegExp2, SIGNAL( clicked() ), this, SLOT( slotEditRegExp2() ) );
+00168     connect( _checkRegExp1, SIGNAL( toggled(bool) ), this, SLOT( slotToggleRegExp1(bool) ) );
+00169     connect( _checkRegExp2, SIGNAL( toggled(bool) ), this, SLOT( slotToggleRegExp2(bool) ) );
+00170 
+00171     // tab order
+00172     setTabOrder( m_ButtonOk, m_ButtonCancel );
+00173 }
+00174 
+00175 /*
+00176  *  Destroys the object and frees any allocated resources
+00177  */
+00178 FilterEntryDlg::~FilterEntryDlg()
+00179 {
+00180     // no need to delete child widgets, Qt does it all for us
+00181 }
+00182 
+00183 /*
+00184  *  Sets the strings of the subwidgets using the current
+00185  *  language.
+00186  */
+00187 void FilterEntryDlg::languageChange()
+00188 {
+00189     setCaption( tr2i18n( "Filter" ) );
+00190     QGroupBox_1->setTitle( tr2i18n( "Condition" ) );
+00191     _comboItem1->clear();
+00192     _comboItem1->insertItem( tr2i18n( "From" ) );
+00193     _comboItem1->insertItem( tr2i18n( "Subject" ) );
+00194     _comboItem1->insertItem( tr2i18n( "Header" ) );
+00195     _comboItem1->insertItem( tr2i18n( "Size" ) );
+00196     _comboItem1->insertItem( tr2i18n( "To" ) );
+00197     _comboExpression1->clear();
+00198     _comboExpression1->insertItem( tr2i18n( "Contains" ) );
+00199     _comboExpression1->insertItem( tr2i18n( "Doesn't contain" ) );
+00200     _comboExpression1->insertItem( tr2i18n( "Equals" ) );
+00201     _comboExpression1->insertItem( tr2i18n( "Doesn't equal" ) );
+00202     _comboExpression1->insertItem( tr2i18n( "Greater" ) );
+00203     _comboExpression1->insertItem( tr2i18n( "Less" ) );
+00204     _comboSecondCondition->clear();
+00205     _comboSecondCondition->insertItem( tr2i18n( "No more Conditions" ) );
+00206     _comboSecondCondition->insertItem( tr2i18n( "And" ) );
+00207     _comboSecondCondition->insertItem( tr2i18n( "Or" ) );
+00208     _checkCaseSensitive1->setText( tr2i18n( "Case sensitive" ) );
+00209     _buttonEditRegExp1->setText( tr2i18n( "Edit" ) );
+00210     QToolTip::add( _buttonEditRegExp1, tr2i18n( "Edit regular expression" ) );
+00211     _checkRegExp1->setText( tr2i18n( "Regular Expression" ) );
+00212     QToolTip::add( _checkRegExp1, tr2i18n( "For help about regular expressions lookup the Qt documentation" ) );
+00213     _groupBox2->setTitle( tr2i18n( "second Condition" ) );
+00214     _comboItem2->clear();
+00215     _comboItem2->insertItem( tr2i18n( "From" ) );
+00216     _comboItem2->insertItem( tr2i18n( "Subject" ) );
+00217     _comboItem2->insertItem( tr2i18n( "Header" ) );
+00218     _comboItem2->insertItem( tr2i18n( "Size" ) );
+00219     _comboItem2->insertItem( tr2i18n( "To" ) );
+00220     _comboExpression2->clear();
+00221     _comboExpression2->insertItem( tr2i18n( "Contains" ) );
+00222     _comboExpression2->insertItem( tr2i18n( "Doesn't contain" ) );
+00223     _comboExpression2->insertItem( tr2i18n( "Equals" ) );
+00224     _comboExpression2->insertItem( tr2i18n( "Doesn't equal" ) );
+00225     _comboExpression2->insertItem( tr2i18n( "Greater" ) );
+00226     _comboExpression2->insertItem( tr2i18n( "Less" ) );
+00227     _checkCaseSensitive2->setText( tr2i18n( "Case sensitive" ) );
+00228     _checkRegExp2->setText( tr2i18n( "Regular Expression" ) );
+00229     QToolTip::add( _checkRegExp2, tr2i18n( "For help about regular expressions lookup the Qt documentation" ) );
+00230     _buttonEditRegExp2->setText( tr2i18n( "Edit" ) );
+00231     QToolTip::add( _buttonEditRegExp2, tr2i18n( "Edit regular expression" ) );
+00232     m_ButtonOk->setText( tr2i18n( "OK" ) );
+00233     m_ButtonCancel->setText( tr2i18n( "Cancel" ) );
+00234     groupBox3->setTitle( tr2i18n( "Counter" ) );
+00235     QToolTip::add( _spinCounter, tr2i18n( "<qt>Filters are counted for each automatic deletion;<br>Filters with high counters are listed first</qt>" ) );
+00236     _buttonResetCounter->setText( tr2i18n( "Reset Counter" ) );
+00237     QToolTip::add( _buttonResetCounter, tr2i18n( "<qt>Filters are counted for each automatic deletion;<br>Filters with high counters are listed first</qt>" ) );
+00238 }
+00239 
+00240 void FilterEntryDlg::slotOk()
+00241 {
+00242     qWarning( "FilterEntryDlg::slotOk(): Not implemented yet" );
+00243 }
+00244 
+00245 void FilterEntryDlg::slotItem1Selected(int)
+00246 {
+00247     qWarning( "FilterEntryDlg::slotItem1Selected(int): Not implemented yet" );
+00248 }
+00249 
+00250 void FilterEntryDlg::slotItem2Selected(int)
+00251 {
+00252     qWarning( "FilterEntryDlg::slotItem2Selected(int): Not implemented yet" );
+00253 }
+00254 
+00255 void FilterEntryDlg::slotSecondCondition(int)
+00256 {
+00257     qWarning( "FilterEntryDlg::slotSecondCondition(int): Not implemented yet" );
+00258 }
+00259 
+00260 void FilterEntryDlg::slotCondition1Selected(int)
+00261 {
+00262     qWarning( "FilterEntryDlg::slotCondition1Selected(int): Not implemented yet" );
+00263 }
+00264 
+00265 void FilterEntryDlg::slotCondition2Selected(int)
+00266 {
+00267     qWarning( "FilterEntryDlg::slotCondition2Selected(int): Not implemented yet" );
+00268 }
+00269 
+00270 void FilterEntryDlg::slotMatch1Changed(const QString&)
+00271 {
+00272     qWarning( "FilterEntryDlg::slotMatch1Changed(const QString&): Not implemented yet" );
+00273 }
+00274 
+00275 void FilterEntryDlg::slotMatch2Changed(const QString&)
+00276 {
+00277     qWarning( "FilterEntryDlg::slotMatch2Changed(const QString&): Not implemented yet" );
+00278 }
+00279 
+00280 void FilterEntryDlg::slotResetCounter()
+00281 {
+00282     qWarning( "FilterEntryDlg::slotResetCounter(): Not implemented yet" );
+00283 }
+00284 
+00285 void FilterEntryDlg::slotCounterChanged(int)
+00286 {
+00287     qWarning( "FilterEntryDlg::slotCounterChanged(int): Not implemented yet" );
+00288 }
+00289 
+00290 void FilterEntryDlg::slotEditRegExp1()
+00291 {
+00292     qWarning( "FilterEntryDlg::slotEditRegExp1(): Not implemented yet" );
+00293 }
+00294 
+00295 void FilterEntryDlg::slotEditRegExp2()
+00296 {
+00297     qWarning( "FilterEntryDlg::slotEditRegExp2(): Not implemented yet" );
+00298 }
+00299 
+00300 void FilterEntryDlg::slotToggleRegExp1(bool)
+00301 {
+00302     qWarning( "FilterEntryDlg::slotToggleRegExp1(bool): Not implemented yet" );
+00303 }
+00304 
+00305 void FilterEntryDlg::slotToggleRegExp2(bool)
+00306 {
+00307     qWarning( "FilterEntryDlg::slotToggleRegExp2(bool): Not implemented yet" );
+00308 }
+00309 
+00310 #include "FilterEntryDlg.moc"
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterEntryDlg_8h-source.html b/doc/html/FilterEntryDlg_8h-source.html new file mode 100644 index 0000000..567cd10 --- /dev/null +++ b/doc/html/FilterEntryDlg_8h-source.html @@ -0,0 +1,110 @@ + + +kshowmail: kshowmail/FilterEntryDlg.h Source File + + + + + + +

FilterEntryDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file './FilterEntryDlg.ui'
+00003 **
+00004 ** Created: Fr Jun 29 22:08:23 2007
+00005 **      by: The User Interface Compiler ($Id: FilterEntryDlg_8h-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef FILTERENTRYDLG_H
+00011 #define FILTERENTRYDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class QLineEdit;
+00021 class QGroupBox;
+00022 class QComboBox;
+00023 class QCheckBox;
+00024 class QPushButton;
+00025 class QSpinBox;
+00026 
+00027 class FilterEntryDlg : public QDialog
+00028 {
+00029     Q_OBJECT
+00030 
+00031 public:
+00032     FilterEntryDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00033     ~FilterEntryDlg();
+00034 
+00035     QLineEdit* _editName;
+00036     QGroupBox* QGroupBox_1;
+00037     QComboBox* _comboItem1;
+00038     QComboBox* _comboExpression1;
+00039     QLineEdit* _editMatch1;
+00040     QComboBox* _comboSecondCondition;
+00041     QCheckBox* _checkCaseSensitive1;
+00042     QPushButton* _buttonEditRegExp1;
+00043     QCheckBox* _checkRegExp1;
+00044     QGroupBox* _groupBox2;
+00045     QComboBox* _comboItem2;
+00046     QComboBox* _comboExpression2;
+00047     QLineEdit* _editMatch2;
+00048     QCheckBox* _checkCaseSensitive2;
+00049     QCheckBox* _checkRegExp2;
+00050     QPushButton* _buttonEditRegExp2;
+00051     QPushButton* m_ButtonOk;
+00052     QPushButton* m_ButtonCancel;
+00053     QGroupBox* groupBox3;
+00054     QSpinBox* _spinCounter;
+00055     QPushButton* _buttonResetCounter;
+00056 
+00057 public slots:
+00058     virtual void slotOk();
+00059     virtual void slotItem1Selected(int);
+00060     virtual void slotItem2Selected(int);
+00061     virtual void slotSecondCondition(int);
+00062     virtual void slotCondition1Selected(int);
+00063     virtual void slotCondition2Selected(int);
+00064     virtual void slotMatch1Changed(const QString&);
+00065     virtual void slotMatch2Changed(const QString&);
+00066     virtual void slotResetCounter();
+00067     virtual void slotCounterChanged(int);
+00068     virtual void slotEditRegExp1();
+00069     virtual void slotEditRegExp2();
+00070     virtual void slotToggleRegExp1(bool);
+00071     virtual void slotToggleRegExp2(bool);
+00072 
+00073 protected:
+00074     QGridLayout* FilterEntryDlgLayout;
+00075     QGridLayout* QGroupBox_1Layout;
+00076     QSpacerItem* spacer2;
+00077     QGridLayout* _groupBox2Layout;
+00078     QSpacerItem* spacer3;
+00079     QHBoxLayout* Layout11;
+00080     QSpacerItem* Spacer17;
+00081     QHBoxLayout* groupBox3Layout;
+00082 
+00083 protected slots:
+00084     virtual void languageChange();
+00085 
+00086 };
+00087 
+00088 #endif // FILTERENTRYDLG_H
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/FilterEntryDlg_8moc-source.html b/doc/html/FilterEntryDlg_8moc-source.html new file mode 100644 index 0000000..20b0617 --- /dev/null +++ b/doc/html/FilterEntryDlg_8moc-source.html @@ -0,0 +1,195 @@ + + +kshowmail: kshowmail/FilterEntryDlg.moc Source File + + + + + + +

FilterEntryDlg.moc

00001 /****************************************************************************
+00002 ** FilterEntryDlg meta object code from reading C++ file 'FilterEntryDlg.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:08:54 2007
+00005 **      by: The Qt MOC ($Id: FilterEntryDlg_8moc-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "FilterEntryDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *FilterEntryDlg::className() const
+00023 {
+00024     return "FilterEntryDlg";
+00025 }
+00026 
+00027 QMetaObject *FilterEntryDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_FilterEntryDlg( "FilterEntryDlg", &FilterEntryDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString FilterEntryDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "FilterEntryDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString FilterEntryDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "FilterEntryDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* FilterEntryDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotOk", 0, 0 };
+00056     static const QUParameter param_slot_1[] = {
+00057        { 0, &static_QUType_int, 0, QUParameter::In }
+00058     };
+00059     static const QUMethod slot_1 = {"slotItem1Selected", 1, param_slot_1 };
+00060     static const QUParameter param_slot_2[] = {
+00061        { 0, &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_2 = {"slotItem2Selected", 1, param_slot_2 };
+00064     static const QUParameter param_slot_3[] = {
+00065        { 0, &static_QUType_int, 0, QUParameter::In }
+00066     };
+00067     static const QUMethod slot_3 = {"slotSecondCondition", 1, param_slot_3 };
+00068     static const QUParameter param_slot_4[] = {
+00069        { 0, &static_QUType_int, 0, QUParameter::In }
+00070     };
+00071     static const QUMethod slot_4 = {"slotCondition1Selected", 1, param_slot_4 };
+00072     static const QUParameter param_slot_5[] = {
+00073        { 0, &static_QUType_int, 0, QUParameter::In }
+00074     };
+00075     static const QUMethod slot_5 = {"slotCondition2Selected", 1, param_slot_5 };
+00076     static const QUParameter param_slot_6[] = {
+00077        { 0, &static_QUType_QString, 0, QUParameter::In }
+00078     };
+00079     static const QUMethod slot_6 = {"slotMatch1Changed", 1, param_slot_6 };
+00080     static const QUParameter param_slot_7[] = {
+00081        { 0, &static_QUType_QString, 0, QUParameter::In }
+00082     };
+00083     static const QUMethod slot_7 = {"slotMatch2Changed", 1, param_slot_7 };
+00084     static const QUMethod slot_8 = {"slotResetCounter", 0, 0 };
+00085     static const QUParameter param_slot_9[] = {
+00086        { 0, &static_QUType_int, 0, QUParameter::In }
+00087     };
+00088     static const QUMethod slot_9 = {"slotCounterChanged", 1, param_slot_9 };
+00089     static const QUMethod slot_10 = {"slotEditRegExp1", 0, 0 };
+00090     static const QUMethod slot_11 = {"slotEditRegExp2", 0, 0 };
+00091     static const QUParameter param_slot_12[] = {
+00092        { 0, &static_QUType_bool, 0, QUParameter::In }
+00093     };
+00094     static const QUMethod slot_12 = {"slotToggleRegExp1", 1, param_slot_12 };
+00095     static const QUParameter param_slot_13[] = {
+00096        { 0, &static_QUType_bool, 0, QUParameter::In }
+00097     };
+00098     static const QUMethod slot_13 = {"slotToggleRegExp2", 1, param_slot_13 };
+00099     static const QUMethod slot_14 = {"languageChange", 0, 0 };
+00100     static const QMetaData slot_tbl[] = {
+00101        { "slotOk()", &slot_0, QMetaData::Public },
+00102        { "slotItem1Selected(int)", &slot_1, QMetaData::Public },
+00103        { "slotItem2Selected(int)", &slot_2, QMetaData::Public },
+00104        { "slotSecondCondition(int)", &slot_3, QMetaData::Public },
+00105        { "slotCondition1Selected(int)", &slot_4, QMetaData::Public },
+00106        { "slotCondition2Selected(int)", &slot_5, QMetaData::Public },
+00107        { "slotMatch1Changed(const QString&)", &slot_6, QMetaData::Public },
+00108        { "slotMatch2Changed(const QString&)", &slot_7, QMetaData::Public },
+00109        { "slotResetCounter()", &slot_8, QMetaData::Public },
+00110        { "slotCounterChanged(int)", &slot_9, QMetaData::Public },
+00111        { "slotEditRegExp1()", &slot_10, QMetaData::Public },
+00112        { "slotEditRegExp2()", &slot_11, QMetaData::Public },
+00113        { "slotToggleRegExp1(bool)", &slot_12, QMetaData::Public },
+00114        { "slotToggleRegExp2(bool)", &slot_13, QMetaData::Public },
+00115        { "languageChange()", &slot_14, QMetaData::Protected }
+00116     };
+00117     metaObj = QMetaObject::new_metaobject(
+00118        "FilterEntryDlg", parentObject,
+00119        slot_tbl, 15,
+00120        0, 0,
+00121 #ifndef QT_NO_PROPERTIES
+00122        0, 0,
+00123        0, 0,
+00124 #endif // QT_NO_PROPERTIES
+00125        0, 0 );
+00126     cleanUp_FilterEntryDlg.setMetaObject( metaObj );
+00127     return metaObj;
+00128 }
+00129 
+00130 void* FilterEntryDlg::qt_cast( const char* clname )
+00131 {
+00132     if ( !qstrcmp( clname, "FilterEntryDlg" ) )
+00133        return this;
+00134     return QDialog::qt_cast( clname );
+00135 }
+00136 
+00137 bool FilterEntryDlg::qt_invoke( int _id, QUObject* _o )
+00138 {
+00139     switch ( _id - staticMetaObject()->slotOffset() ) {
+00140     case 0: slotOk(); break;
+00141     case 1: slotItem1Selected((int)static_QUType_int.get(_o+1)); break;
+00142     case 2: slotItem2Selected((int)static_QUType_int.get(_o+1)); break;
+00143     case 3: slotSecondCondition((int)static_QUType_int.get(_o+1)); break;
+00144     case 4: slotCondition1Selected((int)static_QUType_int.get(_o+1)); break;
+00145     case 5: slotCondition2Selected((int)static_QUType_int.get(_o+1)); break;
+00146     case 6: slotMatch1Changed((const QString&)static_QUType_QString.get(_o+1)); break;
+00147     case 7: slotMatch2Changed((const QString&)static_QUType_QString.get(_o+1)); break;
+00148     case 8: slotResetCounter(); break;
+00149     case 9: slotCounterChanged((int)static_QUType_int.get(_o+1)); break;
+00150     case 10: slotEditRegExp1(); break;
+00151     case 11: slotEditRegExp2(); break;
+00152     case 12: slotToggleRegExp1((bool)static_QUType_bool.get(_o+1)); break;
+00153     case 13: slotToggleRegExp2((bool)static_QUType_bool.get(_o+1)); break;
+00154     case 14: languageChange(); break;
+00155     default:
+00156        return QDialog::qt_invoke( _id, _o );
+00157     }
+00158     return TRUE;
+00159 }
+00160 
+00161 bool FilterEntryDlg::qt_emit( int _id, QUObject* _o )
+00162 {
+00163     return QDialog::qt_emit(_id,_o);
+00164 }
+00165 #ifndef QT_NO_PROPERTIES
+00166 
+00167 bool FilterEntryDlg::qt_property( int id, int f, QVariant* v)
+00168 {
+00169     return QDialog::qt_property( id, f, v);
+00170 }
+00171 
+00172 bool FilterEntryDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00173 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/OptionDlg_8cpp-source.html b/doc/html/OptionDlg_8cpp-source.html new file mode 100644 index 0000000..116e509 --- /dev/null +++ b/doc/html/OptionDlg_8cpp-source.html @@ -0,0 +1,579 @@ + + +kshowmail: kshowmail/OptionDlg.cpp Source File + + + + + + +

OptionDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/OptionDlg.ui'
+00005 **
+00006 ** Created: Di Mai 15 19:57:54 2007
+00007 **      by: The User Interface Compiler ($Id: OptionDlg_8cpp-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "OptionDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qgroupbox.h>
+00017 #include <qlabel.h>
+00018 #include <qcombobox.h>
+00019 #include <qtabwidget.h>
+00020 #include <qwidget.h>
+00021 #include <qcheckbox.h>
+00022 #include <qspinbox.h>
+00023 #include <qlineedit.h>
+00024 #include <qlayout.h>
+00025 #include <qtooltip.h>
+00026 #include <qwhatsthis.h>
+00027 
+00028 /*
+00029  *  Constructs a OptionDlg as a child of 'parent', with the
+00030  *  name 'name' and widget flags set to 'f'.
+00031  *
+00032  *  The dialog will by default be modeless, unless you set 'modal' to
+00033  *  TRUE to construct a modal dialog.
+00034  */
+00035 OptionDlg::OptionDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00036     : QDialog( parent, name, modal, fl )
+00037 {
+00038     if ( !name )
+00039        setName( "OptionDlg" );
+00040     setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, sizePolicy().hasHeightForWidth() ) );
+00041     setSizeGripEnabled( FALSE );
+00042     OptionDlgLayout = new QVBoxLayout( this, 11, 6, "OptionDlgLayout"); 
+00043 
+00044     QGroupBox_1 = new QGroupBox( this, "QGroupBox_1" );
+00045     QGroupBox_1->setMinimumSize( QSize( 380, 130 ) );
+00046     QGroupBox_1->setColumnLayout(0, Qt::Vertical );
+00047     QGroupBox_1->layout()->setSpacing( 6 );
+00048     QGroupBox_1->layout()->setMargin( 11 );
+00049     QGroupBox_1Layout = new QGridLayout( QGroupBox_1->layout() );
+00050     QGroupBox_1Layout->setAlignment( Qt::AlignTop );
+00051 
+00052     QLabel_1 = new QLabel( QGroupBox_1, "QLabel_1" );
+00053 
+00054     QGroupBox_1Layout->addWidget( QLabel_1, 0, 0 );
+00055     spacer4 = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00056     QGroupBox_1Layout->addItem( spacer4, 1, 4 );
+00057 
+00058     m_ButtonDelete = new QPushButton( QGroupBox_1, "m_ButtonDelete" );
+00059 
+00060     QGroupBox_1Layout->addWidget( m_ButtonDelete, 1, 3 );
+00061 
+00062     m_ButtonCopy = new QPushButton( QGroupBox_1, "m_ButtonCopy" );
+00063 
+00064     QGroupBox_1Layout->addWidget( m_ButtonCopy, 1, 2 );
+00065 
+00066     m_ButtonEdit = new QPushButton( QGroupBox_1, "m_ButtonEdit" );
+00067 
+00068     QGroupBox_1Layout->addWidget( m_ButtonEdit, 1, 1 );
+00069 
+00070     m_ButtonAdd = new QPushButton( QGroupBox_1, "m_ButtonAdd" );
+00071 
+00072     QGroupBox_1Layout->addWidget( m_ButtonAdd, 1, 0 );
+00073 
+00074     m_ComboAccount = new QComboBox( FALSE, QGroupBox_1, "m_ComboAccount" );
+00075     m_ComboAccount->setFocusPolicy( QComboBox::TabFocus );
+00076     m_ComboAccount->setInsertionPolicy( QComboBox::AtTop );
+00077 
+00078     QGroupBox_1Layout->addMultiCellWidget( m_ComboAccount, 0, 0, 1, 3 );
+00079     spacer2 = new QSpacerItem( 360, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00080     QGroupBox_1Layout->addItem( spacer2, 0, 4 );
+00081     OptionDlgLayout->addWidget( QGroupBox_1 );
+00082 
+00083     layout3 = new QVBoxLayout( 0, 0, 6, "layout3"); 
+00084 
+00085     TabWidget2 = new QTabWidget( this, "TabWidget2" );
+00086     TabWidget2->setMinimumSize( QSize( 380, 209 ) );
+00087 
+00088     tab = new QWidget( TabWidget2, "tab" );
+00089     tabLayout = new QGridLayout( tab, 1, 1, 11, 6, "tabLayout"); 
+00090 
+00091     m_CheckSavePassword = new QCheckBox( tab, "m_CheckSavePassword" );
+00092 
+00093     tabLayout->addMultiCellWidget( m_CheckSavePassword, 0, 0, 0, 1 );
+00094 
+00095     m_CheckStartMinimized = new QCheckBox( tab, "m_CheckStartMinimized" );
+00096 
+00097     tabLayout->addMultiCellWidget( m_CheckStartMinimized, 0, 0, 2, 3 );
+00098 
+00099     m_CheckConfirmDelete = new QCheckBox( tab, "m_CheckConfirmDelete" );
+00100 
+00101     tabLayout->addMultiCellWidget( m_CheckConfirmDelete, 1, 1, 0, 1 );
+00102 
+00103     QLabel_2 = new QLabel( tab, "QLabel_2" );
+00104 
+00105     tabLayout->addWidget( QLabel_2, 3, 0 );
+00106 
+00107     QLabel_3 = new QLabel( tab, "QLabel_3" );
+00108 
+00109     tabLayout->addWidget( QLabel_3, 3, 2 );
+00110 
+00111     QLabel_6 = new QLabel( tab, "QLabel_6" );
+00112 
+00113     tabLayout->addWidget( QLabel_6, 4, 0 );
+00114 
+00115     QLabel_4 = new QLabel( tab, "QLabel_4" );
+00116 
+00117     tabLayout->addWidget( QLabel_4, 4, 2 );
+00118 
+00119     m_SpinPop3Timer = new QSpinBox( tab, "m_SpinPop3Timer" );
+00120     m_SpinPop3Timer->setMouseTracking( FALSE );
+00121     m_SpinPop3Timer->setFocusPolicy( QSpinBox::StrongFocus );
+00122     m_SpinPop3Timer->setAcceptDrops( FALSE );
+00123     m_SpinPop3Timer->setMaxValue( 300 );
+00124 
+00125     tabLayout->addWidget( m_SpinPop3Timer, 4, 1 );
+00126 
+00127     m_SpinInitTimer = new QSpinBox( tab, "m_SpinInitTimer" );
+00128     m_SpinInitTimer->setFocusPolicy( QSpinBox::StrongFocus );
+00129     m_SpinInitTimer->setMaxValue( 120 );
+00130 
+00131     tabLayout->addWidget( m_SpinInitTimer, 3, 1 );
+00132 
+00133     m_SpinIntervalTimer = new QSpinBox( tab, "m_SpinIntervalTimer" );
+00134     m_SpinIntervalTimer->setFocusPolicy( QSpinBox::StrongFocus );
+00135     m_SpinIntervalTimer->setMaxValue( 1440 );
+00136 
+00137     tabLayout->addWidget( m_SpinIntervalTimer, 3, 3 );
+00138 
+00139     m_SpinMaxSize = new QSpinBox( tab, "m_SpinMaxSize" );
+00140     m_SpinMaxSize->setFocusPolicy( QSpinBox::StrongFocus );
+00141     m_SpinMaxSize->setMaxValue( 9999 );
+00142 
+00143     tabLayout->addWidget( m_SpinMaxSize, 4, 3 );
+00144 
+00145     _checkConfirmClose = new QCheckBox( tab, "_checkConfirmClose" );
+00146 
+00147     tabLayout->addWidget( _checkConfirmClose, 0, 4 );
+00148 
+00149     m_CheckKeepNewMail = new QCheckBox( tab, "m_CheckKeepNewMail" );
+00150 
+00151     tabLayout->addMultiCellWidget( m_CheckKeepNewMail, 1, 1, 2, 3 );
+00152 
+00153     m_CheckCloseMinimizes = new QCheckBox( tab, "m_CheckCloseMinimizes" );
+00154 
+00155     tabLayout->addWidget( m_CheckCloseMinimizes, 1, 4 );
+00156 
+00157     m_CheckMinimizeToTray = new QCheckBox( tab, "m_CheckMinimizeToTray" );
+00158 
+00159     tabLayout->addMultiCellWidget( m_CheckMinimizeToTray, 2, 2, 0, 1 );
+00160     TabWidget2->insertTab( tab, QString::fromLatin1("") );
+00161 
+00162     tab_2 = new QWidget( TabWidget2, "tab_2" );
+00163     tabLayout_2 = new QHBoxLayout( tab_2, 11, 6, "tabLayout_2"); 
+00164 
+00165     GroupBox3 = new QGroupBox( tab_2, "GroupBox3" );
+00166     GroupBox3->setColumnLayout(0, Qt::Vertical );
+00167     GroupBox3->layout()->setSpacing( 6 );
+00168     GroupBox3->layout()->setMargin( 11 );
+00169     GroupBox3Layout = new QVBoxLayout( GroupBox3->layout() );
+00170     GroupBox3Layout->setAlignment( Qt::AlignTop );
+00171 
+00172     m_CheckActive = new QCheckBox( GroupBox3, "m_CheckActive" );
+00173     m_CheckActive->setChecked( TRUE );
+00174     GroupBox3Layout->addWidget( m_CheckActive );
+00175 
+00176     m_CheckAccount1 = new QCheckBox( GroupBox3, "m_CheckAccount1" );
+00177     m_CheckAccount1->setChecked( TRUE );
+00178     GroupBox3Layout->addWidget( m_CheckAccount1 );
+00179 
+00180     m_CheckServer = new QCheckBox( GroupBox3, "m_CheckServer" );
+00181     m_CheckServer->setChecked( TRUE );
+00182     GroupBox3Layout->addWidget( m_CheckServer );
+00183 
+00184     m_CheckUser = new QCheckBox( GroupBox3, "m_CheckUser" );
+00185     m_CheckUser->setChecked( TRUE );
+00186     GroupBox3Layout->addWidget( m_CheckUser );
+00187 
+00188     m_CheckMessages = new QCheckBox( GroupBox3, "m_CheckMessages" );
+00189     m_CheckMessages->setChecked( TRUE );
+00190     GroupBox3Layout->addWidget( m_CheckMessages );
+00191 
+00192     m_CheckSize1 = new QCheckBox( GroupBox3, "m_CheckSize1" );
+00193     m_CheckSize1->setChecked( TRUE );
+00194     GroupBox3Layout->addWidget( m_CheckSize1 );
+00195     tabLayout_2->addWidget( GroupBox3 );
+00196 
+00197     GroupBox2 = new QGroupBox( tab_2, "GroupBox2" );
+00198     GroupBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)7, 0, 0, GroupBox2->sizePolicy().hasHeightForWidth() ) );
+00199     GroupBox2->setColumnLayout(0, Qt::Vertical );
+00200     GroupBox2->layout()->setSpacing( 6 );
+00201     GroupBox2->layout()->setMargin( 11 );
+00202     GroupBox2Layout = new QVBoxLayout( GroupBox2->layout() );
+00203     GroupBox2Layout->setAlignment( Qt::AlignTop );
+00204 
+00205     m_CheckNumber = new QCheckBox( GroupBox2, "m_CheckNumber" );
+00206     m_CheckNumber->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckNumber->sizePolicy().hasHeightForWidth() ) );
+00207     m_CheckNumber->setChecked( TRUE );
+00208     GroupBox2Layout->addWidget( m_CheckNumber );
+00209 
+00210     m_CheckAccount2 = new QCheckBox( GroupBox2, "m_CheckAccount2" );
+00211     m_CheckAccount2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckAccount2->sizePolicy().hasHeightForWidth() ) );
+00212     m_CheckAccount2->setChecked( TRUE );
+00213     GroupBox2Layout->addWidget( m_CheckAccount2 );
+00214 
+00215     m_CheckFrom = new QCheckBox( GroupBox2, "m_CheckFrom" );
+00216     m_CheckFrom->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckFrom->sizePolicy().hasHeightForWidth() ) );
+00217     m_CheckFrom->setChecked( TRUE );
+00218     GroupBox2Layout->addWidget( m_CheckFrom );
+00219 
+00220     m_CheckTo = new QCheckBox( GroupBox2, "m_CheckTo" );
+00221     m_CheckTo->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckTo->sizePolicy().hasHeightForWidth() ) );
+00222     m_CheckTo->setChecked( TRUE );
+00223     GroupBox2Layout->addWidget( m_CheckTo );
+00224 
+00225     m_CheckSubject = new QCheckBox( GroupBox2, "m_CheckSubject" );
+00226     m_CheckSubject->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckSubject->sizePolicy().hasHeightForWidth() ) );
+00227     m_CheckSubject->setChecked( TRUE );
+00228     GroupBox2Layout->addWidget( m_CheckSubject );
+00229 
+00230     m_CheckDate = new QCheckBox( GroupBox2, "m_CheckDate" );
+00231     m_CheckDate->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckDate->sizePolicy().hasHeightForWidth() ) );
+00232     m_CheckDate->setChecked( TRUE );
+00233     GroupBox2Layout->addWidget( m_CheckDate );
+00234 
+00235     m_CheckSize2 = new QCheckBox( GroupBox2, "m_CheckSize2" );
+00236     m_CheckSize2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckSize2->sizePolicy().hasHeightForWidth() ) );
+00237     m_CheckSize2->setChecked( TRUE );
+00238     GroupBox2Layout->addWidget( m_CheckSize2 );
+00239 
+00240     m_CheckContent = new QCheckBox( GroupBox2, "m_CheckContent" );
+00241     m_CheckContent->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckContent->sizePolicy().hasHeightForWidth() ) );
+00242     m_CheckContent->setChecked( TRUE );
+00243     GroupBox2Layout->addWidget( m_CheckContent );
+00244 
+00245     m_CheckState = new QCheckBox( GroupBox2, "m_CheckState" );
+00246     m_CheckState->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, m_CheckState->sizePolicy().hasHeightForWidth() ) );
+00247     m_CheckState->setChecked( TRUE );
+00248     GroupBox2Layout->addWidget( m_CheckState );
+00249     tabLayout_2->addWidget( GroupBox2 );
+00250 
+00251     groupBox4 = new QGroupBox( tab_2, "groupBox4" );
+00252     groupBox4->setColumnLayout(0, Qt::Vertical );
+00253     groupBox4->layout()->setSpacing( 6 );
+00254     groupBox4->layout()->setMargin( 11 );
+00255     groupBox4Layout = new QVBoxLayout( groupBox4->layout() );
+00256     groupBox4Layout->setAlignment( Qt::AlignTop );
+00257 
+00258     m_checkHTML = new QCheckBox( groupBox4, "m_checkHTML" );
+00259     groupBox4Layout->addWidget( m_checkHTML );
+00260     tabLayout_2->addWidget( groupBox4 );
+00261     TabWidget2->insertTab( tab_2, QString::fromLatin1("") );
+00262 
+00263     tab_3 = new QWidget( TabWidget2, "tab_3" );
+00264     tabLayout_3 = new QVBoxLayout( tab_3, 11, 6, "tabLayout_3"); 
+00265 
+00266     m_CheckMinimizeNoMail = new QCheckBox( tab_3, "m_CheckMinimizeNoMail" );
+00267     tabLayout_3->addWidget( m_CheckMinimizeNoMail );
+00268 
+00269     m_CheckTerminateNoMail = new QCheckBox( tab_3, "m_CheckTerminateNoMail" );
+00270     tabLayout_3->addWidget( m_CheckTerminateNoMail );
+00271     TabWidget2->insertTab( tab_3, QString::fromLatin1("") );
+00272 
+00273     tab_4 = new QWidget( TabWidget2, "tab_4" );
+00274     tabLayout_4 = new QGridLayout( tab_4, 1, 1, 11, 6, "tabLayout_4"); 
+00275 
+00276     m_CheckBeep = new QCheckBox( tab_4, "m_CheckBeep" );
+00277 
+00278     tabLayout_4->addMultiCellWidget( m_CheckBeep, 0, 0, 2, 3 );
+00279 
+00280     m_CheckShowMainWindow = new QCheckBox( tab_4, "m_CheckShowMainWindow" );
+00281 
+00282     tabLayout_4->addMultiCellWidget( m_CheckShowMainWindow, 1, 1, 0, 1 );
+00283 
+00284     m_CheckSound = new QCheckBox( tab_4, "m_CheckSound" );
+00285 
+00286     tabLayout_4->addMultiCellWidget( m_CheckSound, 1, 1, 2, 3 );
+00287 
+00288     m_CheckExternalProg = new QCheckBox( tab_4, "m_CheckExternalProg" );
+00289 
+00290     tabLayout_4->addMultiCellWidget( m_CheckExternalProg, 2, 2, 0, 1 );
+00291 
+00292     m_ButtonSelectSoundFile = new QPushButton( tab_4, "m_ButtonSelectSoundFile" );
+00293 
+00294     tabLayout_4->addWidget( m_ButtonSelectSoundFile, 3, 0 );
+00295 
+00296     m_ButtonSoundTest = new QPushButton( tab_4, "m_ButtonSoundTest" );
+00297 
+00298     tabLayout_4->addWidget( m_ButtonSoundTest, 3, 3 );
+00299 
+00300     QLabel_5 = new QLabel( tab_4, "QLabel_5" );
+00301 
+00302     tabLayout_4->addWidget( QLabel_5, 4, 0 );
+00303 
+00304     m_ComboExternalProg = new QComboBox( FALSE, tab_4, "m_ComboExternalProg" );
+00305     m_ComboExternalProg->setInsertionPolicy( QComboBox::AtTop );
+00306 
+00307     tabLayout_4->addMultiCellWidget( m_ComboExternalProg, 4, 4, 1, 2 );
+00308 
+00309     m_ButtonExternalProgTest = new QPushButton( tab_4, "m_ButtonExternalProgTest" );
+00310 
+00311     tabLayout_4->addWidget( m_ButtonExternalProgTest, 4, 3 );
+00312 
+00313     m_EditSoundFile = new QLineEdit( tab_4, "m_EditSoundFile" );
+00314 
+00315     tabLayout_4->addMultiCellWidget( m_EditSoundFile, 3, 3, 1, 2 );
+00316 
+00317     m_CheckShowMessagebox = new QCheckBox( tab_4, "m_CheckShowMessagebox" );
+00318 
+00319     tabLayout_4->addMultiCellWidget( m_CheckShowMessagebox, 0, 0, 0, 1 );
+00320     TabWidget2->insertTab( tab_4, QString::fromLatin1("") );
+00321     layout3->addWidget( TabWidget2 );
+00322 
+00323     layout2 = new QHBoxLayout( 0, 0, 6, "layout2"); 
+00324     Spacer70 = new QSpacerItem( 477, 16, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00325     layout2->addItem( Spacer70 );
+00326 
+00327     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00328     layout2->addWidget( m_ButtonOk );
+00329 
+00330     m_ButtonCancel = new QPushButton( this, "m_ButtonCancel" );
+00331     layout2->addWidget( m_ButtonCancel );
+00332     layout3->addLayout( layout2 );
+00333     OptionDlgLayout->addLayout( layout3 );
+00334     languageChange();
+00335     resize( QSize(554, 566).expandedTo(minimumSizeHint()) );
+00336     clearWState( WState_Polished );
+00337 
+00338     // signals and slots connections
+00339     connect( m_ButtonEdit, SIGNAL( clicked() ), this, SLOT( slotButtonEditClicked() ) );
+00340     connect( m_ButtonCopy, SIGNAL( clicked() ), this, SLOT( slotButtonCopyClicked() ) );
+00341     connect( m_ButtonAdd, SIGNAL( clicked() ), this, SLOT( slotButtonAddClicked() ) );
+00342     connect( m_ButtonDelete, SIGNAL( clicked() ), this, SLOT( slotButtonDeleteClicked() ) );
+00343     connect( m_ButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00344     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+00345     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotButtonOkClicked() ) );
+00346     connect( m_CheckSound, SIGNAL( toggled(bool) ), m_ButtonSelectSoundFile, SLOT( setEnabled(bool) ) );
+00347     connect( m_CheckSound, SIGNAL( toggled(bool) ), m_EditSoundFile, SLOT( setEnabled(bool) ) );
+00348     connect( m_CheckSound, SIGNAL( toggled(bool) ), m_ButtonSoundTest, SLOT( setEnabled(bool) ) );
+00349     connect( m_CheckExternalProg, SIGNAL( toggled(bool) ), QLabel_5, SLOT( setEnabled(bool) ) );
+00350     connect( m_CheckExternalProg, SIGNAL( toggled(bool) ), m_ComboExternalProg, SLOT( setEnabled(bool) ) );
+00351     connect( m_CheckExternalProg, SIGNAL( toggled(bool) ), m_ButtonExternalProgTest, SLOT( setEnabled(bool) ) );
+00352     connect( m_ComboAccount, SIGNAL( activated(int) ), this, SLOT( slotAccountActivated(int) ) );
+00353     connect( m_CheckSavePassword, SIGNAL( clicked() ), this, SLOT( slotSavePasswordToggled() ) );
+00354     connect( m_ButtonSelectSoundFile, SIGNAL( clicked() ), this, SLOT( slotButtonSelectSoundFile() ) );
+00355     connect( m_CheckTerminateNoMail, SIGNAL( clicked() ), this, SLOT( slotTerminateNoMailClicked() ) );
+00356     connect( m_CheckMinimizeNoMail, SIGNAL( clicked() ), this, SLOT( slotMinimizeNoMailClicked() ) );
+00357     connect( m_ButtonSoundTest, SIGNAL( clicked() ), this, SLOT( slotSoundTest() ) );
+00358     connect( m_ButtonExternalProgTest, SIGNAL( clicked() ), this, SLOT( slotExternalProgTest() ) );
+00359 
+00360     // tab order
+00361     setTabOrder( m_ComboAccount, m_ButtonAdd );
+00362     setTabOrder( m_ButtonAdd, m_ButtonEdit );
+00363     setTabOrder( m_ButtonEdit, m_ButtonCopy );
+00364     setTabOrder( m_ButtonCopy, m_ButtonDelete );
+00365     setTabOrder( m_ButtonDelete, TabWidget2 );
+00366     setTabOrder( TabWidget2, m_CheckSavePassword );
+00367     setTabOrder( m_CheckSavePassword, m_CheckStartMinimized );
+00368     setTabOrder( m_CheckStartMinimized, m_CheckConfirmDelete );
+00369     setTabOrder( m_CheckConfirmDelete, m_CheckKeepNewMail );
+00370     setTabOrder( m_CheckKeepNewMail, m_SpinInitTimer );
+00371     setTabOrder( m_SpinInitTimer, m_SpinIntervalTimer );
+00372     setTabOrder( m_SpinIntervalTimer, m_SpinIntervalTimer );
+00373     setTabOrder( m_SpinIntervalTimer, m_SpinPop3Timer );
+00374     setTabOrder( m_SpinPop3Timer, m_SpinMaxSize );
+00375     setTabOrder( m_SpinMaxSize, m_CheckMinimizeNoMail );
+00376     setTabOrder( m_CheckMinimizeNoMail, m_CheckTerminateNoMail );
+00377     setTabOrder( m_CheckTerminateNoMail, m_CheckShowMessagebox );
+00378     setTabOrder( m_CheckShowMessagebox, m_CheckShowMainWindow );
+00379     setTabOrder( m_CheckShowMainWindow, m_CheckExternalProg );
+00380     setTabOrder( m_CheckExternalProg, m_CheckBeep );
+00381     setTabOrder( m_CheckBeep, m_CheckSound );
+00382     setTabOrder( m_CheckSound, m_ButtonSelectSoundFile );
+00383     setTabOrder( m_ButtonSelectSoundFile, m_EditSoundFile );
+00384     setTabOrder( m_EditSoundFile, m_ButtonSoundTest );
+00385     setTabOrder( m_ButtonSoundTest, m_ComboExternalProg );
+00386     setTabOrder( m_ComboExternalProg, m_ButtonExternalProgTest );
+00387     setTabOrder( m_ButtonExternalProgTest, m_ButtonOk );
+00388     setTabOrder( m_ButtonOk, m_ButtonCancel );
+00389 }
+00390 
+00391 /*
+00392  *  Destroys the object and frees any allocated resources
+00393  */
+00394 OptionDlg::~OptionDlg()
+00395 {
+00396     // no need to delete child widgets, Qt does it all for us
+00397 }
+00398 
+00399 /*
+00400  *  Sets the strings of the subwidgets using the current
+00401  *  language.
+00402  */
+00403 void OptionDlg::languageChange()
+00404 {
+00405     setCaption( tr2i18n( "Options" ) );
+00406     QGroupBox_1->setTitle( tr2i18n( "Accounts" ) );
+00407     QLabel_1->setText( tr2i18n( "Name:" ) );
+00408     QToolTip::add( QLabel_1, tr2i18n( "Select a pop3 account" ) );
+00409     m_ButtonDelete->setText( tr2i18n( "Delete" ) );
+00410     QToolTip::add( m_ButtonDelete, tr2i18n( "Delete account" ) );
+00411     m_ButtonCopy->setText( tr2i18n( "Cop&y" ) );
+00412     QToolTip::add( m_ButtonCopy, tr2i18n( "copy account" ) );
+00413     m_ButtonEdit->setText( tr2i18n( "Edit" ) );
+00414     QToolTip::add( m_ButtonEdit, tr2i18n( "Edit account" ) );
+00415     m_ButtonAdd->setText( tr2i18n( "&Add" ) );
+00416     QToolTip::add( m_ButtonAdd, tr2i18n( "Add new account" ) );
+00417     QToolTip::add( m_ComboAccount, tr2i18n( "Select a pop3 account" ) );
+00418     m_CheckSavePassword->setText( tr2i18n( "Save Password" ) );
+00419     QToolTip::add( m_CheckSavePassword, tr2i18n( "Save password (not recommended !)" ) );
+00420     m_CheckStartMinimized->setText( tr2i18n( "Start Minimi&zed" ) );
+00421     QToolTip::add( m_CheckStartMinimized, tr2i18n( "Application is started as icon" ) );
+00422     m_CheckConfirmDelete->setText( tr2i18n( "Confirm delete" ) );
+00423     QToolTip::add( m_CheckConfirmDelete, tr2i18n( "If checked, message delete must be confirmed" ) );
+00424     QLabel_2->setText( tr2i18n( "Initial Timer:" ) );
+00425     QToolTip::add( QLabel_2, tr2i18n( "Seconds until first automatic logon (0 = no automatic)" ) );
+00426     QLabel_3->setText( tr2i18n( "Interval Timer:" ) );
+00427     QToolTip::add( QLabel_3, tr2i18n( "Minutes between automatic logon (0 = no automatic)" ) );
+00428     QLabel_6->setText( tr2i18n( "Pop3 Timer" ) );
+00429     QToolTip::add( QLabel_6, tr2i18n( "Pop3 timeout" ) );
+00430     QLabel_4->setText( tr2i18n( "Max Size:" ) );
+00431     QToolTip::add( QLabel_4, tr2i18n( "Maximal size of downloaded mail body in kilobytes" ) );
+00432     QToolTip::add( m_SpinPop3Timer, tr2i18n( "Pop3 timeout" ) );
+00433     QToolTip::add( m_SpinInitTimer, tr2i18n( "Seconds until first automatic logon (0 = no automatic)" ) );
+00434     QToolTip::add( m_SpinIntervalTimer, tr2i18n( "Minutes between automatic logon (0 = no automatic)" ) );
+00435     QToolTip::add( m_SpinMaxSize, tr2i18n( "Maximal size of downloaded mail body in kilobytes" ) );
+00436     _checkConfirmClose->setText( tr2i18n( "Confirm Close" ) );
+00437     m_CheckKeepNewMail->setText( tr2i18n( "&Keep mail as new" ) );
+00438     m_CheckKeepNewMail->setAccel( QKeySequence( tr2i18n( "Alt+K" ) ) );
+00439     QToolTip::add( m_CheckKeepNewMail, tr2i18n( "Keep mail as new until termination" ) );
+00440     m_CheckCloseMinimizes->setText( tr2i18n( "Close to tray" ) );
+00441     m_CheckCloseMinimizes->setAccel( QKeySequence( QString::null ) );
+00442     QToolTip::add( m_CheckCloseMinimizes, tr2i18n( "Close button leaves the application running in tray" ) );
+00443     m_CheckMinimizeToTray->setText( tr2i18n( "Minimize to tray" ) );
+00444     m_CheckMinimizeToTray->setAccel( QKeySequence( QString::null ) );
+00445     QToolTip::add( m_CheckMinimizeToTray, tr2i18n( "Minimizes to the tray rather than to the taskbar" ) );
+00446     TabWidget2->changeTab( tab, tr2i18n( "&General Options" ) );
+00447     GroupBox3->setTitle( tr2i18n( "Account list" ) );
+00448     m_CheckActive->setText( tr2i18n( "Active" ) );
+00449     m_CheckAccount1->setText( tr2i18n( "Account" ) );
+00450     m_CheckServer->setText( tr2i18n( "Server" ) );
+00451     m_CheckUser->setText( tr2i18n( "User" ) );
+00452     m_CheckMessages->setText( tr2i18n( "Messages" ) );
+00453     m_CheckSize1->setText( tr2i18n( "Si&ze" ) );
+00454     GroupBox2->setTitle( tr2i18n( "Mail list" ) );
+00455     m_CheckNumber->setText( tr2i18n( "Number" ) );
+00456     m_CheckAccount2->setText( tr2i18n( "Account" ) );
+00457     m_CheckFrom->setText( tr2i18n( "From" ) );
+00458     m_CheckTo->setText( tr2i18n( "To" ) );
+00459     m_CheckSubject->setText( tr2i18n( "Su&bject" ) );
+00460     m_CheckDate->setText( tr2i18n( "Date" ) );
+00461     m_CheckSize2->setText( tr2i18n( "Size" ) );
+00462     m_CheckContent->setText( tr2i18n( "Content" ) );
+00463     m_CheckState->setText( tr2i18n( "State" ) );
+00464     groupBox4->setTitle( tr2i18n( "Mail content" ) );
+00465     m_checkHTML->setText( tr2i18n( "Allow HTML" ) );
+00466     TabWidget2->changeTab( tab_2, tr2i18n( "Display Options" ) );
+00467     m_CheckMinimizeNoMail->setText( tr2i18n( "Minimi&ze" ) );
+00468     QToolTip::add( m_CheckMinimizeNoMail, tr2i18n( "Minimize window if no new mail" ) );
+00469     m_CheckTerminateNoMail->setText( tr2i18n( "Terminate" ) );
+00470     QToolTip::add( m_CheckTerminateNoMail, tr2i18n( "Terminate kshowmail if no new mail" ) );
+00471     TabWidget2->changeTab( tab_3, tr2i18n( "Action if &no mail" ) );
+00472     m_CheckBeep->setText( tr2i18n( "&Beep" ) );
+00473     QToolTip::add( m_CheckBeep, tr2i18n( "Beeps the internal speaker if new mail" ) );
+00474     m_CheckShowMainWindow->setText( tr2i18n( "Show main window" ) );
+00475     QToolTip::add( m_CheckShowMainWindow, tr2i18n( "Show main window if new mail arrives" ) );
+00476     m_CheckSound->setText( tr2i18n( "Sound" ) );
+00477     QToolTip::add( m_CheckSound, tr2i18n( "Plays sound if new mail" ) );
+00478     m_CheckExternalProg->setText( tr2i18n( "E&xternal Program" ) );
+00479     QToolTip::add( m_CheckExternalProg, tr2i18n( "Starts external program if new mail" ) );
+00480     m_ButtonSelectSoundFile->setText( tr2i18n( "Sound File:" ) );
+00481     QToolTip::add( m_ButtonSelectSoundFile, tr2i18n( "Press to select sound file" ) );
+00482     m_ButtonSoundTest->setText( tr2i18n( "Test" ) );
+00483     QToolTip::add( m_ButtonSoundTest, tr2i18n( "Play the selected sound file" ) );
+00484     QLabel_5->setText( tr2i18n( "Command:" ) );
+00485     QToolTip::add( QLabel_5, tr2i18n( "Select external command" ) );
+00486     QToolTip::add( m_ComboExternalProg, tr2i18n( "Select external command" ) );
+00487     m_ButtonExternalProgTest->setText( tr2i18n( "Test" ) );
+00488     QToolTip::add( m_ButtonExternalProgTest, tr2i18n( "Start the selected program" ) );
+00489     QToolTip::add( m_EditSoundFile, tr2i18n( "Enter sound file" ) );
+00490     m_CheckShowMessagebox->setText( tr2i18n( "Show message box" ) );
+00491     QToolTip::add( m_CheckShowMessagebox, tr2i18n( "Show message if new mail arrives" ) );
+00492     TabWidget2->changeTab( tab_4, tr2i18n( "Action if new &mail" ) );
+00493     m_ButtonOk->setText( tr2i18n( "&OK" ) );
+00494     m_ButtonCancel->setText( tr2i18n( "Cancel" ) );
+00495 }
+00496 
+00497 void OptionDlg::slotExternalProgTest()
+00498 {
+00499     qWarning( "OptionDlg::slotExternalProgTest(): Not implemented yet" );
+00500 }
+00501 
+00502 void OptionDlg::slotAccountActivated(int)
+00503 {
+00504     qWarning( "OptionDlg::slotAccountActivated(int): Not implemented yet" );
+00505 }
+00506 
+00507 void OptionDlg::slotButtonAddClicked()
+00508 {
+00509     qWarning( "OptionDlg::slotButtonAddClicked(): Not implemented yet" );
+00510 }
+00511 
+00512 void OptionDlg::slotButtonCopyClicked()
+00513 {
+00514     qWarning( "OptionDlg::slotButtonCopyClicked(): Not implemented yet" );
+00515 }
+00516 
+00517 void OptionDlg::slotButtonDeleteClicked()
+00518 {
+00519     qWarning( "OptionDlg::slotButtonDeleteClicked(): Not implemented yet" );
+00520 }
+00521 
+00522 void OptionDlg::slotButtonEditClicked()
+00523 {
+00524     qWarning( "OptionDlg::slotButtonEditClicked(): Not implemented yet" );
+00525 }
+00526 
+00527 void OptionDlg::slotButtonOkClicked()
+00528 {
+00529     qWarning( "OptionDlg::slotButtonOkClicked(): Not implemented yet" );
+00530 }
+00531 
+00532 void OptionDlg::slotButtonSelectSoundFile()
+00533 {
+00534     qWarning( "OptionDlg::slotButtonSelectSoundFile(): Not implemented yet" );
+00535 }
+00536 
+00537 void OptionDlg::slotMinimizeNoMailClicked()
+00538 {
+00539     qWarning( "OptionDlg::slotMinimizeNoMailClicked(): Not implemented yet" );
+00540 }
+00541 
+00542 void OptionDlg::slotSavePasswordToggled()
+00543 {
+00544     qWarning( "OptionDlg::slotSavePasswordToggled(): Not implemented yet" );
+00545 }
+00546 
+00547 void OptionDlg::slotSoundTest()
+00548 {
+00549     qWarning( "OptionDlg::slotSoundTest(): Not implemented yet" );
+00550 }
+00551 
+00552 void OptionDlg::slotTerminateNoMailClicked()
+00553 {
+00554     qWarning( "OptionDlg::slotTerminateNoMailClicked(): Not implemented yet" );
+00555 }
+00556 
+00557 #include "OptionDlg.moc"
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/OptionDlg_8h-source.html b/doc/html/OptionDlg_8h-source.html new file mode 100644 index 0000000..45d75fb --- /dev/null +++ b/doc/html/OptionDlg_8h-source.html @@ -0,0 +1,157 @@ + + +kshowmail: kshowmail/OptionDlg.h Source File + + + + + + +

OptionDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/OptionDlg.ui'
+00003 **
+00004 ** Created: Di Mai 15 19:57:53 2007
+00005 **      by: The User Interface Compiler ($Id: OptionDlg_8h-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef OPTIONDLG_H
+00011 #define OPTIONDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 
+00016 class QVBoxLayout;
+00017 class QHBoxLayout;
+00018 class QGridLayout;
+00019 class QSpacerItem;
+00020 class QGroupBox;
+00021 class QLabel;
+00022 class QPushButton;
+00023 class QComboBox;
+00024 class QTabWidget;
+00025 class QWidget;
+00026 class QCheckBox;
+00027 class QSpinBox;
+00028 class QLineEdit;
+00029 
+00030 class OptionDlg : public QDialog
+00031 {
+00032     Q_OBJECT
+00033 
+00034 public:
+00035     OptionDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00036     ~OptionDlg();
+00037 
+00038     QGroupBox* QGroupBox_1;
+00039     QLabel* QLabel_1;
+00040     QPushButton* m_ButtonDelete;
+00041     QPushButton* m_ButtonCopy;
+00042     QPushButton* m_ButtonEdit;
+00043     QPushButton* m_ButtonAdd;
+00044     QComboBox* m_ComboAccount;
+00045     QTabWidget* TabWidget2;
+00046     QWidget* tab;
+00047     QCheckBox* m_CheckSavePassword;
+00048     QCheckBox* m_CheckStartMinimized;
+00049     QCheckBox* m_CheckConfirmDelete;
+00050     QLabel* QLabel_2;
+00051     QLabel* QLabel_3;
+00052     QLabel* QLabel_6;
+00053     QLabel* QLabel_4;
+00054     QSpinBox* m_SpinPop3Timer;
+00055     QSpinBox* m_SpinInitTimer;
+00056     QSpinBox* m_SpinIntervalTimer;
+00057     QSpinBox* m_SpinMaxSize;
+00058     QCheckBox* _checkConfirmClose;
+00059     QCheckBox* m_CheckKeepNewMail;
+00060     QCheckBox* m_CheckCloseMinimizes;
+00061     QCheckBox* m_CheckMinimizeToTray;
+00062     QWidget* tab_2;
+00063     QGroupBox* GroupBox3;
+00064     QCheckBox* m_CheckActive;
+00065     QCheckBox* m_CheckAccount1;
+00066     QCheckBox* m_CheckServer;
+00067     QCheckBox* m_CheckUser;
+00068     QCheckBox* m_CheckMessages;
+00069     QCheckBox* m_CheckSize1;
+00070     QGroupBox* GroupBox2;
+00071     QCheckBox* m_CheckNumber;
+00072     QCheckBox* m_CheckAccount2;
+00073     QCheckBox* m_CheckFrom;
+00074     QCheckBox* m_CheckTo;
+00075     QCheckBox* m_CheckSubject;
+00076     QCheckBox* m_CheckDate;
+00077     QCheckBox* m_CheckSize2;
+00078     QCheckBox* m_CheckContent;
+00079     QCheckBox* m_CheckState;
+00080     QGroupBox* groupBox4;
+00081     QCheckBox* m_checkHTML;
+00082     QWidget* tab_3;
+00083     QCheckBox* m_CheckMinimizeNoMail;
+00084     QCheckBox* m_CheckTerminateNoMail;
+00085     QWidget* tab_4;
+00086     QCheckBox* m_CheckBeep;
+00087     QCheckBox* m_CheckShowMainWindow;
+00088     QCheckBox* m_CheckSound;
+00089     QCheckBox* m_CheckExternalProg;
+00090     QPushButton* m_ButtonSelectSoundFile;
+00091     QPushButton* m_ButtonSoundTest;
+00092     QLabel* QLabel_5;
+00093     QComboBox* m_ComboExternalProg;
+00094     QPushButton* m_ButtonExternalProgTest;
+00095     QLineEdit* m_EditSoundFile;
+00096     QCheckBox* m_CheckShowMessagebox;
+00097     QPushButton* m_ButtonOk;
+00098     QPushButton* m_ButtonCancel;
+00099 
+00100 public slots:
+00101     virtual void slotExternalProgTest();
+00102     virtual void slotAccountActivated(int);
+00103     virtual void slotButtonAddClicked();
+00104     virtual void slotButtonCopyClicked();
+00105     virtual void slotButtonDeleteClicked();
+00106     virtual void slotButtonEditClicked();
+00107     virtual void slotButtonOkClicked();
+00108     virtual void slotButtonSelectSoundFile();
+00109     virtual void slotMinimizeNoMailClicked();
+00110     virtual void slotSavePasswordToggled();
+00111     virtual void slotSoundTest();
+00112     virtual void slotTerminateNoMailClicked();
+00113 
+00114 protected:
+00115     QVBoxLayout* OptionDlgLayout;
+00116     QGridLayout* QGroupBox_1Layout;
+00117     QSpacerItem* spacer4;
+00118     QSpacerItem* spacer2;
+00119     QVBoxLayout* layout3;
+00120     QGridLayout* tabLayout;
+00121     QHBoxLayout* tabLayout_2;
+00122     QVBoxLayout* GroupBox3Layout;
+00123     QVBoxLayout* GroupBox2Layout;
+00124     QVBoxLayout* groupBox4Layout;
+00125     QVBoxLayout* tabLayout_3;
+00126     QGridLayout* tabLayout_4;
+00127     QHBoxLayout* layout2;
+00128     QSpacerItem* Spacer70;
+00129 
+00130 protected slots:
+00131     virtual void languageChange();
+00132 
+00133 };
+00134 
+00135 #endif // OPTIONDLG_H
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/OptionDlg_8moc-source.html b/doc/html/OptionDlg_8moc-source.html new file mode 100644 index 0000000..4dca8cb --- /dev/null +++ b/doc/html/OptionDlg_8moc-source.html @@ -0,0 +1,162 @@ + + +kshowmail: kshowmail/OptionDlg.moc Source File + + + + + + +

OptionDlg.moc

00001 /****************************************************************************
+00002 ** OptionDlg meta object code from reading C++ file 'OptionDlg.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:54 2007
+00005 **      by: The Qt MOC ($Id: OptionDlg_8moc-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "OptionDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *OptionDlg::className() const
+00023 {
+00024     return "OptionDlg";
+00025 }
+00026 
+00027 QMetaObject *OptionDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_OptionDlg( "OptionDlg", &OptionDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString OptionDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "OptionDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString OptionDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "OptionDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* OptionDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotExternalProgTest", 0, 0 };
+00056     static const QUParameter param_slot_1[] = {
+00057        { 0, &static_QUType_int, 0, QUParameter::In }
+00058     };
+00059     static const QUMethod slot_1 = {"slotAccountActivated", 1, param_slot_1 };
+00060     static const QUMethod slot_2 = {"slotButtonAddClicked", 0, 0 };
+00061     static const QUMethod slot_3 = {"slotButtonCopyClicked", 0, 0 };
+00062     static const QUMethod slot_4 = {"slotButtonDeleteClicked", 0, 0 };
+00063     static const QUMethod slot_5 = {"slotButtonEditClicked", 0, 0 };
+00064     static const QUMethod slot_6 = {"slotButtonOkClicked", 0, 0 };
+00065     static const QUMethod slot_7 = {"slotButtonSelectSoundFile", 0, 0 };
+00066     static const QUMethod slot_8 = {"slotMinimizeNoMailClicked", 0, 0 };
+00067     static const QUMethod slot_9 = {"slotSavePasswordToggled", 0, 0 };
+00068     static const QUMethod slot_10 = {"slotSoundTest", 0, 0 };
+00069     static const QUMethod slot_11 = {"slotTerminateNoMailClicked", 0, 0 };
+00070     static const QUMethod slot_12 = {"languageChange", 0, 0 };
+00071     static const QMetaData slot_tbl[] = {
+00072        { "slotExternalProgTest()", &slot_0, QMetaData::Public },
+00073        { "slotAccountActivated(int)", &slot_1, QMetaData::Public },
+00074        { "slotButtonAddClicked()", &slot_2, QMetaData::Public },
+00075        { "slotButtonCopyClicked()", &slot_3, QMetaData::Public },
+00076        { "slotButtonDeleteClicked()", &slot_4, QMetaData::Public },
+00077        { "slotButtonEditClicked()", &slot_5, QMetaData::Public },
+00078        { "slotButtonOkClicked()", &slot_6, QMetaData::Public },
+00079        { "slotButtonSelectSoundFile()", &slot_7, QMetaData::Public },
+00080        { "slotMinimizeNoMailClicked()", &slot_8, QMetaData::Public },
+00081        { "slotSavePasswordToggled()", &slot_9, QMetaData::Public },
+00082        { "slotSoundTest()", &slot_10, QMetaData::Public },
+00083        { "slotTerminateNoMailClicked()", &slot_11, QMetaData::Public },
+00084        { "languageChange()", &slot_12, QMetaData::Protected }
+00085     };
+00086     metaObj = QMetaObject::new_metaobject(
+00087        "OptionDlg", parentObject,
+00088        slot_tbl, 13,
+00089        0, 0,
+00090 #ifndef QT_NO_PROPERTIES
+00091        0, 0,
+00092        0, 0,
+00093 #endif // QT_NO_PROPERTIES
+00094        0, 0 );
+00095     cleanUp_OptionDlg.setMetaObject( metaObj );
+00096     return metaObj;
+00097 }
+00098 
+00099 void* OptionDlg::qt_cast( const char* clname )
+00100 {
+00101     if ( !qstrcmp( clname, "OptionDlg" ) )
+00102        return this;
+00103     return QDialog::qt_cast( clname );
+00104 }
+00105 
+00106 bool OptionDlg::qt_invoke( int _id, QUObject* _o )
+00107 {
+00108     switch ( _id - staticMetaObject()->slotOffset() ) {
+00109     case 0: slotExternalProgTest(); break;
+00110     case 1: slotAccountActivated((int)static_QUType_int.get(_o+1)); break;
+00111     case 2: slotButtonAddClicked(); break;
+00112     case 3: slotButtonCopyClicked(); break;
+00113     case 4: slotButtonDeleteClicked(); break;
+00114     case 5: slotButtonEditClicked(); break;
+00115     case 6: slotButtonOkClicked(); break;
+00116     case 7: slotButtonSelectSoundFile(); break;
+00117     case 8: slotMinimizeNoMailClicked(); break;
+00118     case 9: slotSavePasswordToggled(); break;
+00119     case 10: slotSoundTest(); break;
+00120     case 11: slotTerminateNoMailClicked(); break;
+00121     case 12: languageChange(); break;
+00122     default:
+00123        return QDialog::qt_invoke( _id, _o );
+00124     }
+00125     return TRUE;
+00126 }
+00127 
+00128 bool OptionDlg::qt_emit( int _id, QUObject* _o )
+00129 {
+00130     return QDialog::qt_emit(_id,_o);
+00131 }
+00132 #ifndef QT_NO_PROPERTIES
+00133 
+00134 bool OptionDlg::qt_property( int id, int f, QVariant* v)
+00135 {
+00136     return QDialog::qt_property( id, f, v);
+00137 }
+00138 
+00139 bool OptionDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00140 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/ServerDlg_8cpp-source.html b/doc/html/ServerDlg_8cpp-source.html new file mode 100644 index 0000000..5fbabab --- /dev/null +++ b/doc/html/ServerDlg_8cpp-source.html @@ -0,0 +1,204 @@ + + +kshowmail: kshowmail/ServerDlg.cpp Source File + + + + + + +

ServerDlg.cpp

00001 #include <kdialog.h>
+00002 #include <klocale.h>
+00003 /****************************************************************************
+00004 ** Form implementation generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/ServerDlg.ui'
+00005 **
+00006 ** Created: Di Mai 15 19:57:54 2007
+00007 **      by: The User Interface Compiler ($Id: ServerDlg_8cpp-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00008 **
+00009 ** WARNING! All changes made in this file will be lost!
+00010 ****************************************************************************/
+00011 
+00012 #include "ServerDlg.h"
+00013 
+00014 #include <qvariant.h>
+00015 #include <qpushbutton.h>
+00016 #include <qlabel.h>
+00017 #include <qlineedit.h>
+00018 #include <qcheckbox.h>
+00019 #include <qcombobox.h>
+00020 #include <qspinbox.h>
+00021 #include <qlayout.h>
+00022 #include <qtooltip.h>
+00023 #include <qwhatsthis.h>
+00024 
+00025 /*
+00026  *  Constructs a ServerDlg as a child of 'parent', with the
+00027  *  name 'name' and widget flags set to 'f'.
+00028  *
+00029  *  The dialog will by default be modeless, unless you set 'modal' to
+00030  *  TRUE to construct a modal dialog.
+00031  */
+00032 ServerDlg::ServerDlg( QWidget* parent, const char* name, bool modal, WFlags fl )
+00033     : QDialog( parent, name, modal, fl )
+00034 {
+00035     if ( !name )
+00036        setName( "ServerDlg" );
+00037     setSizeGripEnabled( FALSE );
+00038     ServerDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "ServerDlgLayout"); 
+00039 
+00040     QLabel_4 = new QLabel( this, "QLabel_4" );
+00041     QLabel_4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_4->sizePolicy().hasHeightForWidth() ) );
+00042 
+00043     ServerDlgLayout->addWidget( QLabel_4, 5, 0 );
+00044 
+00045     m_EditAccount = new QLineEdit( this, "m_EditAccount" );
+00046     m_EditAccount->setFocusPolicy( QLineEdit::StrongFocus );
+00047 
+00048     ServerDlgLayout->addWidget( m_EditAccount, 0, 1 );
+00049 
+00050     m_EditServer = new QLineEdit( this, "m_EditServer" );
+00051     m_EditServer->setFocusPolicy( QLineEdit::StrongFocus );
+00052 
+00053     ServerDlgLayout->addWidget( m_EditServer, 1, 1 );
+00054 
+00055     QLabel_3 = new QLabel( this, "QLabel_3" );
+00056     QLabel_3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_3->sizePolicy().hasHeightForWidth() ) );
+00057 
+00058     ServerDlgLayout->addWidget( QLabel_3, 4, 0 );
+00059 
+00060     CheckActive = new QCheckBox( this, "CheckActive" );
+00061 
+00062     ServerDlgLayout->addWidget( CheckActive, 6, 1 );
+00063 
+00064     Layout13 = new QHBoxLayout( 0, 0, 6, "Layout13"); 
+00065 
+00066     m_ButtonOk = new QPushButton( this, "m_ButtonOk" );
+00067     m_ButtonOk->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_ButtonOk->sizePolicy().hasHeightForWidth() ) );
+00068     Layout13->addWidget( m_ButtonOk );
+00069     Spacer1 = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00070     Layout13->addItem( Spacer1 );
+00071 
+00072     m_ButtonCancel = new QPushButton( this, "m_ButtonCancel" );
+00073     m_ButtonCancel->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_ButtonCancel->sizePolicy().hasHeightForWidth() ) );
+00074     Layout13->addWidget( m_ButtonCancel );
+00075 
+00076     ServerDlgLayout->addMultiCellLayout( Layout13, 7, 7, 0, 1 );
+00077 
+00078     QLabel_1 = new QLabel( this, "QLabel_1" );
+00079     QLabel_1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_1->sizePolicy().hasHeightForWidth() ) );
+00080 
+00081     ServerDlgLayout->addWidget( QLabel_1, 0, 0 );
+00082 
+00083     QLabel_2 = new QLabel( this, "QLabel_2" );
+00084     QLabel_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_2->sizePolicy().hasHeightForWidth() ) );
+00085 
+00086     ServerDlgLayout->addWidget( QLabel_2, 1, 0 );
+00087 
+00088     QLabel_5 = new QLabel( this, "QLabel_5" );
+00089     QLabel_5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_5->sizePolicy().hasHeightForWidth() ) );
+00090 
+00091     ServerDlgLayout->addWidget( QLabel_5, 2, 0 );
+00092 
+00093     QLabel_6 = new QLabel( this, "QLabel_6" );
+00094     QLabel_6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, QLabel_6->sizePolicy().hasHeightForWidth() ) );
+00095 
+00096     ServerDlgLayout->addWidget( QLabel_6, 3, 0 );
+00097 
+00098     Layout15 = new QHBoxLayout( 0, 0, 6, "Layout15"); 
+00099 
+00100     m_ComboProtocol = new QComboBox( FALSE, this, "m_ComboProtocol" );
+00101     m_ComboProtocol->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_ComboProtocol->sizePolicy().hasHeightForWidth() ) );
+00102     m_ComboProtocol->setFocusPolicy( QComboBox::ClickFocus );
+00103     m_ComboProtocol->setInsertionPolicy( QComboBox::AtTop );
+00104     Layout15->addWidget( m_ComboProtocol );
+00105     Spacer11 = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00106     Layout15->addItem( Spacer11 );
+00107 
+00108     ServerDlgLayout->addLayout( Layout15, 2, 1 );
+00109 
+00110     Layout14 = new QHBoxLayout( 0, 0, 6, "Layout14"); 
+00111 
+00112     m_SpinPort = new QSpinBox( this, "m_SpinPort" );
+00113     m_SpinPort->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, m_SpinPort->sizePolicy().hasHeightForWidth() ) );
+00114     m_SpinPort->setFocusPolicy( QSpinBox::ClickFocus );
+00115     m_SpinPort->setMaxValue( 9999 );
+00116     Layout14->addWidget( m_SpinPort );
+00117     Spacer10 = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum );
+00118     Layout14->addItem( Spacer10 );
+00119 
+00120     ServerDlgLayout->addLayout( Layout14, 3, 1 );
+00121 
+00122     m_EditUser = new QLineEdit( this, "m_EditUser" );
+00123     m_EditUser->setFocusPolicy( QLineEdit::StrongFocus );
+00124 
+00125     ServerDlgLayout->addWidget( m_EditUser, 4, 1 );
+00126 
+00127     m_EditPassword = new QLineEdit( this, "m_EditPassword" );
+00128     m_EditPassword->setFocusPolicy( QLineEdit::StrongFocus );
+00129     m_EditPassword->setEchoMode( QLineEdit::Password );
+00130 
+00131     ServerDlgLayout->addWidget( m_EditPassword, 5, 1 );
+00132     languageChange();
+00133     resize( QSize(246, 256).expandedTo(minimumSizeHint()) );
+00134     clearWState( WState_Polished );
+00135 
+00136     // signals and slots connections
+00137     connect( m_ButtonOk, SIGNAL( clicked() ), this, SLOT( slotButtonOkClicked() ) );
+00138     connect( m_ButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+00139 
+00140     // tab order
+00141     setTabOrder( m_EditAccount, m_EditServer );
+00142     setTabOrder( m_EditServer, m_EditUser );
+00143     setTabOrder( m_EditUser, m_EditPassword );
+00144     setTabOrder( m_EditPassword, m_ButtonOk );
+00145     setTabOrder( m_ButtonOk, m_ButtonCancel );
+00146     setTabOrder( m_ButtonCancel, CheckActive );
+00147     setTabOrder( CheckActive, m_ComboProtocol );
+00148     setTabOrder( m_ComboProtocol, m_SpinPort );
+00149 }
+00150 
+00151 /*
+00152  *  Destroys the object and frees any allocated resources
+00153  */
+00154 ServerDlg::~ServerDlg()
+00155 {
+00156     // no need to delete child widgets, Qt does it all for us
+00157 }
+00158 
+00159 /*
+00160  *  Sets the strings of the subwidgets using the current
+00161  *  language.
+00162  */
+00163 void ServerDlg::languageChange()
+00164 {
+00165     setCaption( tr2i18n( "Server Options" ) );
+00166     QLabel_4->setText( tr2i18n( "Password:" ) );
+00167     QLabel_3->setText( tr2i18n( "User:" ) );
+00168     CheckActive->setText( tr2i18n( "Active" ) );
+00169     m_ButtonOk->setText( tr2i18n( "OK" ) );
+00170     m_ButtonCancel->setText( tr2i18n( "Cancel" ) );
+00171     QLabel_1->setText( tr2i18n( "Account:" ) );
+00172     QLabel_2->setText( tr2i18n( "Server:" ) );
+00173     QLabel_5->setText( tr2i18n( "Protocol:" ) );
+00174     QLabel_6->setText( tr2i18n( "Port:" ) );
+00175 }
+00176 
+00177 void ServerDlg::slotButtonOkClicked()
+00178 {
+00179     qWarning( "ServerDlg::slotButtonOkClicked(): Not implemented yet" );
+00180 }
+00181 
+00182 #include "ServerDlg.moc"
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/ServerDlg_8h-source.html b/doc/html/ServerDlg_8h-source.html new file mode 100644 index 0000000..a5ca380 --- /dev/null +++ b/doc/html/ServerDlg_8h-source.html @@ -0,0 +1,91 @@ + + +kshowmail: kshowmail/ServerDlg.h Source File + + + + + + +

ServerDlg.h

00001 /****************************************************************************
+00002 ** Form interface generated from reading ui file '/home/kuddel/Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/ServerDlg.ui'
+00003 **
+00004 ** Created: Di Mai 15 19:57:52 2007
+00005 **      by: The User Interface Compiler ($Id: ServerDlg_8h-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 ****************************************************************************/
+00009 
+00010 #ifndef SERVERDLG_H
+00011 #define SERVERDLG_H
+00012 
+00013 #include <qvariant.h>
+00014 #include <qdialog.h>
+00015 #include <kpassdlg.h>
+00016 
+00017 class QVBoxLayout;
+00018 class QHBoxLayout;
+00019 class QGridLayout;
+00020 class QSpacerItem;
+00021 class QLabel;
+00022 class QLineEdit;
+00023 class QCheckBox;
+00024 class QPushButton;
+00025 class QComboBox;
+00026 class QSpinBox;
+00027 
+00028 class ServerDlg : public QDialog
+00029 {
+00030     Q_OBJECT
+00031 
+00032 public:
+00033     ServerDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+00034     ~ServerDlg();
+00035 
+00036     QLabel* QLabel_4;
+00037     QLineEdit* m_EditAccount;
+00038     QLineEdit* m_EditServer;
+00039     QLabel* QLabel_3;
+00040     QCheckBox* CheckActive;
+00041     QPushButton* m_ButtonOk;
+00042     QPushButton* m_ButtonCancel;
+00043     QLabel* QLabel_1;
+00044     QLabel* QLabel_2;
+00045     QLabel* QLabel_5;
+00046     QLabel* QLabel_6;
+00047     QComboBox* m_ComboProtocol;
+00048     QSpinBox* m_SpinPort;
+00049     QLineEdit* m_EditUser;
+00050     QLineEdit* m_EditPassword;
+00051 
+00052 public slots:
+00053     virtual void slotButtonOkClicked();
+00054 
+00055 protected:
+00056     QGridLayout* ServerDlgLayout;
+00057     QHBoxLayout* Layout13;
+00058     QSpacerItem* Spacer1;
+00059     QHBoxLayout* Layout15;
+00060     QSpacerItem* Spacer11;
+00061     QHBoxLayout* Layout14;
+00062     QSpacerItem* Spacer10;
+00063 
+00064 protected slots:
+00065     virtual void languageChange();
+00066 
+00067 };
+00068 
+00069 #endif // SERVERDLG_H
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/ServerDlg_8moc-source.html b/doc/html/ServerDlg_8moc-source.html new file mode 100644 index 0000000..446d746 --- /dev/null +++ b/doc/html/ServerDlg_8moc-source.html @@ -0,0 +1,126 @@ + + +kshowmail: kshowmail/ServerDlg.moc Source File + + + + + + +

ServerDlg.moc

00001 /****************************************************************************
+00002 ** ServerDlg meta object code from reading C++ file 'ServerDlg.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:54 2007
+00005 **      by: The Qt MOC ($Id: ServerDlg_8moc-source.html,v 1.8 2007/05/16 20:11:59 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "ServerDlg.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *ServerDlg::className() const
+00023 {
+00024     return "ServerDlg";
+00025 }
+00026 
+00027 QMetaObject *ServerDlg::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_ServerDlg( "ServerDlg", &ServerDlg::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString ServerDlg::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "ServerDlg", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString ServerDlg::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "ServerDlg", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* ServerDlg::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QDialog::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotButtonOkClicked", 0, 0 };
+00056     static const QUMethod slot_1 = {"languageChange", 0, 0 };
+00057     static const QMetaData slot_tbl[] = {
+00058        { "slotButtonOkClicked()", &slot_0, QMetaData::Public },
+00059        { "languageChange()", &slot_1, QMetaData::Protected }
+00060     };
+00061     metaObj = QMetaObject::new_metaobject(
+00062        "ServerDlg", parentObject,
+00063        slot_tbl, 2,
+00064        0, 0,
+00065 #ifndef QT_NO_PROPERTIES
+00066        0, 0,
+00067        0, 0,
+00068 #endif // QT_NO_PROPERTIES
+00069        0, 0 );
+00070     cleanUp_ServerDlg.setMetaObject( metaObj );
+00071     return metaObj;
+00072 }
+00073 
+00074 void* ServerDlg::qt_cast( const char* clname )
+00075 {
+00076     if ( !qstrcmp( clname, "ServerDlg" ) )
+00077        return this;
+00078     return QDialog::qt_cast( clname );
+00079 }
+00080 
+00081 bool ServerDlg::qt_invoke( int _id, QUObject* _o )
+00082 {
+00083     switch ( _id - staticMetaObject()->slotOffset() ) {
+00084     case 0: slotButtonOkClicked(); break;
+00085     case 1: languageChange(); break;
+00086     default:
+00087        return QDialog::qt_invoke( _id, _o );
+00088     }
+00089     return TRUE;
+00090 }
+00091 
+00092 bool ServerDlg::qt_emit( int _id, QUObject* _o )
+00093 {
+00094     return QDialog::qt_emit(_id,_o);
+00095 }
+00096 #ifndef QT_NO_PROPERTIES
+00097 
+00098 bool ServerDlg::qt_property( int id, int f, QVariant* v)
+00099 {
+00100     return QDialog::qt_property( id, f, v);
+00101 }
+00102 
+00103 bool ServerDlg::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00104 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/alertdialog_8cpp-source.html b/doc/html/alertdialog_8cpp-source.html new file mode 100644 index 0000000..629bd9c --- /dev/null +++ b/doc/html/alertdialog_8cpp-source.html @@ -0,0 +1,61 @@ + + +kshowmail: kshowmail/alertdialog.cpp Source File + + + + + + +

alertdialog.cpp

00001 /***************************************************************************
+00002                           alertdialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Sun Nov 4 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "alertdialog.h"
+00019 
+00020 AlertDialog::AlertDialog(QWidget *parent, const char *name ):
+00021        AlertDlg(parent,name,true)
+00022 {
+00023        // position the dialog at the upper left corner of the main window.
+00024        // if the main window is iconized, the last position on screen is used.
+00025        setGeometry (parent->x (), parent->y (), width (), height ());
+00026 
+00027        // now show the dialog
+00028        show ();
+00029 }
+00030 
+00031 AlertDialog::~AlertDialog()
+00032 {
+00033 }
+00034 
+00035 void AlertDialog::slotOk ()
+00036 {
+00037        emit signalOk ();
+00038 }
+00039 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/alertdialog_8h-source.html b/doc/html/alertdialog_8h-source.html new file mode 100644 index 0000000..e5aa419 --- /dev/null +++ b/doc/html/alertdialog_8h-source.html @@ -0,0 +1,63 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/alertdialog.h Source File + + + + + + + +

alertdialog.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           alertdialog.h  -  description
+00003                              -------------------
+00004     begin                : Sun Nov 4 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef ALERTDIALOG_H
+00019 #define ALERTDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "AlertDlg.h"
+00023 
+00028 class AlertDialog : public AlertDlg
+00029 {
+00030    Q_OBJECT
+00031 public:
+00032         AlertDialog(QWidget *parent=0, const char *name=0);
+00033         ~AlertDialog();
+00034 public slots:
+00035         void slotOk ();
+00036 signals:
+00037         void signalOk ();
+00038 };
+00039 
+00040 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/alertdialog_8moc_8cpp-source.html b/doc/html/alertdialog_8moc_8cpp-source.html new file mode 100644 index 0000000..56b4c7e --- /dev/null +++ b/doc/html/alertdialog_8moc_8cpp-source.html @@ -0,0 +1,138 @@ + + +kshowmail: kshowmail/alertdialog.moc.cpp Source File + + + + + + +

alertdialog.moc.cpp

00001 /****************************************************************************
+00002 ** AlertDialog meta object code from reading C++ file 'alertdialog.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:09:03 2007
+00005 **      by: The Qt MOC ($Id: alertdialog_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:49 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "alertdialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *AlertDialog::className() const
+00023 {
+00024     return "AlertDialog";
+00025 }
+00026 
+00027 QMetaObject *AlertDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_AlertDialog( "AlertDialog", &AlertDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString AlertDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "AlertDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString AlertDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "AlertDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* AlertDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = AlertDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotOk", 0, 0 };
+00056     static const QMetaData slot_tbl[] = {
+00057        { "slotOk()", &slot_0, QMetaData::Public }
+00058     };
+00059     static const QUMethod signal_0 = {"signalOk", 0, 0 };
+00060     static const QMetaData signal_tbl[] = {
+00061        { "signalOk()", &signal_0, QMetaData::Public }
+00062     };
+00063     metaObj = QMetaObject::new_metaobject(
+00064        "AlertDialog", parentObject,
+00065        slot_tbl, 1,
+00066        signal_tbl, 1,
+00067 #ifndef QT_NO_PROPERTIES
+00068        0, 0,
+00069        0, 0,
+00070 #endif // QT_NO_PROPERTIES
+00071        0, 0 );
+00072     cleanUp_AlertDialog.setMetaObject( metaObj );
+00073     return metaObj;
+00074 }
+00075 
+00076 void* AlertDialog::qt_cast( const char* clname )
+00077 {
+00078     if ( !qstrcmp( clname, "AlertDialog" ) )
+00079        return this;
+00080     return AlertDlg::qt_cast( clname );
+00081 }
+00082 
+00083 // SIGNAL signalOk
+00084 void AlertDialog::signalOk()
+00085 {
+00086     activate_signal( staticMetaObject()->signalOffset() + 0 );
+00087 }
+00088 
+00089 bool AlertDialog::qt_invoke( int _id, QUObject* _o )
+00090 {
+00091     switch ( _id - staticMetaObject()->slotOffset() ) {
+00092     case 0: slotOk(); break;
+00093     default:
+00094        return AlertDlg::qt_invoke( _id, _o );
+00095     }
+00096     return TRUE;
+00097 }
+00098 
+00099 bool AlertDialog::qt_emit( int _id, QUObject* _o )
+00100 {
+00101     switch ( _id - staticMetaObject()->signalOffset() ) {
+00102     case 0: signalOk(); break;
+00103     default:
+00104        return AlertDlg::qt_emit(_id,_o);
+00105     }
+00106     return TRUE;
+00107 }
+00108 #ifndef QT_NO_PROPERTIES
+00109 
+00110 bool AlertDialog::qt_property( int id, int f, QVariant* v)
+00111 {
+00112     return AlertDlg::qt_property( id, f, v);
+00113 }
+00114 
+00115 bool AlertDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00116 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 0000000..c8b7486 --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,70 @@ + + +kshowmail.kdevelop: Class List + + + + + + +

kshowmail.kdevelop Class List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AccountSetupDialogDialog to setup an account
AccountSetupItemThis class is used in ConfigAccounts to show the available accounts in the list view and to store an account setup
AlertDialog
AlertDlg
ConfigAccountsPart of the setup dialog (KShowMailApp::SetupDialog) to configure the accounts
ConfigActionsPart of the setup dialog (KShowMailApp::SetupDialog) to configure the actions
ConfigDisplayPart of the setup dialog (KShowMailApp::SetupDialog) to configure the display
ConfigElemRepresents a mail account
ConfigFilterPart of the setup dialog (KShowMailApp::SetupDialog) to configure the filter
ConfigGeneralPart of the setup dialog (KShowMailApp::SetupDialog) to configure general things
ConfigList
ConfigLogPart of the setup dialog (KShowMailApp::SetupDialog) to configure the log
ConfigSpamcheckPart of the setup dialog (KShowMailApp::SetupDialog) to configure the spam check
FilterCriteriaWidgetPart of the filter setup dialog (class FilterSetupDialog) to show a criteria of the selected filter
FilterItem
FilterItemCriteriaThis is a criteria of a filter item. For using create an object and call check(). It gets its configuration itself from the config file at creation time. You can't reload the setup
FilterLog
FilterLogEntryAn Object of this class contains the datas about a deleted or moved mail. These objects are stored in the lists of the filter log
FilterLogViewThis dialog box shows the filter log
FilterLogViewDeletedItemItem of the filter log view of deleted mails
FilterLogViewMovedItemItem of the filter log view of moved mails
FilterSetupDialogDialog to setup a filter
FilterSetupItemThis class is used in ConfigFilter to show the available filters in the list view and to store a filter setup
HeaderFilterThis is the mail header filter. Call check() with some header datas of the mail to get the configured action for this mail. If the settings was changed by the config GUI you have to call load()
KShowMailApp
KshowmailDoc
KShowMailDock
KshowmailView
MailBoxWizard
MailBoxWizardListItem
SenderListDialogThis is a dialog to edit the blacklist and whitelist. It is used by the class ConfigFilter
SenderListFilterThis class represents both the blacklist and the whitelist. For using create an object of it and call check() to test a sender address. You have to call load() after the settings in the config file was changed
ServerDialogDialog to edit account options. You can not create a new account or edit the account name
ShowHeaderDialog
ShowListViewItem
ShowMailDialog
ShowRecordList which contains all mails of an account
ShowRecordElemRepresents a mail
Types::DownloadActionParams_Type
Types::FilterCriteria_Type
UniqueAppCreates a unique instance of kshowmail
+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classAlertDialog-members.html b/doc/html/classAlertDialog-members.html new file mode 100644 index 0000000..e5379e4 --- /dev/null +++ b/doc/html/classAlertDialog-members.html @@ -0,0 +1,41 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

AlertDialog Member List

This is the complete list of members for AlertDialog, including all inherited members.

+ + + + + + + + + + + + + +
AlertDialog(QWidget *parent=0, const char *name=0)AlertDialog
AlertDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)AlertDlg
AlertDlgLayoutAlertDlg [protected]
languageChange()AlertDlg [protected, virtual, slot]
m_ButtonIgnoreAlertDlg
m_ButtonOkAlertDlg
PixmapLabel2AlertDlg
QLabel_1AlertDlg
QLabel_2AlertDlg
signalOk()AlertDialog [signal]
slotOk()AlertDialog [virtual, slot]
~AlertDialog()AlertDialog
~AlertDlg()AlertDlg


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classAlertDialog.html b/doc/html/classAlertDialog.html new file mode 100644 index 0000000..203ffbb --- /dev/null +++ b/doc/html/classAlertDialog.html @@ -0,0 +1,144 @@ + + +kshowmail.kdevelop: AlertDialog Class Reference + + + + + + +

AlertDialog Class Reference

#include <alertdialog.h> +

+

Inheritance diagram for AlertDialog: +

+ +AlertDlg + +List of all members. + + + + + + + + + + + + +

Public Slots

void slotOk ()

Signals

void signalOk ()

Public Member Functions

 AlertDialog (QWidget *parent=0, const char *name=0)
 ~AlertDialog ()
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
AlertDialog::AlertDialog (QWidget *  parent = 0,
const char *  name = 0 
)
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
AlertDialog::~AlertDialog (  ) 
+
+
+ +

+ +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
void AlertDialog::slotOk (  )  [virtual, slot]
+
+
+ +

+ +

+Reimplemented from AlertDlg. +

+

+ +

+
+ + + + + + + + +
void AlertDialog::signalOk (  )  [signal]
+
+
+ +

+ +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/alertdialog.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/alertdialog.cpp
+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classAlertDialog.png b/doc/html/classAlertDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..377ba37da9cb98fde472d6222f6e2479ead17bc8 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^-as6{!VDxA7fx*iQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi(Vho_5Uh)3t!%dvb-20RQ8z8!tO)%=BD!WSpI z!vD%U%J?|uZZ@=Wa58K?G5w#$0b`-^iYE?pS~k|2s0bIHv{l=b)aB;0nqy;_-h`Wm z*POFCyw~-l9{F@;Q@WKY_r)2VzItV%32RrT+DE5u%ZzNYOSg|UcUrSOQ@y3AMYk|V ztcJ1nj@A9Y=a*gYdt>Hny=kub-Wx~t%1qoQdQ4E_^*bPB(zl>Gaqk_2Bck4K|A{XP zoiHiP&4J0=!NT}#6}N$6$h2oJvTVJ&Wh>MEvk9$@c)2e%WAb9(x3jIT&ARp`ZS@&5 vUGFRRc{%ScJIrC&V<`Jn + +kshowmail.kdevelop: Member List + + + + + + +

AlertDlg Member List

This is the complete list of members for AlertDlg, including all inherited members.

+ + + + + + + + + + + +
AlertDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)AlertDlg
AlertDlgLayoutAlertDlg [protected]
image0AlertDlg [private]
languageChange()AlertDlg [protected, virtual, slot]
m_ButtonIgnoreAlertDlg
m_ButtonOkAlertDlg
PixmapLabel2AlertDlg
QLabel_1AlertDlg
QLabel_2AlertDlg
slotOk()AlertDlg [virtual, slot]
~AlertDlg()AlertDlg


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classAlertDlg.html b/doc/html/classAlertDlg.html new file mode 100644 index 0000000..1ac11cf --- /dev/null +++ b/doc/html/classAlertDlg.html @@ -0,0 +1,275 @@ + + +kshowmail.kdevelop: AlertDlg Class Reference + + + + + + +

AlertDlg Class Reference

#include <AlertDlg.h> +

+

Inheritance diagram for AlertDlg: +

+ +AlertDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

virtual void slotOk ()

Public Member Functions

 AlertDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
 ~AlertDlg ()

Public Attributes

QPushButton * m_ButtonIgnore
QPushButton * m_ButtonOk
QLabel * PixmapLabel2
QLabel * QLabel_1
QLabel * QLabel_2

Protected Slots

virtual void languageChange ()

Protected Attributes

QGridLayout * AlertDlgLayout

Private Attributes

QPixmap image0
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AlertDlg::AlertDlg (QWidget *  parent = 0,
const char *  name = 0,
bool  modal = FALSE,
WFlags  fl = 0 
)
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
AlertDlg::~AlertDlg (  ) 
+
+
+ +

+ +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
void AlertDlg::slotOk (  )  [virtual, slot]
+
+
+ +

+ +

+Reimplemented in AlertDialog. +

+

+ +

+
+ + + + + + + + +
void AlertDlg::languageChange (  )  [protected, virtual, slot]
+
+
+ +

+ +

+

+


Member Data Documentation

+ +
+
+ + + + +
QPushButton* AlertDlg::m_ButtonIgnore
+
+
+ +

+ +

+

+ +

+
+ + + + +
QPushButton* AlertDlg::m_ButtonOk
+
+
+ +

+ +

+

+ +

+
+ + + + +
QLabel* AlertDlg::PixmapLabel2
+
+
+ +

+ +

+

+ +

+
+ + + + +
QLabel* AlertDlg::QLabel_1
+
+
+ +

+ +

+

+ +

+
+ + + + +
QLabel* AlertDlg::QLabel_2
+
+
+ +

+ +

+

+ +

+
+ + + + +
QGridLayout* AlertDlg::AlertDlgLayout [protected]
+
+
+ +

+ +

+

+ +

+
+ + + + +
QPixmap AlertDlg::image0 [private]
+
+
+ +

+ +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/AlertDlg.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/AlertDlg.cpp
+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classAlertDlg.png b/doc/html/classAlertDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..41b0f9bc972146c5f2b138fa273df3f8b5d01bca GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^-as6{!VDxA7fx*iQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi(VpQnpsh)3t!%Yl4{3^*79e%vg7$o7TBP5Aud z>+kAWxVIKdZvC{eUsqBp=bAd}^9H4f3XTeXhlIA6Hl1sWZQGI5<>s?mL3M3Rf>+;5 zukEMQoKiX6dBoV}-IR4)Wa#`_CRa4!ZNTY$+fU_OGGeKOHtChIZaw^Q_`Jp z^#*H|jzmRn3fMNqQ|#C;p}prOX+KsCY=3%e-?wPr-D!$Z8;gET>nzo~w$=X1#%ca<{Jq<9#Mi1vV6w#JFu#xWzt8` + +kshowmail: Member List + + + + + + +

CommandDialog Member List

This is the complete list of members for CommandDialog, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandDialog(QWidget *parent, const char *name, CommandList *list, ConfigElem *pConfig, ConfigList *pConfigList)CommandDialog
CommandDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)CommandDlg
CommandDlgLayoutCommandDlg [protected]
languageChange()CommandDlg [protected, virtual, slot]
Layout6CommandDlg [protected]
m_ButtonAddCommandDlg
m_ButtonCancelCommandDlg
m_ButtonCopyCommandDlg
m_ButtonDeleteCommandDlg
m_ButtonEditCommandDlg
m_ButtonOkCommandDlg
m_ComboCommandCommandDlg
m_locallistCommandDialog [private]
m_pConfigCommandDialog [private]
m_pConfigListCommandDialog [private]
m_plistCommandDialog [private]
QGroupBox_1CommandDlg
QGroupBox_1LayoutCommandDlg [protected]
slotAdd()CommandDialog [private, virtual, slot]
slotCommandActivated(int)CommandDialog [private, virtual, slot]
slotCopy()CommandDialog [private, virtual, slot]
slotDelete()CommandDialog [private, virtual, slot]
slotEdit()CommandDialog [private, virtual, slot]
slotOk()CommandDialog [private, virtual, slot]
Spacer11CommandDlg [protected]
~CommandDialog()CommandDialog
~CommandDlg()CommandDlg


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandDialog.html b/doc/html/classCommandDialog.html new file mode 100644 index 0000000..ea6f4ca --- /dev/null +++ b/doc/html/classCommandDialog.html @@ -0,0 +1,81 @@ + + +kshowmail: CommandDialog Class Reference + + + + + + +

CommandDialog Class Reference

Inheritance diagram for CommandDialog: +

+ +CommandDlg + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

CommandDialog (QWidget *parent, const char *name, CommandList *list, ConfigElem *pConfig, ConfigList *pConfigList)
~CommandDialog ()

Private Slots

+virtual void slotAdd ()
+virtual void slotEdit ()
+virtual void slotCopy ()
+virtual void slotDelete ()
+virtual void slotOk ()
+virtual void slotCommandActivated (int)

Private Attributes

+CommandListm_plist
+CommandList m_locallist
+ConfigListm_pConfigList
+ConfigElemm_pConfig
+

Detailed Description

+ +

+ +

+Definition at line 35 of file commanddialog.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandDialog.png b/doc/html/classCommandDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..c78390e97729b622a50980090e2cbd810944b26d GIT binary patch literal 404 zcmV;F0c-w=P)xu9l1u($Fb1J*BVAj!?P)0rikv zsFWpgA&lxdXUcOj^_KQxw9PTi$x-i$H9+2(KAQGk4=vUw)O3ZN+Uq>@WoY=j33?5~ zP0)?%J + +kshowmail: Member List + + + + + + +

CommandDlg Member List

This is the complete list of members for CommandDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
CommandDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)CommandDlg
CommandDlgLayoutCommandDlg [protected]
languageChange()CommandDlg [protected, virtual, slot]
Layout6CommandDlg [protected]
m_ButtonAddCommandDlg
m_ButtonCancelCommandDlg
m_ButtonCopyCommandDlg
m_ButtonDeleteCommandDlg
m_ButtonEditCommandDlg
m_ButtonOkCommandDlg
m_ComboCommandCommandDlg
QGroupBox_1CommandDlg
QGroupBox_1LayoutCommandDlg [protected]
slotAdd()CommandDlg [virtual, slot]
slotCommandActivated(int)CommandDlg [virtual, slot]
slotCopy()CommandDlg [virtual, slot]
slotDelete()CommandDlg [virtual, slot]
slotEdit()CommandDlg [virtual, slot]
slotOk()CommandDlg [virtual, slot]
Spacer11CommandDlg [protected]
~CommandDlg()CommandDlg


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandDlg.html b/doc/html/classCommandDlg.html new file mode 100644 index 0000000..fa64ebd --- /dev/null +++ b/doc/html/classCommandDlg.html @@ -0,0 +1,110 @@ + + +kshowmail: CommandDlg Class Reference + + + + + + +

CommandDlg Class Reference

Inheritance diagram for CommandDlg: +

+ +CommandDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotCommandActivated (int)
+virtual void slotAdd ()
+virtual void slotCopy ()
+virtual void slotDelete ()
+virtual void slotEdit ()
+virtual void slotOk ()

Public Member Functions

CommandDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~CommandDlg ()

Public Attributes

+QPushButton * m_ButtonOk
+QPushButton * m_ButtonCancel
+QGroupBox * QGroupBox_1
+QPushButton * m_ButtonAdd
+QPushButton * m_ButtonEdit
+QPushButton * m_ButtonCopy
+QPushButton * m_ButtonDelete
+QComboBox * m_ComboCommand

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QGridLayout * CommandDlgLayout
+QHBoxLayout * Layout6
+QSpacerItem * Spacer11
+QGridLayout * QGroupBox_1Layout
+

Detailed Description

+ +

+ +

+Definition at line 24 of file CommandDlg.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandDlg.png b/doc/html/classCommandDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebb372d62023656c548c45a4541799f48c81aeb GIT binary patch literal 413 zcmV;O0b>4%P))(J;{Hb%I{{k2QArj^MOcV5wjXxBDFN*kLk!J!ZHQ38DVSd5 zLTmpDvXBc=sTRm`V$`jT1G<C2bERbQkS~4a`Lse+LN?)0spl|>J+95hn zDNE!+nACI5l;>pXz1oY>qL}C8sCUFVAn!~cO?z*LyqZ^nx;|l5d$hOE35|azL631f z2|7`|8@izzx}l3gKQ;TUMuzZA&30W#z + +kshowmail: Member List + + + + + + +

CommandEntry Member List

This is the complete list of members for CommandEntry, including all inherited members.

+ + + + + + + + + + +
CommandEntry()CommandEntry [inline]
CommandEntry(const char *name, const char *path, const int id, const bool modal)CommandEntry [inline]
CommandEntry(const CommandEntry *copy)CommandEntry [inline]
exec(ConfigElem *pelem=NULL, const char *header=NULL, const char *body=NULL)CommandEntry
exec(const QString &path, ConfigElem *pelem, const char *header=NULL, const char *body=NULL)CommandEntry
m_idCommandEntry
m_nameCommandEntry
m_pathCommandEntry
m_waitForCommandCommandEntry
operator=(const CommandEntry &entry)CommandEntry


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntry.html b/doc/html/classCommandEntry.html new file mode 100644 index 0000000..1458681 --- /dev/null +++ b/doc/html/classCommandEntry.html @@ -0,0 +1,69 @@ + + +kshowmail: CommandEntry Class Reference + + + + + + +

CommandEntry Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

CommandEntry ()
CommandEntry (const char *name, const char *path, const int id, const bool modal)
CommandEntry (const CommandEntry *copy)
+CommandEntryoperator= (const CommandEntry &entry)
+bool exec (ConfigElem *pelem=NULL, const char *header=NULL, const char *body=NULL)
+bool exec (const QString &path, ConfigElem *pelem, const char *header=NULL, const char *body=NULL)

Public Attributes

+QString m_name
+QString m_path
+int m_id
+bool m_waitForCommand
+

Detailed Description

+ +

+ +

+Definition at line 33 of file commandentry.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntryDialog-members.html b/doc/html/classCommandEntryDialog-members.html new file mode 100644 index 0000000..9e61f4d --- /dev/null +++ b/doc/html/classCommandEntryDialog-members.html @@ -0,0 +1,52 @@ + + +kshowmail: Member List + + + + + + +

CommandEntryDialog Member List

This is the complete list of members for CommandEntryDialog, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
CommandEntryDialog(QWidget *parent, const char *name, CommandEntry *entry, ConfigElem *pConfigElem)CommandEntryDialog
CommandEntryDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)CommandEntryDlg
CommandEntryDlgLayoutCommandEntryDlg [protected]
languageChange()CommandEntryDlg [protected, virtual, slot]
layout2CommandEntryDlg [protected]
m_ButtonCancelCommandEntryDlg
m_ButtonOkCommandEntryDlg
m_ButtonPathCommandEntryDlg
m_ButtonTestCommandEntryDlg
m_checkModalCommandEntryDlg
m_EditNameCommandEntryDlg
m_EditPathCommandEntryDlg
m_pConfigElemCommandEntryDialog [private]
m_pentryCommandEntryDialog [private]
QGroupBox_1CommandEntryDlg
QGroupBox_1LayoutCommandEntryDlg [protected]
slotOk()CommandEntryDialog [private, virtual, slot]
slotPath()CommandEntryDialog [private, virtual, slot]
slotTest()CommandEntryDialog [private, virtual, slot]
Spacer16CommandEntryDlg [protected]
Spacer17CommandEntryDlg [protected]
spacer3CommandEntryDlg [protected]
~CommandEntryDialog()CommandEntryDialog
~CommandEntryDlg()CommandEntryDlg


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntryDialog.html b/doc/html/classCommandEntryDialog.html new file mode 100644 index 0000000..9622a86 --- /dev/null +++ b/doc/html/classCommandEntryDialog.html @@ -0,0 +1,69 @@ + + +kshowmail: CommandEntryDialog Class Reference + + + + + + +

CommandEntryDialog Class Reference

#include <commandentrydialog.h> +

+

Inheritance diagram for CommandEntryDialog: +

+ +CommandEntryDlg + +List of all members. + + + + + + + + + + + + + + + + + + +

Public Member Functions

CommandEntryDialog (QWidget *parent, const char *name, CommandEntry *entry, ConfigElem *pConfigElem)
~CommandEntryDialog ()

Private Slots

+void slotPath ()
+void slotTest ()
+void slotOk ()

Private Attributes

+CommandEntrym_pentry
+ConfigElemm_pConfigElem
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 30 of file commandentrydialog.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntryDialog.png b/doc/html/classCommandEntryDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..1d28993f8cb40966981958893997045171b46d2a GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^tw0>W!VDyjvag;Dq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$V@Z%-FoVOh8)-mxyQhm|NJQ(~sg8Zk20X4G)2{v8*=Tt%Yi;jlc?r#d*@xjme42Za&oGI#O5ksP9bWNl$p#P + +kshowmail: Member List + + + + + + +

CommandEntryDlg Member List

This is the complete list of members for CommandEntryDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
CommandEntryDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)CommandEntryDlg
CommandEntryDlgLayoutCommandEntryDlg [protected]
languageChange()CommandEntryDlg [protected, virtual, slot]
layout2CommandEntryDlg [protected]
m_ButtonCancelCommandEntryDlg
m_ButtonOkCommandEntryDlg
m_ButtonPathCommandEntryDlg
m_ButtonTestCommandEntryDlg
m_checkModalCommandEntryDlg
m_EditNameCommandEntryDlg
m_EditPathCommandEntryDlg
QGroupBox_1CommandEntryDlg
QGroupBox_1LayoutCommandEntryDlg [protected]
slotOk()CommandEntryDlg [virtual, slot]
slotPath()CommandEntryDlg [virtual, slot]
slotTest()CommandEntryDlg [virtual, slot]
Spacer16CommandEntryDlg [protected]
Spacer17CommandEntryDlg [protected]
spacer3CommandEntryDlg [protected]
~CommandEntryDlg()CommandEntryDlg


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntryDlg.html b/doc/html/classCommandEntryDlg.html new file mode 100644 index 0000000..39356ad --- /dev/null +++ b/doc/html/classCommandEntryDlg.html @@ -0,0 +1,107 @@ + + +kshowmail: CommandEntryDlg Class Reference + + + + + + +

CommandEntryDlg Class Reference

Inheritance diagram for CommandEntryDlg: +

+ +CommandEntryDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotOk ()
+virtual void slotPath ()
+virtual void slotTest ()

Public Member Functions

CommandEntryDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~CommandEntryDlg ()

Public Attributes

+QGroupBox * QGroupBox_1
+QPushButton * m_ButtonPath
+QPushButton * m_ButtonTest
+QCheckBox * m_checkModal
+QLineEdit * m_EditName
+QLineEdit * m_EditPath
+QPushButton * m_ButtonOk
+QPushButton * m_ButtonCancel

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QVBoxLayout * CommandEntryDlgLayout
+QGridLayout * QGroupBox_1Layout
+QSpacerItem * spacer3
+QSpacerItem * Spacer16
+QHBoxLayout * layout2
+QSpacerItem * Spacer17
+

Detailed Description

+ +

+ +

+Definition at line 25 of file CommandEntryDlg.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandEntryDlg.png b/doc/html/classCommandEntryDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3fba5fb6aecedebf678bbd0e4632c7ffdf2226 GIT binary patch literal 504 zcmVrZnv9|b8~B2OC=Ga7Vu<0YOvWAqaEAtg zYj28)bOI^|XRP;EjF=Vo>@vV|2_PXc@>2TF&qrghiV*+|$##gb%itA64nhzL-^Cf# z1uf1Q?77RxmmR`Th*_-|;Q+$}V>a31I0HP7iovDYXK1y%3~U){YwMx&A${?)MD<6n zhja__e02J9RI0%^&4{j?Wq2BZE$zHa#+LDkZ^KZYmlOR6-J#nT*Mp zjLDdc$vDIK8OiU+;Ss)XPl^D?j2;GdPM8?;#0=@8XQgP?eH1Qu)D#kuN)hp%Am`3mV^+&IVRDtq*5Yo0UN2N1F uZ!?- + +kshowmail: Member List + + + + + + +

CommandList Member List

This is the complete list of members for CommandList, including all inherited members.

+ + + + + + + + + + +
CommandList()CommandList
compareItems(QCollection::Item item1, QCollection::Item item2)CommandList [protected, virtual]
exec(unsigned int id, ConfigElem *pelem, const char *header, const char *body)CommandList
exec(unsigned int pos, ConfigElem *pelem)CommandList
newItem(QCollection::Item d)CommandList [protected, virtual]
operator=(CommandList &right)CommandList
readOptions(KConfig *config)CommandList
saveOptions(KConfig *config)CommandList
setCombo(QComboBox *combo, int nIndex)CommandList
~CommandList()CommandList [virtual]


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classCommandList.html b/doc/html/classCommandList.html new file mode 100644 index 0000000..8cab68c --- /dev/null +++ b/doc/html/classCommandList.html @@ -0,0 +1,69 @@ + + +kshowmail: CommandList Class Reference + + + + + + +

CommandList Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

CommandList ()
+virtual ~CommandList ()
+void setCombo (QComboBox *combo, int nIndex)
+CommandListoperator= (CommandList &right)
+bool exec (unsigned int id, ConfigElem *pelem, const char *header, const char *body)
+bool exec (unsigned int pos, ConfigElem *pelem)
+void readOptions (KConfig *config)
+void saveOptions (KConfig *config)

Protected Member Functions

+virtual int compareItems (QCollection::Item item1, QCollection::Item item2)
+virtual QCollection::Item newItem (QCollection::Item d)
+

Detailed Description

+ +

+ +

+Definition at line 31 of file commandlist.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classConfigElem-members.html b/doc/html/classConfigElem-members.html new file mode 100644 index 0000000..a274a0d --- /dev/null +++ b/doc/html/classConfigElem-members.html @@ -0,0 +1,149 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

ConfigElem Member List

This is the complete list of members for ConfigElem, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
appConfigConfigElem [private]
applyFilters()ConfigElem [private]
applyFiltersDeleted()ConfigElem [private]
assertPassword(bool force=false)ConfigElem
cancelRefresh()ConfigElem [private]
cancelShowHeadersConfigElem [static]
clearMailList()ConfigElem
commitDeletion()ConfigElem [private]
commitDownloading()ConfigElem [private]
commitRefresh()ConfigElem [private]
ConfigElem()ConfigElem
ConfigElem(ConfigList *config)ConfigElem
ConfigElem(ConfigElem *pElem)ConfigElem
ConfigElem(ConfigList *config, const QString &account)ConfigElem
continueShowHeadersConfigElem [static]
copyHeaders()ConfigElem [private]
count()ConfigElem
deleteNextMail()ConfigElem [private]
deleteSelectedMails()ConfigElem
deletionPerformedByFiltersConfigElem [private]
doDownloadActions()ConfigElem [private]
downloadActionsInvokedConfigElem [private]
fillMailListView(KshowmailView *view)ConfigElem
filterAppliedConfigElem [private]
FLogConfigElem [private]
getAccountName() constConfigElem
getHeaders()ConfigElem [private]
getHost() constConfigElem
getListViewItem()ConfigElem
getNextHeader()ConfigElem [private]
getNextMailForDownloadActions()ConfigElem [private]
getNumberMails()ConfigElem
getNumberNewMails()ConfigElem
getPassword() constConfigElem
getPasswordStorage() constConfigElem
getPort() constConfigElem
getProtocol(bool upperCase=false) constConfigElem
getSelectedSubjects() constConfigElem
getSizes()ConfigElem [private]
getState()ConfigElem
getTimeoutTime()ConfigElem [private]
getTLS() constConfigElem
getTotalSize()ConfigElem
getUIDs()ConfigElem [private]
getURL() constConfigElem
getUser() constConfigElem
hasPassword() constConfigElem
hasSelectedMails()ConfigElem
headerFilterConfigElem [private]
init()ConfigElem [private]
isActive() constConfigElem
isMailDir(const QDir &path)ConfigElem [private]
isSelected() constConfigElem
isSpam(QByteArray mail) constConfigElem [protected]
isSpamAssassinRunning() constConfigElem [protected]
killPOP3Job()ConfigElem
m_bActiveConfigElem [private]
m_pshowrecordConfigElem [private]
m_pViewItemConfigElem [private]
m_strAccountConfigElem [private]
m_urlConfigElem [private]
mailbodyConfigElem [private]
MailsToDeleteConfigElem [private]
MailsToDownloadConfigElem [private]
MailsToShowConfigElem [private]
moveCounterConfigElem [private]
newMailsConfigElem [private]
PasswordStorageConfigElem [private]
pop3JobConfigElem [private]
pop3TimerConfigElem [private]
printSetup() constConfigElem
readStoredMails(QDomElement &parent)ConfigElem
receivedHeaderConfigElem [private]
receivedSizesConfigElem [private]
receivedUIDsConfigElem [private]
refreshAccountListItem()ConfigElem
refreshMailList(FilterLog *log=NULL)ConfigElem
refreshPerformedByFiltersConfigElem [private]
reloadFilterSettings()ConfigElem
saveOptions(QDomDocument &doc, QDomElement &parent)ConfigElem
secureLoginTypeConfigElem [private]
setAccountName(QString name)ConfigElem
setActive(bool active)ConfigElem
setHost(const QString &host)ConfigElem
setListViewItem(QListViewItem *item)ConfigElem
setPassword(const QString &password)ConfigElem
setPasswordStorage(int storage)ConfigElem
setPort(unsigned short int port)ConfigElem
setProtocol(const QString &protocol)ConfigElem
setTLS(bool tls)ConfigElem
setUser(const QString &user)ConfigElem
showNextMail()ConfigElem [private]
showSelectedHeaders()ConfigElem
showSelectedMails()ConfigElem
sigConfigChanged()ConfigElem [signal]
sigDeleteReady(QString account)ConfigElem [signal]
sigMessageWindowClosed()ConfigElem [signal]
sigMessageWindowOpened()ConfigElem [signal]
sigRefreshReady(QString account)ConfigElem [signal]
sigShowBodiesReady(QString account)ConfigElem [signal]
slotBodyDownloaded(KIO::Job *job)ConfigElem [private, slot]
slotDataMailBody(KIO::Job *, const QByteArray &datas)ConfigElem [private, slot]
slotFinalizeDeletion(KIO::Job *)ConfigElem [private, slot]
slotFinalizeRefresh(KIO::Job *)ConfigElem [private, slot]
slotFinalizeShowMail(KIO::Job *)ConfigElem [private, slot]
slotHeaderDownloaded(KIO::Job *job)ConfigElem [private, slot]
slotMailDeleted(KIO::Job *job)ConfigElem [private, slot]
slotMailDownloadedForAction(KIO::Job *job)ConfigElem [private, slot]
slotReceiveHeader(KIO::Job *, const QByteArray &data)ConfigElem [private, slot]
slotReceiveSize(KIO::Job *, const QByteArray &data)ConfigElem [private, slot]
slotReceiveUID(KIO::Job *, const QByteArray &data)ConfigElem [private, slot]
slotSizesReceived(KIO::Job *job)ConfigElem [private, slot]
slotTimeout()ConfigElem [private, slot]
slotUIDsReceived(KIO::Job *job)ConfigElem [private, slot]
startKIOJob(const QString &path)ConfigElem [private]
stateConfigElem [private]
swapMailLists()ConfigElem [private]
tempMailListConfigElem [private]
useTLSConfigElem [private]
writeToMailBox(const QString &mail, const QString &box)ConfigElem [private]
~ConfigElem()ConfigElem


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classConfigElem.html b/doc/html/classConfigElem.html new file mode 100644 index 0000000..3870b11 --- /dev/null +++ b/doc/html/classConfigElem.html @@ -0,0 +1,2855 @@ + + +kshowmail.kdevelop: ConfigElem Class Reference + + + + + + +

ConfigElem Class Reference

Represents a mail account. +More... +

+#include <configelem.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Signals

void sigDeleteReady (QString account)
void sigShowBodiesReady (QString account)
void sigConfigChanged ()
void sigMessageWindowOpened ()
void sigMessageWindowClosed ()
void sigRefreshReady (QString account)

Public Member Functions

 ConfigElem ()
 ConfigElem (ConfigList *config)
 ConfigElem (ConfigElem *pElem)
 ConfigElem (ConfigList *config, const QString &account)
 ~ConfigElem ()
bool isActive () const
void setActive (bool active)
QString getAccountName () const
void setAccountName (QString name)
QString getPassword () const
void setPassword (const QString &password)
bool hasPassword () const
KURL getURL () const
void setListViewItem (QListViewItem *item)
QListViewItem * getListViewItem ()
bool isSelected () const
void clearMailList ()
void setHost (const QString &host)
QString getHost () const
void setProtocol (const QString &protocol)
QString getProtocol (bool upperCase=false) const
void setTLS (bool tls)
bool getTLS () const
void setPort (unsigned short int port)
unsigned short int getPort () const
void setUser (const QString &user)
QString getUser () const
void setPasswordStorage (int storage)
int getPasswordStorage () const
void saveOptions (QDomDocument &doc, QDomElement &parent)
void readStoredMails (QDomElement &parent)
int count ()
void deleteSelectedMails ()
void showSelectedMails ()
bool assertPassword (bool force=false)
Types::AccountState_Type getState ()
QStringList getSelectedSubjects () const
bool hasSelectedMails ()
void refreshMailList (FilterLog *log=NULL)
int getNumberNewMails ()
int getNumberMails ()
long getTotalSize ()
void fillMailListView (KshowmailView *view)
void refreshAccountListItem ()
void killPOP3Job ()
int showSelectedHeaders ()
void printSetup () const
void reloadFilterSettings ()

Static Public Attributes

static const int continueShowHeaders
static const int cancelShowHeaders

Protected Member Functions

bool isSpam (QByteArray mail) const
bool isSpamAssassinRunning () const

Private Slots

void slotMailDeleted (KIO::Job *job)
void slotFinalizeDeletion (KIO::Job *)
void slotBodyDownloaded (KIO::Job *job)
void slotMailDownloadedForAction (KIO::Job *job)
void slotDataMailBody (KIO::Job *, const QByteArray &datas)
void slotFinalizeShowMail (KIO::Job *)
void slotTimeout ()
void slotReceiveUID (KIO::Job *, const QByteArray &data)
void slotUIDsReceived (KIO::Job *job)
void slotReceiveSize (KIO::Job *, const QByteArray &data)
void slotSizesReceived (KIO::Job *job)
void slotFinalizeRefresh (KIO::Job *)
void slotHeaderDownloaded (KIO::Job *job)
void slotReceiveHeader (KIO::Job *, const QByteArray &data)

Private Member Functions

void init ()
void deleteNextMail ()
void commitDeletion ()
void showNextMail ()
void commitDownloading ()
void startKIOJob (const QString &path)
unsigned int getTimeoutTime ()
void getUIDs ()
void getSizes ()
void getHeaders ()
void getNextHeader ()
void copyHeaders ()
void applyFilters ()
void applyFiltersDeleted ()
void cancelRefresh ()
void commitRefresh ()
void swapMailLists ()
void doDownloadActions ()
void getNextMailForDownloadActions ()
bool isMailDir (const QDir &path)
bool writeToMailBox (const QString &mail, const QString &box)

Private Attributes

ConfigListappConfig
FilterLogFLog
Types::AccountState_Type state
int PasswordStorage
bool m_bActive
QString m_strAccount
QListViewItem * m_pViewItem
ShowRecordm_pshowrecord
KURL m_url
int secureLoginType
bool useTLS
QByteArray mailbody
MailNumberList_Type MailsToDelete
MailToDownloadMap_Type MailsToDownload
MailNumberList_Type MailsToShow
MailNumberList_Type newMails
KIO::TransferJob * pop3Job
QTimer * pop3Timer
ShowRecordtempMailList
QStringList receivedUIDs
QStringList receivedSizes
QByteArray receivedHeader
HeaderFilter headerFilter
bool filterApplied
bool deletionPerformedByFilters
bool refreshPerformedByFilters
bool downloadActionsInvoked
int moveCounter
+


Detailed Description

+Represents a mail account. +

+Contains all datas of the account like server, user password and so on. It also contains the mails read from the server. Used in class ConfigList and ConfigAccounts.

+

See also:
ShowRecord

+ConfigList

+ConfigAccounts::Accounts

+
Author:
Eggert Ehmke <eggert.ehmke@berlin.de>

+Ulrich Weigelt <ulrich.weigelt@gmx.de>

+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
ConfigElem::ConfigElem (  ) 
+
+
+ +

+General Constructor Warning: The pointer to the application configuration (ConfigList) will not be set. +

+

+ +

+
+ + + + + + + + + +
ConfigElem::ConfigElem (ConfigList config  ) 
+
+
+ +

+Default Constructor

Parameters:
+ + +
config pointer to the general app configuration
+
+ +
+

+ +

+
+ + + + + + + + + +
ConfigElem::ConfigElem (ConfigElem pElem  ) 
+
+
+ +

+Copy Constructor. It doesn't copy the mail list but creates a new empty one. The pointer to the appropriate account list view item is set to NULL.The new account is active by default.

Parameters:
+ + +
pElem the account which will be copied
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
ConfigElem::ConfigElem (ConfigList config,
const QString &  account 
)
+
+
+ +

+Constructs a account which is called like the given name. Creates a empty mail list. Sets the pointer to the appropriate account list view item to NULL. The account is deactivated by default. The url doesn't contain any server informations.

Parameters:
+ + + +
config pointer to the general app configuration
account name of the new account
+
+ +
+

+ +

+
+ + + + + + + + +
ConfigElem::~ConfigElem (  ) 
+
+
+ +

+Destructor Does nothing. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
bool ConfigElem::isActive (  )  const
+
+
+ +

+Returns whether the account is active.

Returns:
TRUE - account is active; FALSE - account is not active
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setActive (bool  active  ) 
+
+
+ +

+Sets the account active.

Parameters:
+ + +
active TRUE - active account; FALSE - deactivate account
+
+ +
+

+ +

+
+ + + + + + + + +
QString ConfigElem::getAccountName (  )  const
+
+
+ +

+Gets the account name.

Returns:
account name
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setAccountName (QString  name  ) 
+
+
+ +

+Sets the account name.

Parameters:
+ + +
name the account name
+
+ +
+

+ +

+
+ + + + + + + + +
QString ConfigElem::getPassword (  )  const
+
+
+ +

+Gets the account password.

Returns:
password
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setPassword (const QString &  password  ) 
+
+
+ +

+Sets the account password. To save it in the configuration file call saveOptions().

Parameters:
+ + +
password new password
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigElem::hasPassword (  )  const
+
+
+ +

+Returns whether a password is stored.

Returns:
TRUE - there is password stored; FALSE - no password stored
+ +
+

+ +

+
+ + + + + + + + +
KURL ConfigElem::getURL (  )  const
+
+
+ +

+Returns the url of this account.

Returns:
url
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setListViewItem (QListViewItem *  item  ) 
+
+
+ +

+Sets the pointer to the item in the account list view item.

See also:
m_pViewItem
+
Parameters:
+ + +
item account list view item
+
+ +
+

+ +

+
+ + + + + + + + +
QListViewItem * ConfigElem::getListViewItem (  ) 
+
+
+ +

+Returns the pointer to the account list view item.

See also:
m_pViewItem
+
Returns:
pointer to the appropriate list view item
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigElem::isSelected (  )  const
+
+
+ +

+Returns TRUE, if the appropriate list view item is selected.

Returns:
TRUE - list view item is selected

+FALSE - list view item is not selected

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::clearMailList (  ) 
+
+
+ +

+Clears the mail list or creates a new one. +

+

+ +

+
+ + + + + + + + + +
void ConfigElem::setHost (const QString &  host  ) 
+
+
+ +

+Sets the host name.

Parameters:
+ + +
host host name
+
+ +
+

+ +

+
+ + + + + + + + +
QString ConfigElem::getHost (  )  const
+
+
+ +

+Returns the hostname.

Returns:
the name of the host or QString::null if no host is set
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setProtocol (const QString &  protocol  ) 
+
+
+ +

+Sets the protocol.

Parameters:
+ + +
protocol the protocol
+
+ +
+

+ +

+
+ + + + + + + + + +
QString ConfigElem::getProtocol (bool  upperCase = false  )  const
+
+
+ +

+Returns the protocol.

Parameters:
+ + +
upperCase TRUE - transforms the protocol string to upper case
+
+
Returns:
protocol
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setTLS (bool  tls  ) 
+
+
+ +

+Enable or disable TLS.

Parameters:
+ + +
tls TRUE: use TLS; FALSE: don't use TLS
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigElem::getTLS (  )  const
+
+
+ +

+Returns whether TLS is enabled.

Returns:
TRUE: TLS is enabled

+FALSE: TLS is disabled

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setPort (unsigned short int  port  ) 
+
+
+ +

+Sets the port.

Parameters:
+ + +
port the port
+
+ +
+

+ +

+
+ + + + + + + + +
unsigned short int ConfigElem::getPort (  )  const
+
+
+ +

+Returns the port number.

Returns:
port number
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setUser (const QString &  user  ) 
+
+
+ +

+Sets the user.

Parameters:
+ + +
user username
+
+ +
+

+ +

+
+ + + + + + + + +
QString ConfigElem::getUser (  )  const
+
+
+ +

+Returns the user name.

Returns:
the user name or QString::null if there is no user name
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::setPasswordStorage (int  storage  ) 
+
+
+ +

+Sets the password storage type. The Constants are defined in constants.h

Parameters:
+ + +
storage type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET
+
+ +
+

+ +

+
+ + + + + + + + +
int ConfigElem::getPasswordStorage (  )  const
+
+
+ +

+Returns the password storage type. The Constants are defined in constants.h.

Returns:
type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ConfigElem::saveOptions (QDomDocument &  doc,
QDomElement &  parent 
)
+
+
+ +

+Saves the stored mails into the given DOM document. It doesn't create a new DOM element but used the given one. Saves the setup into the application config.

Parameters:
+ + + +
doc DOM document which contains all application settings, mails and account settings
parent DOM element in which all settings and mails of this account will be saved
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::readStoredMails (QDomElement &  parent  ) 
+
+
+ +

+Gets the stored mails.

Parameters:
+ + +
parent DOM element which contains the mails of this account
+
+ +
+

+ +

+
+ + + + + + + + +
int ConfigElem::count (  ) 
+
+
+ +

+Returns the number of stored mails.

Returns:
number of mails
+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::deleteSelectedMails (  ) 
+
+
+ +

+Deletes all selected mails. This just starts the deletion and returns after then. When the deletion is ready the signal sigDeleteReady will be emitted. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::showSelectedMails (  ) 
+
+
+ +

+Downloads and shows the bodies of all selected mails. This just starts the download and returns after then. When the download is ready and the body is shown the sigShowBodiesReady will be emitted. +

+

+ +

+
+ + + + + + + + + +
bool ConfigElem::assertPassword (bool  force = false  ) 
+
+
+ +

+Opens a dialog to ask for a password, stores it temporarily in the account settings and emits the signal sigConfigChanged. Does not open a dialog if a password is already stored in the account settings.

Parameters:
+ + +
force ask for a new password even if a password is stored
+
+
Returns:
TRUE - a password is available

+FALSE - no password is available

+ +
+

+ +

+
+ + + + + + + + +
Types::AccountState_Type ConfigElem::getState (  ) 
+
+
+ +

+Returns the state of the account.

Returns:
account state
+ +
+

+ +

+
+ + + + + + + + +
QStringList ConfigElem::getSelectedSubjects (  )  const
+
+
+ +

+Returns the subjects of the selected mails.

Returns:
subjects of selected mails
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigElem::hasSelectedMails (  ) 
+
+
+ +

+Returns whether there are mails in the list that are selected in the list view.

Returns:
TRUE - there are selected mails

+FALSE - there aren't selected mails

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::refreshMailList (FilterLog log = NULL  ) 
+
+
+ +

+Refreshes the mail list. This just starts the refresh and returns after then. When the refresh is ready, the signal sigRefreshReady will be emitted.

Parameters:
+ + +
log Pointer to the filter log
+
+
See also:
sigRefreshReady
+ +
+

+ +

+
+ + + + + + + + +
int ConfigElem::getNumberNewMails (  ) 
+
+
+ +

+Returns the number of new mails.

Returns:
number of new mails
+ +
+

+ +

+
+ + + + + + + + +
int ConfigElem::getNumberMails (  ) 
+
+
+ +

+Returns the number of mails.

Returns:
number of mails
+ +
+

+ +

+
+ + + + + + + + +
long ConfigElem::getTotalSize (  ) 
+
+
+ +

+Returns the total size of all mails.

Returns:
total size
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::fillMailListView (KshowmailView view  ) 
+
+
+ +

+Creates for every mail a list view item and insert it into the mail list view.

Parameters:
+ + +
view pointer to the application view
+
+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::refreshAccountListItem (  ) 
+
+
+ +

+Refreshes the appropriate entry of the account list (number of mails and total size) Uses the pointer to the list view item stored in m_pViewItem. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::killPOP3Job (  ) 
+
+
+ +

+Kills a running pop3 job. +

+

+ +

+
+ + + + + + + + +
int ConfigElem::showSelectedHeaders (  ) 
+
+
+ +

+Shows the headers of all selected mails.

Returns:
continueShowHeaders - the user has clicked OK. The invoking function will show the next header

+cancelShowHeaders - the user has clicked Cancel. The invoking function will not show the next header.

+continueShowHeaders - no mails of this account are selected

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::printSetup (  )  const
+
+
+ +

+Prints the setup to stdout. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::reloadFilterSettings (  ) 
+
+
+ +

+Reloads the settings of the filters. It just calls the load() methode of the header filter. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::init (  )  [private]
+
+
+ +

+Initializes the account. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::deleteNextMail (  )  [private]
+
+
+ +

+Deletes the first mail of MailsToDelete. After a succesful deletion this mail will be removed from the list by slotMailDeleted() and this method will be invoked again. If the list is empty, it will call commitDelete.

See also:
slotMailDeleted()

+MailsToDelete

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::commitDeletion (  )  [private]
+
+
+ +

+Commits the deletion. Starts a pop3 job that will do the commit. Its signal result is connected with slotFinalizeDeletion().

See also:
slotFinalizeDeletion()
+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::showNextMail (  )  [private]
+
+
+ +

+Shows the body of the first mail in MailsToShow. After a succesful download and opening of the window this mail will be removed from the list by slotBodyDownloaded() and this method will be invoked again. If the list is empty, it will call commitDownloading().

See also:
commitDownloading()

+slotBodyDownloaded()

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::commitDownloading (  )  [private]
+
+
+ +

+Commits the downloading of mail bodies. Starts a pop3 job that will do the commit. Its signal result is connected with slotFinalizeShowMail().

See also:
slotFinalizeShowMail()
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::startKIOJob (const QString &  path  )  [private]
+
+
+ +

+Creates a POP3 transfer job (KIO Job), which will be stored in pop3Job.

Parameters:
+ + +
path command and parameters of the job as URL path
+
+ +
+

+ +

+
+ + + + + + + + +
unsigned int ConfigElem::getTimeoutTime (  )  [private]
+
+
+ +

+Returns the timeout time in seconds which is stored in the general configuration of the application. Returns POP3_DEFAULT_TIMEOUT_TIME (defined in constants.h), if no time is available. Returns POP3_MINIMUM_TIMEOUT_TIME (defined in constants.h), if the get time is less than POP3_MINIMUM_TIMEOUT_TIME.

Returns:
seconds to timeout
+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::getUIDs (  )  [private]
+
+
+ +

+First step of the refresh cycle. Gets the UIDs of the available mails from the server. It starts a KIO job to get the UIDs. The UIDs will be stored in receivedUIDs by slotReceiveUID(). When the job is ready, it will invoke slotUIDsReceived(). +

+

+ +

+
+ + + + + + + + +
void ConfigElem::getSizes (  )  [private]
+
+
+ +

+Second step of the refresh cycle. Gets the sizes of the available mails from the server. It starts a KIO job to get these. The Sizes will be temporarily stored in receivedSizes by slotReceiveSize(). When the job is ready, it will invoke slotSizesReceived(). +

+

+ +

+
+ + + + + + + + +
void ConfigElem::getHeaders (  )  [private]
+
+
+ +

+Third step of the refresh cycle. Gets the header of the new mails from the server. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::getNextHeader (  )  [private]
+
+
+ +

+Get the header of the first mail in newMails. After a succesful download this mail will be removed from the list by slotHeaderDownloaded() and this method will be invoked again. If the list is empty, it will call copyHeaders() to get the known headers from the old mail list (m_pshowrecord).

See also:
copyHeaders()

+slotHeaderDownloaded()

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::copyHeaders (  )  [private]
+
+
+ +

+Fourth step of the refresh cycle. Copies the known headers of the old mails from the old mail list to the new one. At the end it invokes swapMailLists(). +

+

+ +

+
+ + + + + + + + +
void ConfigElem::applyFilters (  )  [private]
+
+
+ +

+Sixth step of the refresh cycle. Applies the filters to the mails in the mail list. Invoked by swapMailLists(). This methode maybe starts a new refresh cycle because after a deletion or moving we need a actual list of mails on the server. To avoid a never-ending loop you must not call this methode during the second refresh cycle. Therefore it sets filterApplied to TRUE.

See also:
filterApplied

+applyFiltersDeleted()

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::applyFiltersDeleted (  )  [private]
+
+
+ +

+If there are mails to delete by filters applyFilters will call the regular deletion cycle of this class with set byFilter-flag. Therefore the deletion will not branch to commitDeletion() but to this methode. This performs a second refresh cycle to get an effective mail list from the server. This new cycle will not apply the filters again, because the flag filterApplied is set to TRUE.

See also:
applyFilters()

+filterApplied

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::cancelRefresh (  )  [private]
+
+
+ +

+Cancels the refresh. Will be invoked, when a pop3 job has reported an error. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::commitRefresh (  )  [private]
+
+
+ +

+Commits the refresh. Starts a pop3 job that will do the commit. Its signal result is connected with slotFinalizeRefresh(). Invoked by copyHeaders() if the filters was applied or applyFilters() if not second refresh was necessary.

See also:
slotFinalizeRefresh()

+applyFilters()

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::swapMailLists (  )  [private]
+
+
+ +

+Fifth step of the refresh cycle. Copies the pointer to the temporary list to m_pshowrecord. Invoked by copyHeaders() and slotUIDsReceived(). The temporary list will be the current mail list. At the end it invokes commitRefresh() if the filters were applied (filterApplied == TRUE) or deactive or it invokes applyFilters() if the filters were not applied (filterApplied == FALSE).

See also:
m_pshowrecord

+copyHeaders()

+slotUIDsReceived()

+commitRefresh()

+filterApplied

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::doDownloadActions (  )  [private]
+
+
+ +

+Does all filter actions for which we have to download the mails These are: Moving, spam check It doesn't removes they from the server. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::getNextMailForDownloadActions (  )  [private]
+
+
+ +

+Gets the body of the first mail in MailsToDownload. After a succesful download and writing into the mailbox this mail will be removed from the list by slotMailDownloadedforDownloadActions() and this method will be invoked again. If the list is empty, it will call applyFilters() to continue the filtering.

See also:
applyFilters()

+slotMailDownloadedforDownloadActions()

+ +
+

+ +

+
+ + + + + + + + + +
bool ConfigElem::isMailDir (const QDir &  path  )  [private]
+
+
+ +

+Returns whether the given directory is a maildir directory

Parameters:
+ + +
path the directory for test
+
+
Returns:
TRUE - directory is a maildir directory
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
bool ConfigElem::writeToMailBox (const QString &  mail,
const QString &  box 
) [private]
+
+
+ +

+Writes the given mail into the mailbox.

Parameters:
+ + + +
mail the Mail
box path to the mailbox
+
+
Returns:
TRUE - Writing was succesful
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotMailDeleted (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job. Removes the deleted mail from the internal mail list (m_pshowrecord). Removes the first mail from MailsToDelete and invokes deleteNextMail() again to delete the next mail. If the list is empty after it has removed the first item, it will call commitDelete(). If an error is occured, it will call slotFinalizeDeletion().

Parameters:
+ + +
job job which has emit the result signal
+
+
See also:
deleteNextMail()

+MailsToDelete

+pop3Job

+slotFinalizeDeletion()

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotFinalizeDeletion (KIO::Job *   )  [private, slot]
+
+
+ +

+Connected with the signal result of the job which commits the deletion. Finalizes the deletion of mails. Emits signal sigDeleteReady.

See also:
deleteNextMail()

+slotMailDeleted()

+sigDeleteReady

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotBodyDownloaded (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job to download a mail body. Opens a window (class ShowMailDialog) with the downloaded mail body. Removes the first mail from MailsToShow and invokes showNextMail() again to show the next mail. If the list is empty after it has removed the first item, it will call commitDownloading(). If an error is occured, it will call slotFinalizeShowMail().

Parameters:
+ + +
job job which has emit the result signal
+
+
See also:
showNextMail()

+commitDownloading()

+MailsToShow

+pop3Job

+slotFinalizeShowMail()

+ShowMailDialog

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotMailDownloadedForAction (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job to download a mail to write it into a mailbox or do a spam check. Maybe it puts the number of the downloaded mail into the list of mails to delete (MailsToDelete). Removes the first mail from MailsToMove and invokes getNextMailForMove() again to get and write the next mail. If the list is empty after it has removed the first item, it will call applyFilters() to continue the filtering. If an error is occured the current mail will not put into MailsToDelete. And it returns to applyFilters() immediately.

Parameters:
+ + +
job job which has emit the result signal
+
+
See also:
MailsToDownload

+getNextMailForDownloadActions()

+applyFilters()

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ConfigElem::slotDataMailBody (KIO::Job * ,
const QByteArray &  datas 
) [private, slot]
+
+
+ +

+Connected with signal data of the launched pop3 job to download a mail body. Receives the downloaded data from the job. This lot will be called several times during the donwload. At the last one the array is empty. It extracts the body from the downloaded data and stores it in DownloadedMailBody.

Parameters:
+ + +
datas the downloaded mail
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotFinalizeShowMail (KIO::Job *   )  [private, slot]
+
+
+ +

+Connected with the signal result of the job which commits the download of the mail bodies. Finalizes the downloading and showing of the selected mails. Emits signal sigShowBodiesReady and sets account state to idle.

See also:
showNextMail()

+slotBodyDownloaded()

+sigShowBodiesReady

+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::slotTimeout (  )  [private, slot]
+
+
+ +

+Connected with signal timeout() of the timeout timer pop3Timer. Will be called when the timer is run down, if the pop3 job has not ended on time. It kills a running pop3 job and invokes the appropriate finalize slot of the running operation. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ConfigElem::slotReceiveUID (KIO::Job * ,
const QByteArray &  data 
) [private, slot]
+
+
+ +

+Connected with the signal "data" of the pop3 transfer job which gets mail UIDs (Unique ID). Therefore it will be called when the job has received an UIDL from the server. Every received UID causes a call of this slot. When the job ends, it causes a last call but with an empty data array. The UIDs will be stored in receivedUIDs.

Parameters:
+ + +
data received data, which contain an uid
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotUIDsReceived (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job to get the UIDs. Will be invoked, when all UIDs are received and stored in receivedUIDs. Analyzes the received UID datas and creates new ShowRecordElem instances in the new mail list accordingly.

Parameters:
+ + +
job job which has emitted the result signal
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ConfigElem::slotReceiveSize (KIO::Job * ,
const QByteArray &  data 
) [private, slot]
+
+
+ +

+Connected with the signal "data" of the pop3 transfer job which gets mail Sizes. Therefore it will be called when the job has received a size from the server. Every received size causes a call of this slot. When the job ends, it causes a last call but with an empty data array. The UIDs will be stored in receivedSizes.

Parameters:
+ + +
data received data, which contain a size
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotSizesReceived (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job to get the Sizes. Will be invoked, when all Sizes are received and stored in receivedSizes. Analyzes the received datas and writes these in the appropriate mail instances.

Parameters:
+ + +
job job which has emitted the result signal
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotFinalizeRefresh (KIO::Job *   )  [private, slot]
+
+
+ +

+Connected with signal result of the job which commits the refresh. Finalizes a succesful refresh. Emits sigRefreshReady and sets account state to idle +

+

+ +

+
+ + + + + + + + + +
void ConfigElem::slotHeaderDownloaded (KIO::Job *  job  )  [private, slot]
+
+
+ +

+Connected with signal result of the launched pop3 job. Stores the received headers into the appropriate instance of the mail list. Removes the first mail from newMails and invokes getNextHeader() again to get the next header. If the list is empty after it has removed the first item, it will call copyHeaders(). If an error has occured, it will call cancelRefresh().

Parameters:
+ + +
job job which has emit the result signal
+
+
See also:
getNextHeader()

+newMails

+pop3Job

+cancelRefresh()

+copyHeaders()

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ConfigElem::slotReceiveHeader (KIO::Job * ,
const QByteArray &  data 
) [private, slot]
+
+
+ +

+Connected with the signal "data" of the pop3 transfer job which gets a mail header. Therefore it will be called when the job has received a part of the header from the server. When the job ends, it causes a last call but with an empty data array. The complete header will be stored in receivedHeader.

Parameters:
+ + +
data received data, which contains a header part
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::sigDeleteReady (QString  account  )  [signal]
+
+
+ +

+Will be emitted when all selected mails are deleted.

Parameters:
+ + +
account name of the account, which has emitted this signal
+
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigElem::sigShowBodiesReady (QString  account  )  [signal]
+
+
+ +

+Will be emitted when the bodies of all selected mails are downloaded and shown.

Parameters:
+ + +
account name of the account, which has emitted this signal
+
+ +
+

+ +

+
+ + + + + + + + +
void ConfigElem::sigConfigChanged (  )  [signal]
+
+
+ +

+Will be emitted when the settings have been changed. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::sigMessageWindowOpened (  )  [signal]
+
+
+ +

+Will be emitted, when a window to show a message was opened. +

+

+ +

+
+ + + + + + + + +
void ConfigElem::sigMessageWindowClosed (  )  [signal]
+
+
+ +

+Will be emitted, when a window to show a message was closed. +

+

+ +

+
+ + + + + + + + + +
void ConfigElem::sigRefreshReady (QString  account  )  [signal]
+
+
+ +

+Will be emitted, when the mail list was refreshed.

Parameters:
+ + +
account name of the account, which has emitted this signal
+
+ +
+

+ +

+
+ + + + + + + + + +
bool ConfigElem::isSpam (QByteArray  mail  )  const [protected]
+
+
+ +

+Forwards the given mail to SpamAssassin and returns the test result

Parameters:
+ + +
mail the mail to test
+
+
Returns:
TRUE - mail is spam
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigElem::isSpamAssassinRunning (  )  const [protected]
+
+
+ +

+Looks for a running spamd daemon of SpamAssassin.

Returns:
TRUE - SpamAssassin is running
+ +
+

+


Member Data Documentation

+ +
+
+ + + + +
int const ConfigElem::continueShowHeaders [static]
+
+
+ +

+Returned by showSelectedHeaders(), if the user has clicked OK. +

+

+ +

+
+ + + + +
int const ConfigElem::cancelShowHeaders [static]
+
+
+ +

+Returned by showSelectedHeaders(), if the user has clicked Cancel. +

+

+ +

+
+ + + + +
ConfigList* ConfigElem::appConfig [private]
+
+
+ +

+Pointer to the configuration of the application. Set by the constructors. +

+

+ +

+
+ + + + +
FilterLog* ConfigElem::FLog [private]
+
+
+ +

+Pointer to the filter log. Will be set by refreshMailList() at every refresh. +

+

+ +

+ +
+ +

+State of the account. +

+

+ +

+
+ + + + +
int ConfigElem::PasswordStorage [private]
+
+
+ +

+Type of password storage. valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET The Constants are defined in constants.h

See also:
saveOptions()

+setPasswordStorage()

+ +
+

+ +

+
+ + + + +
bool ConfigElem::m_bActive [private]
+
+
+ +

+TRUE - account is active; FALSE - account is not active +

+

+ +

+
+ + + + +
QString ConfigElem::m_strAccount [private]
+
+
+ +

+Account Name +

+

+ +

+
+ + + + +
QListViewItem* ConfigElem::m_pViewItem [private]
+
+
+ +

+Pointer to the appropriate item in the account list view. +

+

+ +

+
+ + + + +
ShowRecord* ConfigElem::m_pshowrecord [private]
+
+
+ +

+List which contains all read mails from the server. +

+

+ +

+
+ + + + +
KURL ConfigElem::m_url [private]
+
+
+ +

+Uniform Resource Locator of the account on the pop3 server. +

+

+ +

+
+ + + + +
int ConfigElem::secureLoginType [private]
+
+
+ +

+Type of secure login. See constants.h for valid values (CONFIG_VALUE_ACCOUNT_SECLOGIN_...) +

+

+ +

+
+ + + + +
bool ConfigElem::useTLS [private]
+
+
+ +

+False: TLS is enabled +

+

+ +

+
+ + + + +
QByteArray ConfigElem::mailbody [private]
+
+
+ +

+Contains a downloaded mail body. Will be set by slotDataMailBody() and read by slotBodyDownloaded(). +

+

+ +

+
+ + + + +
MailNumberList_Type ConfigElem::MailsToDelete [private]
+
+
+ +

+Contains the numbers of mails which will be deleted. Set by deleteSelectedMails() and applyFilters() and used by deleteNextMail() to get the number of the next mail to delete.

See also:
deleteSelectedMails()

+deleteNextMail()

+applyFilters()

+ +
+

+ +

+
+ + + + +
MailToDownloadMap_Type ConfigElem::MailsToDownload [private]
+
+
+ +

+Contains the numbers of the mails shall be moved for actions like moving to mailbox or spam check. Contains also some parameters (like mailbox) about the action which have to be performed. Set and used by applyFilters().

See also:
applyFilters()
+ +
+

+ +

+
+ + + + +
MailNumberList_Type ConfigElem::MailsToShow [private]
+
+
+ +

+Contains the numbers of mails for which the bodies will be shown. Set by showSelectedMails() and used by showNextMail() to get the number of the next mail to show.

See also:
showSelectedMails()

+showNextMail()

+ +
+

+ +

+
+ + + + +
MailNumberList_Type ConfigElem::newMails [private]
+
+
+ +

+Contains the numbers of new mails. Set by getHeaders() and used by getNextHeader() to download the headers of the new mails.

See also:
getHeaders()

+getNextHeader()

+ +
+

+ +

+
+ + + + +
KIO::TransferJob* ConfigElem::pop3Job [private]
+
+
+ +

+Pointer to a launched pop3 job. +

+

+ +

+
+ + + + +
QTimer* ConfigElem::pop3Timer [private]
+
+
+ +

+timeout timer. Will be started together with every pop3 job. If it runs down, slotTimeout() will be invoked. +

+

+ +

+
+ + + + +
ShowRecord* ConfigElem::tempMailList [private]
+
+
+ +

+While refreshing, this ShowRecord instance will be used to build a new mail list. After that this pointer will be assigned to m_pshowrecord. +

+

+ +

+
+ + + + +
QStringList ConfigElem::receivedUIDs [private]
+
+
+ +

+List of received mail UIDs (unique ID). Used by slotReceiveUID() and slotUIDsReceived(). +

+

+ +

+
+ + + + +
QStringList ConfigElem::receivedSizes [private]
+
+
+ +

+List of received mail sizes. Used by slotReceiveSize() and slotSizesReceived(). +

+

+ +

+
+ + + + +
QByteArray ConfigElem::receivedHeader [private]
+
+
+ +

+A received mail header. Set by slotReceiveHeader() and used by slotHeaderDownloaded(). +

+

+ +

+
+ + + + +
HeaderFilter ConfigElem::headerFilter [private]
+
+
+ +

+Every account has is own header filter instance. +

+

+ +

+
+ + + + +
bool ConfigElem::filterApplied [private]
+
+
+ +

+This is a flag whether the filters was applied during a refresh cycle. If the some mails was deleted (recommend by the filter), we need a actual list of mails from the server. Therefore a second refresh cycle will be started. To avoid a never-ending loop this flag will be set to TRUE by applyFilters(). If the second refresh is running this one will not invoke the filters. +

+

+ +

+
+ + + + +
bool ConfigElem::deletionPerformedByFilters [private]
+
+
+ +

+This flag is set by applyFilters() to indicate the deletion cycle is performed by filters and not by user. The deletion methodes need it to decide on branch targets +

+

+ +

+
+ + + + +
bool ConfigElem::refreshPerformedByFilters [private]
+
+
+ +

+This flag is set by applyFiltersDeleted() to indicate the refresh cycle is the second one after a deletion which was performed by filters. The refresh cycle need it to hold the remaining mails as new. +

+

+ +

+
+ + + + +
bool ConfigElem::downloadActionsInvoked [private]
+
+
+ +

+This flag is set to TRUE by applyFilters() to indicate the mailbodies are downloading and writing to the mailboxes or spam checking. When this is ended, applyFilters() will be called again and it reset this flag +

+

+ +

+
+ + + + +
int ConfigElem::moveCounter [private]
+
+
+ +

+Counter for moving to create an unique file name +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configelem.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configelem.cpp
+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classConfigList-members.html b/doc/html/classConfigList-members.html new file mode 100644 index 0000000..3882094 --- /dev/null +++ b/doc/html/classConfigList-members.html @@ -0,0 +1,122 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

ConfigList Member List

This is the complete list of members for ConfigList, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AccountDeletionMapConfigList [private]
AccountRefreshMapConfigList [private]
AccountShowBodiesMapConfigList [private]
allowHTML() constConfigList
AutoRefreshOn() constConfigList
beep()ConfigList
closeToTray() constConfigList
compareItems(QCollection::Item item1, QCollection::Item item2)ConfigList [protected, virtual]
configConfigList [private]
ConfigList()ConfigList
confirmClose() constConfigList
confirmDeletion()ConfigList
connectAccounts()ConfigList
ctrOpenMessageWindowsConfigList [private]
deleteSelectedMails()ConfigList
executeNewMailCommand()ConfigList
fillMailListView(KshowmailView *view)ConfigList
getAccount(const QString &name) constConfigList [protected]
getInitTime()ConfigList
getNumberMails()ConfigList
getNumberNewMails()ConfigList
getRefreshTimeInterval() constConfigList
getSelectedAccount()ConfigList
getSelectedSubjects() constConfigList
getSpamAction()ConfigList
getSpamMailbox()ConfigList
getTimeoutTime() constConfigList
getTotalSize()ConfigList
hasAccount(const QString &name) constConfigList [protected]
hasActiveAccounts()ConfigList
hasInitTime()ConfigList
hasSelectedMails()ConfigList
keepNew()ConfigList
killPOP3Jobs()ConfigList
m_bAllowHTMLConfigList [private]
m_bBeepConfigList [private]
m_bCloseMinimizesConfigList [private]
m_bCommandConfigList [private]
m_bConfirmCloseConfigList [private]
m_bConfirmDeleteConfigList [private]
m_bKeepNewConfigList [private]
m_bMinimizeConfigList [private]
m_bMinimizeToTrayConfigList [private]
m_bShowConnectionErrorsConfigList [private]
m_bShowMainWindowConfigList [private]
m_bShowMessageConfigList [private]
m_bSoundConfigList [private]
m_bStartMinimizedConfigList [private]
m_bTerminateConfigList [private]
m_nInitTimerConfigList [private]
m_nIntervalTimerConfigList [private]
m_nPop3TimerConfigList [private]
m_strCommandPathConfigList [private]
m_strSoundFileConfigList [private]
minimizeMainWindowNoNewMails()ConfigList
minimizesToTray() constConfigList
newItem(QCollection::Item item)ConfigList [protected, virtual]
playSound()ConfigList
playSound(const char *file)ConfigList
printSetup()ConfigList
quitNoNewMails()ConfigList
readStoredMails()ConfigList
refreshAccountList()ConfigList
refreshMailLists(FilterLog *log=NULL)ConfigList
refreshSetup(KListView *view)ConfigList
saveOptions()ConfigList
setAllowHTML(bool allowHTML)ConfigList
setConfirmDeletion(bool confirm)ConfigList
setInitTime(int time)ConfigList
setItem(const char *item)ConfigList
setList(QListView *list)ConfigList
setRefreshTimeInterval(unsigned int interval)ConfigList
setTimeoutTime(uint time)ConfigList
showAlertMessageForNewMails()ConfigList
showConnectionErrors() constConfigList
showMainWindowForNewMails()ConfigList
showSelectedHeaders()ConfigList
showSelectedMails()ConfigList
sigAllMessageWindowsClosed()ConfigList [signal]
sigConfigChanged()ConfigList [signal]
sigDeleteReady()ConfigList [signal]
sigMessageWindowOpened()ConfigList [signal]
sigRefreshReady()ConfigList [signal]
sigShowBodiesReady()ConfigList [signal]
slotAccountConfigChanged()ConfigList [protected, slot]
slotCheckDeletionState(QString account)ConfigList [protected, slot]
slotCheckRefreshState(QString account)ConfigList [protected, slot]
slotCheckShowBodiesState(QString account)ConfigList [protected, slot]
slotMessageWindowClosed()ConfigList [protected, slot]
slotMessageWindowOpened()ConfigList [protected, slot]
spamActionConfigList [private]
spamMailboxConfigList [private]
startMinimized() constConfigList
~ConfigList()ConfigList [inline, virtual]


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classConfigList.html b/doc/html/classConfigList.html new file mode 100644 index 0000000..948573b --- /dev/null +++ b/doc/html/classConfigList.html @@ -0,0 +1,2087 @@ + + +kshowmail.kdevelop: ConfigList Class Reference + + + + + + +

ConfigList Class Reference

#include <configlist.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Signals

void sigConfigChanged ()
void sigDeleteReady ()
void sigShowBodiesReady ()
void sigMessageWindowOpened ()
void sigAllMessageWindowsClosed ()
void sigRefreshReady ()

Public Member Functions

 ConfigList ()
virtual ~ConfigList ()
void refreshSetup (KListView *view)
int getRefreshTimeInterval () const
void setRefreshTimeInterval (unsigned int interval)
bool AutoRefreshOn () const
void setConfirmDeletion (bool confirm)
bool confirmDeletion ()
bool confirmClose () const
bool startMinimized () const
bool closeToTray () const
bool minimizesToTray () const
bool showConnectionErrors () const
void setAllowHTML (bool allowHTML)
bool allowHTML () const
bool hasActiveAccounts ()
uint getTimeoutTime () const
void setTimeoutTime (uint time)
ConfigElemgetSelectedAccount ()
void deleteSelectedMails ()
void connectAccounts ()
QStringList getSelectedSubjects () const
bool hasSelectedMails ()
void showSelectedMails ()
void refreshMailLists (FilterLog *log=NULL)
int getNumberNewMails ()
int getNumberMails ()
long getTotalSize ()
void fillMailListView (KshowmailView *view)
bool showMainWindowForNewMails ()
bool showAlertMessageForNewMails ()
bool quitNoNewMails ()
bool minimizeMainWindowNoNewMails ()
int getInitTime ()
void setInitTime (int time)
bool hasInitTime ()
void refreshAccountList ()
void killPOP3Jobs ()
void showSelectedHeaders ()
void executeNewMailCommand ()
bool keepNew ()
void printSetup ()
void saveOptions ()
void readStoredMails ()
FilterAction_Type getSpamAction ()
QString getSpamMailbox ()
bool setItem (const char *item)
void setList (QListView *list)
void beep ()
void playSound ()
void playSound (const char *file)

Protected Slots

void slotAccountConfigChanged ()
void slotCheckDeletionState (QString account)
void slotCheckShowBodiesState (QString account)
void slotMessageWindowOpened ()
void slotMessageWindowClosed ()
void slotCheckRefreshState (QString account)

Protected Member Functions

virtual QCollection::Item newItem (QCollection::Item item)
virtual int compareItems (QCollection::Item item1, QCollection::Item item2)
bool hasAccount (const QString &name) const
ConfigElemgetAccount (const QString &name) const

Private Attributes

KConfig * config
int m_nIntervalTimer
uint m_nPop3Timer
AccountTaskMap_Type AccountDeletionMap
AccountTaskMap_Type AccountShowBodiesMap
AccountTaskMap_Type AccountRefreshMap
bool m_bConfirmDelete
bool m_bAllowHTML
int ctrOpenMessageWindows
int m_nInitTimer
bool m_bShowMessage
bool m_bShowMainWindow
bool m_bBeep
bool m_bSound
QString m_strSoundFile
bool m_bCommand
QString m_strCommandPath
bool m_bTerminate
bool m_bMinimize
bool m_bShowConnectionErrors
bool m_bConfirmClose
bool m_bStartMinimized
bool m_bCloseMinimizes
bool m_bMinimizeToTray
bool m_bKeepNew
QString spamMailbox
FilterAction_Type spamAction
+


Detailed Description

+Contains the application and account settings. The account settings are stored in ConfigElem objects.
Author:
Eggert Ehmke

+Ulrich Weigelt

+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
ConfigList::ConfigList (  ) 
+
+
+ +

+Constructor. +

+

+ +

+
+ + + + + + + + +
virtual ConfigList::~ConfigList (  )  [inline, virtual]
+
+
+ +

+Destructor +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
void ConfigList::refreshSetup (KListView *  view  ) 
+
+
+ +

+Reads the setup from the configuration file (kshowmailrc) and sets the properties.

Parameters:
+ + +
view pointer to the account list view
+
+ +
+

+ +

+
+ + + + + + + + +
int ConfigList::getRefreshTimeInterval (  )  const
+
+
+ +

+Returns the auto refresh time interval.

Returns:
refresh time interval [minutes]
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::setRefreshTimeInterval (unsigned int  interval  ) 
+
+
+ +

+Sets the auto refresh time interval.

Parameters:
+ + +
interval the new time interval [minutes]
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::AutoRefreshOn (  )  const
+
+
+ +

+Returns whether auto refresh is on.

Returns:
TRUE - auto refresh is on; FALSE - auto refresh is off
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::setConfirmDeletion (bool  confirm  ) 
+
+
+ +

+Sets whether the user has to confirm a deletion.

Parameters:
+ + +
confirm TRUE - user has to confirm; FALSE - the user does not have to confirm
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::confirmDeletion (  ) 
+
+
+ +

+Returns whether the user has to confirm a deletion.

Returns:
TRUE - the user has to confirm

+FALSE - the user does not have to confirm

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::confirmClose (  )  const
+
+
+ +

+Returns whether the user has to confirm window close.

Returns:
TRUE - user has to confirm

+FALSE - user does not have to confirm

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::startMinimized (  )  const
+
+
+ +

+Returns whether the app shall start minimized.

Returns:
TRUE - start minimized

+FALSE - don't start minimized

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::closeToTray (  )  const
+
+
+ +

+Returns whether the close button leaves the application running in tray.

Returns:
TRUE - leaves running

+FALSE - app will be closed

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::minimizesToTray (  )  const
+
+
+ +

+Returns whether minimizes to the tray rather than to the taskbar.

Returns:
TRUE - minimizes to the tray

+FALSE - minimizes to the taskbar

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::showConnectionErrors (  )  const
+
+
+ +

+Returns whether connection errors will be shown during refresh.

Returns:
TRUE - show errors

+FALSE - don't show errors

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::setAllowHTML (bool  allowHTML  ) 
+
+
+ +

+Sets whether the mail show dialog has to use HTML.

Parameters:
+ + +
allowHTML TRUE - the dialog has to use HTML; FALSE - the dialog must not use HTML
+
+
See also:
m_bAllowHTML
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::allowHTML (  )  const
+
+
+ +

+Returns whether the mail show dialog has to use HTML.

Returns:
TRUE - the dialog has to use HTML

+FALSE - the dialog must not use HTML

+
See also:
m_bAllowHTML
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::hasActiveAccounts (  ) 
+
+
+ +

+Returns whether there are active accounts. Doesn't set the current account.

Returns:
TRUE - Yes, there are active accounts (at least one :o) ); FALSE - no active accounts
+ +
+

+ +

+
+ + + + + + + + +
uint ConfigList::getTimeoutTime (  )  const
+
+
+ +

+Returns the number of seconds the application will be wait for a pop3 job.

Returns:
seconds to timeout
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::setTimeoutTime (uint  time  ) 
+
+
+ +

+Sets the number of seconds the application will be wait for a pop3 job. Minimum time is POP3_MINIMUM_TIMEOUT_TIME seconds.

Parameters:
+ + +
time seconds to timeout
+
+
See also:
constants.h
+ +
+

+ +

+
+ + + + + + + + +
ConfigElem * ConfigList::getSelectedAccount (  ) 
+
+
+ +

+Returns the first account, for which an appropriate item is selected in the account list view.

Returns:
pointer to the selected account object

+NULL - no account is selected

+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::deleteSelectedMails (  ) 
+
+
+ +

+Deletes all selected mails from the servers and the mail lists. This just starts the deletion and returns after then. When all accounts are ready the signal sigDeleteReady will be emitted. +

+

+ +

+
+ + + + + + + + +
void ConfigList::connectAccounts (  ) 
+
+
+ +

+Connects the signals of the accounts with the slots of this class. It is necessary to do this after an account has been appended to the list and it is a good idea to call this method before you invoke an operation on an account that may emit a signal. The reason is that the pointer list seemingly often changes the adresses of the inserted accounts. After that the connections are corrupt. +

+

+ +

+
+ + + + + + + + +
QStringList ConfigList::getSelectedSubjects (  )  const
+
+
+ +

+Returns the subjects of the selected mails.

Returns:
subjects of selected mails
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::hasSelectedMails (  ) 
+
+
+ +

+Returns whether there are mails in this list which are selected in the list view.

Returns:
TRUE - there are selected mails

+FALSE - there aren't selected mails

+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::showSelectedMails (  ) 
+
+
+ +

+Downloads and shows the bodies of the selected mails. This just starts the download and returns after then. When all bodies are downloaded and shown the signal sigShowBodiesReady will be emitted. +

+

+ +

+
+ + + + + + + + + +
void ConfigList::refreshMailLists (FilterLog log = NULL  ) 
+
+
+ +

+Refreshes the mail list of all accounts. This just starts the refresh and returns after then. When all accounts have refreshed their mail list the signal sigRefreshReady will be emitted.

Parameters:
+ + +
log Pointer to the filter log.
+
+ +
+

+ +

+
+ + + + + + + + +
int ConfigList::getNumberNewMails (  ) 
+
+
+ +

+Returns the number of new mails.

Returns:
number of new mails
+ +
+

+ +

+
+ + + + + + + + +
int ConfigList::getNumberMails (  ) 
+
+
+ +

+Returns the number of mails.

Returns:
number of mails
+ +
+

+ +

+
+ + + + + + + + +
long ConfigList::getTotalSize (  ) 
+
+
+ +

+Returns the total size of all mails.

Returns:
total size
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::fillMailListView (KshowmailView view  ) 
+
+
+ +

+Creates for every mail a list view item and inserts it into the mail list view.

Parameters:
+ + +
view pointer to the application view
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::showMainWindowForNewMails (  ) 
+
+
+ +

+Returns whether the main window will be shown, if new mails was received.

Returns:
TRUE - main window will be shown

+FALSE - main window will not be shown

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::showAlertMessageForNewMails (  ) 
+
+
+ +

+Returns whether an alert message will be shown if new mails were received.

Returns:
TRUE - will be shown

+FALSE - will not be shown

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::quitNoNewMails (  ) 
+
+
+ +

+Returns whether the app will be terminated if no new mails were received.

Returns:
TRUE - will be terminated

+FALSE - will not be terminated

+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::minimizeMainWindowNoNewMails (  ) 
+
+
+ +

+Returns whether the main window will be minimized, if no new mails were received.

Returns:
TRUE - main window will be minimized

+FALSE - main window will not be minimized

+ +
+

+ +

+
+ + + + + + + + +
int ConfigList::getInitTime (  ) 
+
+
+ +

+Returns the configured time to the first refresh.

Returns:
time to the first refresh (seconds)
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::setInitTime (int  time  ) 
+
+
+ +

+Sets the time to the first refresh.

Parameters:
+ + +
time time (seconds) to the first refresh
+
+ +
+

+ +

+
+ + + + + + + + +
bool ConfigList::hasInitTime (  ) 
+
+
+ +

+Returns whether a time to first refresh is configured.

Returns:
TRUE - init time configured

+FALSE - no init time configured

+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::refreshAccountList (  ) 
+
+
+ +

+Refreshes the account list (number of mails and total size). +

+

+ +

+
+ + + + + + + + +
void ConfigList::killPOP3Jobs (  ) 
+
+
+ +

+Kills all running pop3 jobs. +

+

+ +

+
+ + + + + + + + +
void ConfigList::showSelectedHeaders (  ) 
+
+
+ +

+Shows the headers of all selected mails. +

+

+ +

+
+ + + + + + + + +
void ConfigList::executeNewMailCommand (  ) 
+
+
+ +

+Executes the configure new mail command. Does nothing, if the command option is switched off (m_bCommand == false). +

+

+ +

+
+ + + + + + + + +
bool ConfigList::keepNew (  ) 
+
+
+ +

+Returns whether all new mails will keep new status until the app is closed.

Returns:
TRUE - mails keep new status at next refresh

+FALSE - mails don't keep new status at next refresh

+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::printSetup (  ) 
+
+
+ +

+Prints the setup. +

+

+ +

+
+ + + + + + + + +
void ConfigList::saveOptions (  ) 
+
+
+ +

+Saves the current mails data and the account setups. The mails data will be saved into an XML file (kshowmail.xml). The account setups will be saved into the application config file (kshowmailrc). +

+

+ +

+
+ + + + + + + + +
void ConfigList::readStoredMails (  ) 
+
+
+ +

+Reads stored mails data. At every setup saving (e.g. at exit) the mails data will be stored into the file kshowmail.xml. At application start we read this file to identify mails which are not new at first refresh. +

+

+ +

+
+ + + + + + + + +
FilterAction_Type ConfigList::getSpamAction (  ) 
+
+
+ +

+Returns the action to used on spam mails

Returns:
action to used on spam mails
+ +
+

+ +

+
+ + + + + + + + +
QString ConfigList::getSpamMailbox (  ) 
+
+
+ +

+Returns the mailbox for spam mails

Returns:
mailbox for spam
+ +
+

+ +

+
+ + + + + + + + + +
bool ConfigList::setItem (const char *  item  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ConfigList::setList (QListView *  list  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void ConfigList::beep (  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void ConfigList::playSound (  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ConfigList::playSound (const char *  file  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
QCollection::Item ConfigList::newItem (QCollection::Item  item  )  [protected, virtual]
+
+
+ +

+Makes a copy from the given account object and returns the pointer to it. Reimplementation of QPtrList::newItem(). Used by QPtrList to add new items.

Parameters:
+ + +
item account object
+
+
Returns:
pointer to the new account object
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
int ConfigList::compareItems (QCollection::Item  item1,
QCollection::Item  item2 
) [protected, virtual]
+
+
+ +

+Compares two ConfigElem objects. Reimplementation of QPtrList::compareItems(). Used by inSort().

Parameters:
+ + + +
item1 account 1
item2 account 2
+
+
Returns:
0 if account name 1 == account name 2

+nonzero if account name 2 != account name 2

+ +
+

+ +

+
+ + + + + + + + + +
bool ConfigList::hasAccount (const QString &  name  )  const [protected]
+
+
+ +

+Returns whether the given account is in the list

Parameters:
+ + +
name name of the searched account
+
+
Returns:
TRUE - account is existent

+FALSE - account is not existent

+ +
+

+ +

+
+ + + + + + + + + +
ConfigElem * ConfigList::getAccount (const QString &  name  )  const [protected]
+
+
+ +

+Returns the pointer to the account named like the given name.

Parameters:
+ + +
name of the searched account
+
+
Returns:
account or NULL, if the account was not found
+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::slotAccountConfigChanged (  )  [protected, slot]
+
+
+ +

+Connected with signal sigConfigChanged of all accounts. Emits the signal sigConfigChanged. +

+

+ +

+
+ + + + + + + + + +
void ConfigList::slotCheckDeletionState (QString  account  )  [protected, slot]
+
+
+ +

+Connected with signal sigDeleteReady of all accounts. When an account has sent this signal its appropriate item in AccountDeletionMap will set to FALSE. When all accounts have done the deletion it will emit signal sigDeleteReady.

Parameters:
+ + +
account name of the account which has emitted the signal
+
+
See also:
AccountDeletionMap
+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::slotCheckShowBodiesState (QString  account  )  [protected, slot]
+
+
+ +

+Connected with signal sigShowBodiesReady of all accounts. When an account has sent this signal its appropriate item in AccountShowBodiesMap will set to FALSE. When all accounts have shown the mail it will emit signal sigShowBodiesReady.

Parameters:
+ + +
account name of the account which has emitted the signal
+
+
See also:
AccountShowBodiesMap
+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::slotMessageWindowOpened (  )  [protected, slot]
+
+
+ +

+Connected with signal sigMessageWindowOpened of all accounts. When an account has sent this signal the counter ctrOpenMessageWindows will be incremented. When the counter was incremented from zero (the first window was opened) the signal sigMessageWindowOpened will be emitted.

See also:
ctrOpenMessageWindows

+sigMessageWindowOpened

+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::slotMessageWindowClosed (  )  [protected, slot]
+
+
+ +

+Connected with signal sigMessageWindowClosed of all accounts. When an account has sent this signal the counter ctrOpenMessageWindows will be decremented. When the counter has reached zero the signal sigAllMessageWindowsClosed will be emitted.

See also:
ctrOpenMessageWindows

+sigAllMessageWindowsClosed

+ +
+

+ +

+
+ + + + + + + + + +
void ConfigList::slotCheckRefreshState (QString  account  )  [protected, slot]
+
+
+ +

+Connected with signal sigRefreshReady of all accounts. When an account has sent this signal its appropriate item in AccountRefreshMap will set to FALSE. When all accounts have refreshed their mail list it will emit signal sigRefreshReady.

Parameters:
+ + +
account name of the account which has emitted the signal
+
+
See also:
AccountRefreshMap
+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::sigConfigChanged (  )  [signal]
+
+
+ +

+Will be emitted when the configuration of an account or of the app was changed. +

+

+ +

+
+ + + + + + + + +
void ConfigList::sigDeleteReady (  )  [signal]
+
+
+ +

+Will be emitted when all selected mails are deleted. +

+

+ +

+
+ + + + + + + + +
void ConfigList::sigShowBodiesReady (  )  [signal]
+
+
+ +

+Will be emitted when all selected mails are shown. +

+

+ +

+
+ + + + + + + + +
void ConfigList::sigMessageWindowOpened (  )  [signal]
+
+
+ +

+Will be emitted by slotMessageWindowOpened when an account has opened a window to show a mail.

See also:
slotMessageWindowOpened
+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::sigAllMessageWindowsClosed (  )  [signal]
+
+
+ +

+Will be emitted by slotMessageWindowClosed when all accounts have closed their windows to show mails.

See also:
slotMessageWindowClosed
+ +
+

+ +

+
+ + + + + + + + +
void ConfigList::sigRefreshReady (  )  [signal]
+
+
+ +

+Will be emitted, when all accounts have refreshed their mail list. +

+

+


Member Data Documentation

+ +
+
+ + + + +
KConfig* ConfigList::config [private]
+
+
+ +

+Connector to the configuration file +

+

+ +

+
+ + + + +
int ConfigList::m_nIntervalTimer [private]
+
+
+ +

+Time in minutes to the next automatic refresh. +

+

+ +

+
+ + + + +
uint ConfigList::m_nPop3Timer [private]
+
+
+ +

+Number of seconds the application will wait for a pop3 job to complete. +

+

+ +

+
+ + + + +
AccountTaskMap_Type ConfigList::AccountDeletionMap [private]
+
+
+ +

+This map is used by the delete methods. deleteSelectedMails() clears it and after that inserts for every account an item. The Key is the account name and the data is TRUE. When slotCheckDeletionState() is invoked by a signal sent by an account, this slot will set the appropriate item data to FALSE. If the data of all items are set to FALSE, the method will know all accounts have ended the deletion and will emit sigDeleteReady.

See also:
deleteSelectedMails()

+slotCheckDeletionState()

+ +
+

+ +

+
+ + + + +
AccountTaskMap_Type ConfigList::AccountShowBodiesMap [private]
+
+
+ +

+This map is used by the methods to show the mail body. showSelectedMails() clears it and after that inserts for every account an item. The Key is the account name and the data is TRUE. When slotCheckShowBodiesState() is invoked by a signal sent by an account, this slot will set the appropriate item data to FALSE. If the data of all items are set to FALSE, the method will know all accounts have shown the mail body and will emit sigShowBodiesReady.

See also:
showSelectedMails()

+slotCheckShowBodiesState()

+ +
+

+ +

+
+ + + + +
AccountTaskMap_Type ConfigList::AccountRefreshMap [private]
+
+
+ +

+This map is used by the methods to refresh the account mail lists. refreshMailLists() clears it and after that inserts for every account an item. The Key ist the account name and the data is TRUE. When slotCheckRefreshState() is invoked by a signal sent by an account, this slot will set the appropriate item data to FALSE. If the data of all items are set to FALSE, the method will know all accounts have refreshed their mail list and will emit sigRefreshReady.

See also:
refreshMailLists()

+slotCheckRefreshState()

+ +
+

+ +

+
+ + + + +
bool ConfigList::m_bConfirmDelete [private]
+
+
+ +

+TRUE - the user has to confirm a deletion, FALSE - the user does not have to confirm a deletion +

+

+ +

+
+ + + + +
bool ConfigList::m_bAllowHTML [private]
+
+
+ +

+TRUE - allow HTML formatting in the mail show dialog box FALSE - don't allow HTML formatting

See also:
setAllowHTML()

+allowHTML()

+ +
+

+ +

+
+ + + + +
int ConfigList::ctrOpenMessageWindows [private]
+
+
+ +

+Number of windows, which have been opened by the accounts to show mails. Used by slotMessageWindowOpened() and slotMessageWindowClosed().

See also:
slotMessageWindowOpened

+slotMessageWindowClosed

+ +
+

+ +

+
+ + + + +
int ConfigList::m_nInitTimer [private]
+
+
+ +

+Contains the time (seconds) to first refresh.

See also:
setInitTime()

+getInitTime()

+ +
+

+ +

+
+ + + + +
bool ConfigList::m_bShowMessage [private]
+
+
+ +

+TRUE - If a new mail is arrived an alert window will be shown. +

+

+ +

+
+ + + + +
bool ConfigList::m_bShowMainWindow [private]
+
+
+ +

+TRUE - If a new mail is arrived the main window will be shown. +

+

+ +

+
+ + + + +
bool ConfigList::m_bBeep [private]
+
+
+ +

+TRUE - If a new mail is arrived the system will beep. +

+

+ +

+
+ + + + +
bool ConfigList::m_bSound [private]
+
+
+ +

+TRUE - If a new mail is arrived a sound will be played. +

+

+ +

+
+ + + + +
QString ConfigList::m_strSoundFile [private]
+
+
+ +

+Sound file which will be played if a new mail is arrived. +

+

+ +

+
+ + + + +
bool ConfigList::m_bCommand [private]
+
+
+ +

+TRUE - If a new mail is arrived a command will be executed. +

+

+ +

+
+ + + + +
QString ConfigList::m_strCommandPath [private]
+
+
+ +

+Path to command which will be executed if a new mail is arrived. +

+

+ +

+
+ + + + +
bool ConfigList::m_bTerminate [private]
+
+
+ +

+TRUE - If no new mail is arrived the application will be ended. +

+

+ +

+
+ + + + +
bool ConfigList::m_bMinimize [private]
+
+
+ +

+TRUE - If no new mail is arrived the main window will be minimized. +

+

+ +

+
+ + + + +
bool ConfigList::m_bShowConnectionErrors [private]
+
+
+ +

+TRUE - If a connection error occures during refresh an error message will be shown. +

+

+ +

+
+ + + + +
bool ConfigList::m_bConfirmClose [private]
+
+
+ +

+TRUE - The user has to confirm window close. +

+

+ +

+
+ + + + +
bool ConfigList::m_bStartMinimized [private]
+
+
+ +

+TRUE - the app starts minimized. +

+

+ +

+
+ + + + +
bool ConfigList::m_bCloseMinimizes [private]
+
+
+ +

+TRUE - the close button leaves the application running in tray +

+

+ +

+
+ + + + +
bool ConfigList::m_bMinimizeToTray [private]
+
+
+ +

+TRUE - minimizes to the tray rather than to the taskbar +

+

+ +

+
+ + + + +
bool ConfigList::m_bKeepNew [private]
+
+
+ +

+TRUE - mails keep new until termination +

+

+ +

+
+ + + + +
QString ConfigList::spamMailbox [private]
+
+
+ +

+Mailbox for Spam, if configured +

+

+ +

+ +
+ +

+Action which shall be done, if the mail is Spam +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configlist.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configlist.cpp
+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classEditDialog-members.html b/doc/html/classEditDialog-members.html new file mode 100644 index 0000000..39f5388 --- /dev/null +++ b/doc/html/classEditDialog-members.html @@ -0,0 +1,44 @@ + + +kshowmail: Member List + + + + + + +

EditDialog Member List

This is the complete list of members for EditDialog, including all inherited members.

+ + + + + + + + + + + + + + + + +
_buttonCancelEditDlg
_buttonOkEditDlg
_buttonReplyEditDlg
_rowEditDialog [private]
addWidget(const QString &label, const QString &value)EditDialog
EditDialog(QWidget *parent, const char *name, const char *content, bool html)EditDialog
EditDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)EditDlg
EditDlgLayoutEditDlg [protected]
headerlayoutEditDlg [protected]
languageChange()EditDlg [protected, virtual, slot]
layout3EditDlg [protected]
m_EditEditDlg
slotReplyClicked()EditDialog [virtual, slot]
Spacer15EditDlg [protected]
~EditDialog()EditDialog
~EditDlg()EditDlg


Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classEditDialog.html b/doc/html/classEditDialog.html new file mode 100644 index 0000000..33b8c23 --- /dev/null +++ b/doc/html/classEditDialog.html @@ -0,0 +1,63 @@ + + +kshowmail: EditDialog Class Reference + + + + + + +

EditDialog Class Reference

#include <editdialog.h> +

+

Inheritance diagram for EditDialog: +

+ +EditDlg + +List of all members. + + + + + + + + + + + + + + +

Public Slots

+virtual void slotReplyClicked ()

Public Member Functions

EditDialog (QWidget *parent, const char *name, const char *content, bool html)
~EditDialog ()
+void addWidget (const QString &label, const QString &value)

Private Attributes

+int _row
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 28 of file editdialog.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classEditDialog.png b/doc/html/classEditDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..91976e26da59d7b5c0502703bdf6469d71cc1de8 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^u0R~X!VDz$?pSIBq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$V@Z%-FoVOh8)-n!D^C~45RcBcmks$2EAX%eRKM)m*=Xr_C2mFV zyZV+}GfV;%Ojk)rB&{@QRsZZMT(NWO0pm*3wTX)~lDp=7>6)D;-Fou*tqBZWm;85a zth?^E?P93$#B62F8=pib>;396Qtf}3Hm^pnudH6`dDfJCsmfJJUh8gV+g<+rF68UF z<^K%(OM4>2>o?08zlzzu^K9-h$s%os0%`xufX&QK4i~hqu-Zs#Y(BK@=rTn{ktfqj zoSST3JUMv6Y*&_A4ZGDd$J5Da?aS@ho1e@sxVrqw$sKdm=W{pTl~=Ku|Jwa0n>Eji jdXwj$AJ6J5f6i>t*t25ePD?qUuNgdD{an^LB{Ts5%IA_9 literal 0 HcmV?d00001 diff --git a/doc/html/classEditDlg-members.html b/doc/html/classEditDlg-members.html new file mode 100644 index 0000000..119c66b --- /dev/null +++ b/doc/html/classEditDlg-members.html @@ -0,0 +1,40 @@ + + +kshowmail: Member List + + + + + + +

EditDlg Member List

This is the complete list of members for EditDlg, including all inherited members.

+ + + + + + + + + + + + +
_buttonCancelEditDlg
_buttonOkEditDlg
_buttonReplyEditDlg
EditDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)EditDlg
EditDlgLayoutEditDlg [protected]
headerlayoutEditDlg [protected]
languageChange()EditDlg [protected, virtual, slot]
layout3EditDlg [protected]
m_EditEditDlg
slotReplyClicked()EditDlg [virtual, slot]
Spacer15EditDlg [protected]
~EditDlg()EditDlg


Generated on Wed May 16 21:15:20 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classEditDlg.html b/doc/html/classEditDlg.html new file mode 100644 index 0000000..c8298fb --- /dev/null +++ b/doc/html/classEditDlg.html @@ -0,0 +1,83 @@ + + +kshowmail: EditDlg Class Reference + + + + + + +

EditDlg Class Reference

Inheritance diagram for EditDlg: +

+ +EditDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotReplyClicked ()

Public Member Functions

EditDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~EditDlg ()

Public Attributes

+KTextBrowser * m_Edit
+QPushButton * _buttonReply
+QPushButton * _buttonOk
+QPushButton * _buttonCancel

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QVBoxLayout * EditDlgLayout
+QGridLayout * headerlayout
+QHBoxLayout * layout3
+QSpacerItem * Spacer15
+

Detailed Description

+ +

+ +

+Definition at line 23 of file EditDlg.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:20 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classEditDlg.png b/doc/html/classEditDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..f546770ad56ae1233b16fc9a7c5dd492a36c2096 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^u0R~X!VDz$?pSIBq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$V@Z%-FoVOh8)-n!drud~5RcBcm#z5@EAX%->?zr{v(eJ=O5BQ| zrFZ^wY&FbPmMdjrYm4COdNBFtLSKdL1_>XsBAI8|J2-IsVvGGO*?Q90Or;?pZHctP zx1OBEtJ4Iclr;~05)o#rO`AFCc!9aUo%n*g{?B9X{{HHt?jP*1R_=P$voqT-U%8xH zbL!4F%e4D{&z_qR`Fz)zR6XPKHm|C#3PW{Q4`d?O{~ z5ctc}eAyKCxi%6v-NMfvdGB!CCa3bupM-k;zX{W`lzXpZ1>+GLO o+a*r==a&7iKIU?bwQp{IicPnbu+&k0pw}5ZUHx3vIVCg!02>FA?*IS* literal 0 HcmV?d00001 diff --git a/doc/html/classFilter-members.html b/doc/html/classFilter-members.html new file mode 100644 index 0000000..a9befa8 --- /dev/null +++ b/doc/html/classFilter-members.html @@ -0,0 +1,39 @@ + + +kshowmail: Member List + + + + + + +

Filter Member List

This is the complete list of members for Filter, including all inherited members.

+ + + + + + + + + + + +
_filterFilter [static]
_statusFilter [static]
automatic enum value (defined in Filter)Filter
Filter()Filter [private]
filterStatus enum nameFilter
matches(ShowRecordElem *)Filter [static]
off enum value (defined in Filter)Filter
on enum value (defined in Filter)Filter
readOptions(KConfig *config)Filter [static]
saveOptions(KConfig *config)Filter [static]
~Filter()Filter [private]


Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilter.html b/doc/html/classFilter.html new file mode 100644 index 0000000..30d435b --- /dev/null +++ b/doc/html/classFilter.html @@ -0,0 +1,67 @@ + + +kshowmail: Filter Class Reference + + + + + + +

Filter Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + +

Public Types

enum  filterStatus { off, +on, +automatic + }

Static Public Member Functions

+static FilterElemmatches (ShowRecordElem *)
+static void readOptions (KConfig *config)
+static void saveOptions (KConfig *config)

Static Public Attributes

+static FilterList _filter
+static filterStatus _status

Private Member Functions

Filter ()
~Filter ()
+

Detailed Description

+ +

+ +

+Definition at line 34 of file filter.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterDialog-members.html b/doc/html/classFilterDialog-members.html new file mode 100644 index 0000000..d9f7eed --- /dev/null +++ b/doc/html/classFilterDialog-members.html @@ -0,0 +1,58 @@ + + +kshowmail: Member List + + + + + + +

FilterDialog Member List

This is the complete list of members for FilterDialog, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buttonAddFilterDlg
_buttonCancelFilterDlg
_buttonCopyFilterDlg
_buttonDeleteFilterDlg
_buttonEditFilterDlg
_buttonOkFilterDlg
_comboFilterFilterDlg
_filtersFilterDialog [private]
_radioAutoFilterDlg
_radioOffFilterDlg
_radioOnFilterDlg
buttonGroup1FilterDlg
buttonGroup1LayoutFilterDlg [protected]
FilterDialog(QWidget *parent=0, const char *name=0)FilterDialog
FilterDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)FilterDlg
FilterDlgLayoutFilterDlg [protected]
languageChange()FilterDlg [protected, virtual, slot]
Layout6FilterDlg [protected]
QGroupBox_1FilterDlg
QGroupBox_1LayoutFilterDlg [protected]
slotAdd()FilterDialog [virtual, slot]
slotAutomaticActivated()FilterDialog [virtual, slot]
slotCopy()FilterDialog [virtual, slot]
slotDelete()FilterDialog [virtual, slot]
slotEdit()FilterDialog [virtual, slot]
slotFilterActivated(int)FilterDialog [virtual, slot]
slotOk()FilterDialog [virtual, slot]
Spacer11FilterDlg [protected]
~FilterDialog()FilterDialog
~FilterDlg()FilterDlg


Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterDialog.html b/doc/html/classFilterDialog.html new file mode 100644 index 0000000..240836e --- /dev/null +++ b/doc/html/classFilterDialog.html @@ -0,0 +1,78 @@ + + +kshowmail: FilterDialog Class Reference + + + + + + +

FilterDialog Class Reference

#include <filterdialog.h> +

+

Inheritance diagram for FilterDialog: +

+ +FilterDlg + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotAdd ()
+virtual void slotEdit ()
+virtual void slotCopy ()
+virtual void slotDelete ()
+virtual void slotOk ()
+virtual void slotFilterActivated (int)
+virtual void slotAutomaticActivated ()

Public Member Functions

FilterDialog (QWidget *parent=0, const char *name=0)
~FilterDialog ()

Private Attributes

+FilterList _filters
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 31 of file filterdialog.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterDialog.png b/doc/html/classFilterDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..24b20e3afb46bf6978abf82985e3c03ba85b74eb GIT binary patch literal 352 zcmV-m0iXVfP)Klfezc zAPhzErDvNBV1lY$sHf~dLXAz5Hg(jmDu*KFg9xC9?N3CyL%OD0MKlaoL~^OxUAn3z zZY&& literal 0 HcmV?d00001 diff --git a/doc/html/classFilterDlg-members.html b/doc/html/classFilterDlg-members.html new file mode 100644 index 0000000..8767d66 --- /dev/null +++ b/doc/html/classFilterDlg-members.html @@ -0,0 +1,55 @@ + + +kshowmail: Member List + + + + + + +

FilterDlg Member List

This is the complete list of members for FilterDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buttonAddFilterDlg
_buttonCancelFilterDlg
_buttonCopyFilterDlg
_buttonDeleteFilterDlg
_buttonEditFilterDlg
_buttonOkFilterDlg
_comboFilterFilterDlg
_radioAutoFilterDlg
_radioOffFilterDlg
_radioOnFilterDlg
buttonGroup1FilterDlg
buttonGroup1LayoutFilterDlg [protected]
FilterDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)FilterDlg
FilterDlgLayoutFilterDlg [protected]
languageChange()FilterDlg [protected, virtual, slot]
Layout6FilterDlg [protected]
QGroupBox_1FilterDlg
QGroupBox_1LayoutFilterDlg [protected]
slotAdd()FilterDlg [virtual, slot]
slotAutomaticActivated()FilterDlg [virtual, slot]
slotCopy()FilterDlg [virtual, slot]
slotDelete()FilterDlg [virtual, slot]
slotEdit()FilterDlg [virtual, slot]
slotFilterActivated(int)FilterDlg [virtual, slot]
slotOk()FilterDlg [virtual, slot]
Spacer11FilterDlg [protected]
~FilterDlg()FilterDlg


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterDlg.html b/doc/html/classFilterDlg.html new file mode 100644 index 0000000..e1da3d2 --- /dev/null +++ b/doc/html/classFilterDlg.html @@ -0,0 +1,128 @@ + + +kshowmail: FilterDlg Class Reference + + + + + + +

FilterDlg Class Reference

Inheritance diagram for FilterDlg: +

+ +FilterDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotAdd ()
+virtual void slotCopy ()
+virtual void slotDelete ()
+virtual void slotEdit ()
+virtual void slotOk ()
+virtual void slotFilterActivated (int)
+virtual void slotAutomaticActivated ()

Public Member Functions

FilterDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~FilterDlg ()

Public Attributes

+QPushButton * _buttonOk
+QPushButton * _buttonCancel
+QButtonGroup * buttonGroup1
+QRadioButton * _radioOff
+QRadioButton * _radioOn
+QRadioButton * _radioAuto
+QGroupBox * QGroupBox_1
+QComboBox * _comboFilter
+QPushButton * _buttonAdd
+QPushButton * _buttonEdit
+QPushButton * _buttonCopy
+QPushButton * _buttonDelete

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QGridLayout * FilterDlgLayout
+QHBoxLayout * Layout6
+QSpacerItem * Spacer11
+QGridLayout * buttonGroup1Layout
+QGridLayout * QGroupBox_1Layout
+

Detailed Description

+ +

+ +

+Definition at line 26 of file FilterDlg.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterDlg.png b/doc/html/classFilterDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..1bff8a562b583fbb63c2f7dd699c28911daf75db GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^zCawn!VDzWOWO9Jw*cF zGdyZw?hP>Fdw51rR>n-P_w!BrUC%bS>RU=r`14OIz3%n*;y-*MkLUc0$+bQ5>fB-1 z`%4#>uW*@Bz2^VZYo=iqr~cl4fA;R3vu6+OJ@;#lvv<|Bj%5#w1fMHiR$0F2_nqQh zcP;Z8j(gg9dN~=smc98pNTYm?k7P*Cetl$ xg;;xfO7(v6u0qQbqK^{p8nHg#?q|qGkX9 literal 0 HcmV?d00001 diff --git a/doc/html/classFilterElem-members.html b/doc/html/classFilterElem-members.html new file mode 100644 index 0000000..24039ee --- /dev/null +++ b/doc/html/classFilterElem-members.html @@ -0,0 +1,46 @@ + + +kshowmail: Member List + + + + + + +

FilterElem Member List

This is the complete list of members for FilterElem, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
_counterFilterElem [private]
_filter1FilterElem
_filter2FilterElem
_secondConditionFilterElem
condAnd enum value (defined in FilterElem)FilterElem
condOr enum value (defined in FilterElem)FilterElem
FilterElem()FilterElem
FilterElem(const FilterRecord &)FilterElem
FilterElem(const FilterElem &)FilterElem
getCounter()FilterElem
incCounter()FilterElem
matches(ShowRecordElem *)FilterElem
noSecondCondition enum value (defined in FilterElem)FilterElem
secondCondition enum nameFilterElem
setCounter(unsigned int number)FilterElem
setSecondCondition(secondCondition scnd, const FilterRecord &)FilterElem
toString() constFilterElem
~FilterElem()FilterElem


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterElem.html b/doc/html/classFilterElem.html new file mode 100644 index 0000000..6e96266 --- /dev/null +++ b/doc/html/classFilterElem.html @@ -0,0 +1,185 @@ + + +kshowmail: FilterElem Class Reference + + + + + + +

FilterElem Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

enum  secondCondition { noSecondCondition, +condAnd, +condOr + }

Public Member Functions

FilterElem ()
FilterElem (const FilterRecord &)
FilterElem (const FilterElem &)
+void setSecondCondition (secondCondition scnd, const FilterRecord &)
~FilterElem ()
+QString toString () const
+bool matches (ShowRecordElem *)
unsigned int getCounter ()
void setCounter (unsigned int number)
void incCounter ()

Public Attributes

+FilterRecord _filter1
+FilterRecord _filter2
+secondCondition _secondCondition

Private Attributes

unsigned int _counter
+

Detailed Description

+ +

+ +

+Definition at line 48 of file filterelem.h.


Member Function Documentation

+ +
+
+ + + + + + + + +
unsigned int FilterElem::getCounter (  ) 
+
+
+ +

+Returns the number of mail deletions which was caused by this filter.

Returns:
number of deleted mails
+ +

+Definition at line 289 of file filterelem.cpp. +

+References _counter. +

+Referenced by FilterList::compareItems(), and FilterEntryDialog::FilterEntryDialog(). +

+

+ +

+
+ + + + + + + + + +
void FilterElem::setCounter (unsigned int  number  ) 
+
+
+ +

+Sets the deleted mail counter.

Parameters:
+ + +
number number of mail deletions caused by this filter
+
+ +

+Definition at line 299 of file filterelem.cpp. +

+References _counter. +

+Referenced by FilterList::readOptions(), and FilterEntryDialog::slotCounterChanged(). +

+

+ +

+
+ + + + + + + + +
void FilterElem::incCounter (  ) 
+
+
+ +

+Increments the deleted mail counter. +

+Definition at line 294 of file filterelem.cpp. +

+References _counter. +

+

+


Member Data Documentation

+ +
+
+ + + + +
unsigned int FilterElem::_counter [private]
+
+
+ +

+Number of mails its deletion was caused by this filter. +

+Definition at line 90 of file filterelem.h. +

+Referenced by getCounter(), incCounter(), setCounter(), and toString(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterEntryDialog-members.html b/doc/html/classFilterEntryDialog-members.html new file mode 100644 index 0000000..e6644ec --- /dev/null +++ b/doc/html/classFilterEntryDialog-members.html @@ -0,0 +1,77 @@ + + +kshowmail: Member List + + + + + + +

FilterEntryDialog Member List

This is the complete list of members for FilterEntryDialog, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buttonEditRegExp1FilterEntryDlg
_buttonEditRegExp2FilterEntryDlg
_buttonResetCounterFilterEntryDlg
_checkCaseSensitive1FilterEntryDlg
_checkCaseSensitive2FilterEntryDlg
_checkRegExp1FilterEntryDlg
_checkRegExp2FilterEntryDlg
_comboExpression1FilterEntryDlg
_comboExpression2FilterEntryDlg
_comboItem1FilterEntryDlg
_comboItem2FilterEntryDlg
_comboSecondConditionFilterEntryDlg
_editMatch1FilterEntryDlg
_editMatch2FilterEntryDlg
_editNameFilterEntryDlg
_elemFilterEntryDialog [private]
_groupBox2FilterEntryDlg
_groupBox2LayoutFilterEntryDlg [protected]
_spinCounterFilterEntryDlg
FilterEntryDialog(QWidget *parent, const char *name, FilterElem *elem)FilterEntryDialog
FilterEntryDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)FilterEntryDlg
FilterEntryDlgLayoutFilterEntryDlg [protected]
groupBox3FilterEntryDlg
groupBox3LayoutFilterEntryDlg [protected]
languageChange()FilterEntryDlg [protected, virtual, slot]
Layout11FilterEntryDlg [protected]
m_ButtonCancelFilterEntryDlg
m_ButtonOkFilterEntryDlg
QGroupBox_1FilterEntryDlg
QGroupBox_1LayoutFilterEntryDlg [protected]
slotCondition1Selected(int)FilterEntryDialog [virtual, slot]
slotCondition2Selected(int)FilterEntryDialog [virtual, slot]
slotCounterChanged(int)FilterEntryDialog [virtual, slot]
slotEditRegExp1()FilterEntryDialog [virtual, slot]
slotEditRegExp2()FilterEntryDialog [virtual, slot]
slotItem1Selected(int)FilterEntryDialog [virtual, slot]
slotItem2Selected(int)FilterEntryDialog [virtual, slot]
slotMatch1Changed(const QString &)FilterEntryDialog [virtual, slot]
slotMatch2Changed(const QString &)FilterEntryDialog [virtual, slot]
slotOk()FilterEntryDialog [virtual, slot]
slotResetCounter()FilterEntryDialog [virtual, slot]
slotSecondCondition(int)FilterEntryDialog [virtual, slot]
slotToggleRegExp1(bool)FilterEntryDialog [virtual, slot]
slotToggleRegExp2(bool)FilterEntryDialog [virtual, slot]
Spacer17FilterEntryDlg [protected]
spacer2FilterEntryDlg [protected]
spacer3FilterEntryDlg [protected]
~FilterEntryDialog()FilterEntryDialog
~FilterEntryDlg()FilterEntryDlg


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterEntryDialog.html b/doc/html/classFilterEntryDialog.html new file mode 100644 index 0000000..57c19ca --- /dev/null +++ b/doc/html/classFilterEntryDialog.html @@ -0,0 +1,99 @@ + + +kshowmail: FilterEntryDialog Class Reference + + + + + + +

FilterEntryDialog Class Reference

#include <filterentrydialog.h> +

+

Inheritance diagram for FilterEntryDialog: +

+ +FilterEntryDlg + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotOk ()
+virtual void slotItem1Selected (int)
+virtual void slotItem2Selected (int)
+virtual void slotSecondCondition (int)
+virtual void slotCondition1Selected (int)
+virtual void slotCondition2Selected (int)
+virtual void slotMatch1Changed (const QString &)
+virtual void slotMatch2Changed (const QString &)
+virtual void slotResetCounter ()
+virtual void slotCounterChanged (int)
+virtual void slotEditRegExp1 ()
+virtual void slotEditRegExp2 ()
+virtual void slotToggleRegExp1 (bool)
+virtual void slotToggleRegExp2 (bool)

Public Member Functions

FilterEntryDialog (QWidget *parent, const char *name, FilterElem *elem)
~FilterEntryDialog ()

Private Attributes

+FilterElem_elem
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 29 of file filterentrydialog.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterEntryDialog.png b/doc/html/classFilterEntryDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..83546bb355f266c2347f3301f2eac8894b5ba70a GIT binary patch literal 441 zcmV;q0Y?6bP)@1d10000OP)t-s|Ns90 z00960z@MLBkN^MxkN^Mxkifved&2+Z00001bW%=J06^y0W&i*IPf0{UR9J=WluL4h zFbsyRP1cfbV4t9qT&OGVe}w9RZ3>2hr^8HBD-4ljef*Z35MDj@5uT~T{sk6^I3~H= zh{&=f|QWlW;Klan5c=Q$S^C$lq8G_usty{?_gTNiA;^Wv|=2$m^4!`w%*vV zw7}B7ns)E&1>+Og3{*@yJ%w=#Gu1|KGv<>lz3GX>d~S_N9@yf*u3%i93s@D4l)b<8 z$GHjXeBtfe<6!OgvFY@iI@VmD86U;`W2zy_v9J%#~$HuClu$Y>zQKIci^$Z-O0i;CZnWsFVractfq!t` zf5x_I{;NUHXDDxSAH#Aaxd3sq$#!oIY*yX$He)`?(wlY!`P_hDJ;?)ucIqc=vkGUh jh8WekUAFhe`d)ZnjY7n1f3)z100000NkvXXu0mjf@;=JU literal 0 HcmV?d00001 diff --git a/doc/html/classFilterEntryDlg-members.html b/doc/html/classFilterEntryDlg-members.html new file mode 100644 index 0000000..5b53119 --- /dev/null +++ b/doc/html/classFilterEntryDlg-members.html @@ -0,0 +1,74 @@ + + +kshowmail: Member List + + + + + + +

FilterEntryDlg Member List

This is the complete list of members for FilterEntryDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buttonEditRegExp1FilterEntryDlg
_buttonEditRegExp2FilterEntryDlg
_buttonResetCounterFilterEntryDlg
_checkCaseSensitive1FilterEntryDlg
_checkCaseSensitive2FilterEntryDlg
_checkRegExp1FilterEntryDlg
_checkRegExp2FilterEntryDlg
_comboExpression1FilterEntryDlg
_comboExpression2FilterEntryDlg
_comboItem1FilterEntryDlg
_comboItem2FilterEntryDlg
_comboSecondConditionFilterEntryDlg
_editMatch1FilterEntryDlg
_editMatch2FilterEntryDlg
_editNameFilterEntryDlg
_groupBox2FilterEntryDlg
_groupBox2LayoutFilterEntryDlg [protected]
_spinCounterFilterEntryDlg
FilterEntryDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)FilterEntryDlg
FilterEntryDlgLayoutFilterEntryDlg [protected]
groupBox3FilterEntryDlg
groupBox3LayoutFilterEntryDlg [protected]
languageChange()FilterEntryDlg [protected, virtual, slot]
Layout11FilterEntryDlg [protected]
m_ButtonCancelFilterEntryDlg
m_ButtonOkFilterEntryDlg
QGroupBox_1FilterEntryDlg
QGroupBox_1LayoutFilterEntryDlg [protected]
slotCondition1Selected(int)FilterEntryDlg [virtual, slot]
slotCondition2Selected(int)FilterEntryDlg [virtual, slot]
slotCounterChanged(int)FilterEntryDlg [virtual, slot]
slotEditRegExp1()FilterEntryDlg [virtual, slot]
slotEditRegExp2()FilterEntryDlg [virtual, slot]
slotItem1Selected(int)FilterEntryDlg [virtual, slot]
slotItem2Selected(int)FilterEntryDlg [virtual, slot]
slotMatch1Changed(const QString &)FilterEntryDlg [virtual, slot]
slotMatch2Changed(const QString &)FilterEntryDlg [virtual, slot]
slotOk()FilterEntryDlg [virtual, slot]
slotResetCounter()FilterEntryDlg [virtual, slot]
slotSecondCondition(int)FilterEntryDlg [virtual, slot]
slotToggleRegExp1(bool)FilterEntryDlg [virtual, slot]
slotToggleRegExp2(bool)FilterEntryDlg [virtual, slot]
Spacer17FilterEntryDlg [protected]
spacer2FilterEntryDlg [protected]
spacer3FilterEntryDlg [protected]
~FilterEntryDlg()FilterEntryDlg


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterEntryDlg.html b/doc/html/classFilterEntryDlg.html new file mode 100644 index 0000000..9f63fb8 --- /dev/null +++ b/doc/html/classFilterEntryDlg.html @@ -0,0 +1,185 @@ + + +kshowmail: FilterEntryDlg Class Reference + + + + + + +

FilterEntryDlg Class Reference

Inheritance diagram for FilterEntryDlg: +

+ +FilterEntryDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotOk ()
+virtual void slotItem1Selected (int)
+virtual void slotItem2Selected (int)
+virtual void slotSecondCondition (int)
+virtual void slotCondition1Selected (int)
+virtual void slotCondition2Selected (int)
+virtual void slotMatch1Changed (const QString &)
+virtual void slotMatch2Changed (const QString &)
+virtual void slotResetCounter ()
+virtual void slotCounterChanged (int)
+virtual void slotEditRegExp1 ()
+virtual void slotEditRegExp2 ()
+virtual void slotToggleRegExp1 (bool)
+virtual void slotToggleRegExp2 (bool)

Public Member Functions

FilterEntryDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~FilterEntryDlg ()

Public Attributes

+QLineEdit * _editName
+QGroupBox * QGroupBox_1
+QComboBox * _comboItem1
+QComboBox * _comboExpression1
+QLineEdit * _editMatch1
+QComboBox * _comboSecondCondition
+QCheckBox * _checkCaseSensitive1
+QPushButton * _buttonEditRegExp1
+QCheckBox * _checkRegExp1
+QGroupBox * _groupBox2
+QComboBox * _comboItem2
+QComboBox * _comboExpression2
+QLineEdit * _editMatch2
+QCheckBox * _checkCaseSensitive2
+QCheckBox * _checkRegExp2
+QPushButton * _buttonEditRegExp2
+QPushButton * m_ButtonOk
+QPushButton * m_ButtonCancel
+QGroupBox * groupBox3
+QSpinBox * _spinCounter
+QPushButton * _buttonResetCounter

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QGridLayout * FilterEntryDlgLayout
+QGridLayout * QGroupBox_1Layout
+QSpacerItem * spacer2
+QGridLayout * _groupBox2Layout
+QSpacerItem * spacer3
+QHBoxLayout * Layout11
+QSpacerItem * Spacer17
+QHBoxLayout * groupBox3Layout
+

Detailed Description

+ +

+ +

+Definition at line 27 of file FilterEntryDlg.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterEntryDlg.png b/doc/html/classFilterEntryDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..21fe5381ce012bc53a077b54ab00f91500e36621 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^*+3k?!VDze=u8U)QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi%T%+tj&B%<~0G{;FT3OuffmtU)xcc{OZwQ|Nz=%MQ+dvk({n!UTEz1**XdqDCY$eytQEm46P}pIRBB7CG@qMb zf9iMqhA7>g>Y>FwHIr*~m|2CFUsbz(Pbwm8EyR(Nl;h6zPTUT3 + +kshowmail: Member List + + + + + + +

FilterList Member List

This is the complete list of members for FilterList, including all inherited members.

+ + + + + + + + +
compareItems(QCollection::Item item1, QCollection::Item item2)FilterList [protected, virtual]
FilterList()FilterList
newItem(QCollection::Item d)FilterList [protected, virtual]
operator=(FilterList &right)FilterList
readOptions(KConfig *config)FilterList
saveOptions(KConfig *config)FilterList
setCombo(QComboBox *combo, int nIndex)FilterList
~FilterList()FilterList [virtual]


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterList.html b/doc/html/classFilterList.html new file mode 100644 index 0000000..6021ffe --- /dev/null +++ b/doc/html/classFilterList.html @@ -0,0 +1,92 @@ + + +kshowmail: FilterList Class Reference + + + + + + +

FilterList Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + +

Public Member Functions

FilterList ()
+virtual ~FilterList ()
+FilterListoperator= (FilterList &right)
+void setCombo (QComboBox *combo, int nIndex)
+void readOptions (KConfig *config)
void saveOptions (KConfig *config)

Protected Member Functions

+virtual int compareItems (QCollection::Item item1, QCollection::Item item2)
+virtual QCollection::Item newItem (QCollection::Item d)
+

Detailed Description

+ +

+ +

+Definition at line 37 of file filterlist.h.


Member Function Documentation

+ +
+
+ + + + + + + + + +
void FilterList::saveOptions (KConfig *  config  ) 
+
+
+ +

+Saves the filter setup into the application config file (kshowmailrc).

Parameters:
+ + +
config application config
+
+ +

+Definition at line 122 of file filterlist.cpp. +

+Referenced by Filter::saveOptions(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterRecord-members.html b/doc/html/classFilterRecord-members.html new file mode 100644 index 0000000..0781472 --- /dev/null +++ b/doc/html/classFilterRecord-members.html @@ -0,0 +1,50 @@ + + +kshowmail: Member List + + + + + + +

FilterRecord Member List

This is the complete list of members for FilterRecord, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
_CaseSensitiveFilterRecord
_expressionFilterRecord
_matchFilterRecord
_RegExpFilterRecord
_typeFilterRecord
contains enum value (defined in FilterRecord)FilterRecord
contains_not enum value (defined in FilterRecord)FilterRecord
equals enum value (defined in FilterRecord)FilterRecord
equals_not enum value (defined in FilterRecord)FilterRecord
expressionType enum nameFilterRecord
FilterRecord()FilterRecord
FilterRecord(filterType type, expressionType expression, const QString &match, bool CaseSensitive, bool regExp)FilterRecord
filterType enum nameFilterRecord
from enum value (defined in FilterRecord)FilterRecord
greater enum value (defined in FilterRecord)FilterRecord
header enum value (defined in FilterRecord)FilterRecord
less enum value (defined in FilterRecord)FilterRecord
matches(ShowRecordElem *)FilterRecord
size enum value (defined in FilterRecord)FilterRecord
subject enum value (defined in FilterRecord)FilterRecord
to enum value (defined in FilterRecord)FilterRecord
toString() constFilterRecord


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classFilterRecord.html b/doc/html/classFilterRecord.html new file mode 100644 index 0000000..5819b85 --- /dev/null +++ b/doc/html/classFilterRecord.html @@ -0,0 +1,88 @@ + + +kshowmail: FilterRecord Class Reference + + + + + + +

FilterRecord Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

enum  filterType {
+  from, +subject, +header, +size, +
+  to +
+ }
enum  expressionType {
+  contains, +contains_not, +equals, +equals_not, +
+  greater, +less +
+ }

Public Member Functions

FilterRecord ()
FilterRecord (filterType type, expressionType expression, const QString &match, bool CaseSensitive, bool regExp)
+bool matches (ShowRecordElem *)
+QString toString () const

Public Attributes

+filterType _type
+expressionType _expression
+QString _match
+bool _CaseSensitive
+bool _RegExp
+

Detailed Description

+ +

+ +

+Definition at line 29 of file filterelem.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackAnswer-members.html b/doc/html/classKFeedbackAnswer-members.html new file mode 100644 index 0000000..fc42767 --- /dev/null +++ b/doc/html/classKFeedbackAnswer-members.html @@ -0,0 +1,40 @@ + + +kshowmail: Member List + + + + + + +

KFeedbackAnswer Member List

This is the complete list of members for KFeedbackAnswer, including all inherited members.

+ + + + + + + + + + + + +
_exclusiveKFeedbackAnswer [protected]
_idKFeedbackAnswer [protected]
_noKFeedbackAnswer [protected]
id()KFeedbackAnswer [inline]
isChecked()KFeedbackAnswer [inline]
isExclusive()KFeedbackAnswer [inline]
key(int column, bool ascending) constKFeedbackAnswer [virtual]
KFeedbackAnswer(KFeedbackQuestion *parent, const QString &text, const QString &id, bool exclusive=true)KFeedbackAnswer
nextAnswer() constKFeedbackAnswer [inline]
question() constKFeedbackAnswer [inline]
stateChange(bool newState)KFeedbackAnswer [virtual]
text()KFeedbackAnswer


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackAnswer.html b/doc/html/classKFeedbackAnswer.html new file mode 100644 index 0000000..2e6fab8 --- /dev/null +++ b/doc/html/classKFeedbackAnswer.html @@ -0,0 +1,311 @@ + + +kshowmail: KFeedbackAnswer Class Reference + + + + + + +

KFeedbackAnswer Class Reference

List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 KFeedbackAnswer (KFeedbackQuestion *parent, const QString &text, const QString &id, bool exclusive=true)
QString id ()
QString text ()
bool isExclusive ()
bool isChecked ()
KFeedbackAnswernextAnswer () const
KFeedbackQuestionquestion () const
virtual QString key (int column, bool ascending) const
virtual void stateChange (bool newState)

Protected Attributes

+QString _id
+bool _exclusive
+int _no
+

Detailed Description

+ +

+ +

+Definition at line 388 of file kfeedback.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KFeedbackAnswer::KFeedbackAnswer (KFeedbackQuestion parent,
const QString &  text,
const QString &  id,
bool  exclusive = true 
)
+
+
+ +

+Constructor.

+'exclusive' tells the type of answer: One of many allowed or any number of many. +

+Definition at line 458 of file kfeedback.cpp. +

+References _no. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
QString KFeedbackAnswer::id (  )  [inline]
+
+
+ +

+Return this answer's ID. +

+Definition at line 405 of file kfeedback.h. +

+References _id. +

+Referenced by KFeedbackQuestion::result(). +

+

+ +

+
+ + + + + + + + +
QString KFeedbackAnswer::text (  ) 
+
+
+ +

+Return this answer's text. +

+Definition at line 474 of file kfeedback.cpp. +

+

+ +

+
+ + + + + + + + +
bool KFeedbackAnswer::isExclusive (  )  [inline]
+
+
+ +

+Returns whether or not this is an exclusive answer. +

+Definition at line 415 of file kfeedback.h. +

+References _exclusive. +

+

+ +

+
+ + + + + + + + +
bool KFeedbackAnswer::isChecked (  )  [inline]
+
+
+ +

+Returns whether or not this answer is checked. +

+Definition at line 420 of file kfeedback.h. +

+Referenced by KFeedbackQuestion::isAnswered(), and KFeedbackQuestion::result(). +

+

+ +

+
+ + + + + + + + +
KFeedbackAnswer* KFeedbackAnswer::nextAnswer (  )  const [inline]
+
+
+ +

+Returns the next possible answer or 0 if there is no more. +

+Definition at line 425 of file kfeedback.h. +

+Referenced by KFeedbackQuestion::isAnswered(), and KFeedbackQuestion::result(). +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestion* KFeedbackAnswer::question (  )  const [inline]
+
+
+ +

+Returns the question to this answer. +

+Definition at line 431 of file kfeedback.h. +

+Referenced by stateChange(). +

+

+ +

+
+ + + + + + + + + + + + + + + + + + +
QString KFeedbackAnswer::key (int  column,
bool  ascending 
) const [virtual]
+
+
+ +

+Returns the sort key.

+Reimplemented from QListViewItem to maintain insertion order. +

+Definition at line 481 of file kfeedback.cpp. +

+References _no. +

+

+ +

+
+ + + + + + + + + +
void KFeedbackAnswer::stateChange (bool  newState  )  [virtual]
+
+
+ +

+On/off change.

+Reimplemented from QCheckListItem to monitor answering required questions. This method notifies the KFeedbackQuestionList whenever a required question is being answered. +

+Definition at line 491 of file kfeedback.cpp. +

+References question(), KFeedbackQuestionList::questionAnswered(), and KFeedbackQuestion::questionList(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackDialog-members.html b/doc/html/classKFeedbackDialog-members.html new file mode 100644 index 0000000..cec50c5 --- /dev/null +++ b/doc/html/classKFeedbackDialog-members.html @@ -0,0 +1,34 @@ + + +kshowmail: Member List + + + + + + +

KFeedbackDialog Member List

This is the complete list of members for KFeedbackDialog, including all inherited members.

+ + + + + + +
_formKFeedbackDialog [protected]
checkSendButton()KFeedbackDialog [slot]
form()KFeedbackDialog [inline]
KFeedbackDialog(const QString &feedbackMailAddress, const QString &helpTopic=QString::null)KFeedbackDialog
mailSent()KFeedbackDialog [signal]
~KFeedbackDialog()KFeedbackDialog [virtual]


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackDialog.html b/doc/html/classKFeedbackDialog.html new file mode 100644 index 0000000..655cd8e --- /dev/null +++ b/doc/html/classKFeedbackDialog.html @@ -0,0 +1,185 @@ + + +kshowmail: KFeedbackDialog Class Reference + + + + + + +

KFeedbackDialog Class Reference

#include <kfeedback.h> +

+List of all members. + + + + + + + + + + + + + + + + + +

Public Slots

void checkSendButton ()

Signals

void mailSent ()

Public Member Functions

 KFeedbackDialog (const QString &feedbackMailAddress, const QString &helpTopic=QString::null)
virtual ~KFeedbackDialog ()
KFeedbackFormform ()

Protected Attributes

+KFeedbackForm_form
+


Detailed Description

+Dialog containing a KFeedbackForm and all the infrastructure for sending a mail etc. +

+ +

+Definition at line 42 of file kfeedback.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
KFeedbackDialog::KFeedbackDialog (const QString &  feedbackMailAddress,
const QString &  helpTopic = QString::null 
)
+
+
+ +

+Constructor. +

+Definition at line 34 of file kfeedback.cpp. +

+References _form, checkSendButton(), and mailSent(). +

+

+ +

+
+ + + + + + + + +
KFeedbackDialog::~KFeedbackDialog (  )  [virtual]
+
+
+ +

+Destructor. +

+Definition at line 64 of file kfeedback.cpp. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
KFeedbackForm* KFeedbackDialog::form (  )  [inline]
+
+
+ +

+Returns the internal +

+Definition at line 64 of file kfeedback.h. +

+References _form. +

+Referenced by KShowMailApp::slotSendFeedbackMail(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackDialog::checkSendButton (  )  [slot]
+
+
+ +

+Check if sufficient information is available to send a mail now and enable / disable the "send mail" button accordingly. +

+Definition at line 71 of file kfeedback.cpp. +

+References _form, and KFeedbackForm::readyToSend(). +

+Referenced by KFeedbackDialog(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackDialog::mailSent (  )  [signal]
+
+
+ +

+Emitted when the user has sent the feedback mail - i.e. when he clicked on the "Send mail" button and the mail has successfully been forwarded to the mailer. He can still choose not to send the mail from within the mailer, though. +

+Definition at line 84 of file kfeedback.moc.cpp. +

+Referenced by KFeedbackDialog(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackForm-members.html b/doc/html/classKFeedbackForm-members.html new file mode 100644 index 0000000..2698b3f --- /dev/null +++ b/doc/html/classKFeedbackForm-members.html @@ -0,0 +1,40 @@ + + +kshowmail: Member List + + + + + + +

KFeedbackForm Member List

This is the complete list of members for KFeedbackForm, including all inherited members.

+ + + + + + + + + + + + +
_commentKFeedbackForm [protected]
_feedbackMailAddressKFeedbackForm [protected]
_questionListKFeedbackForm [protected]
checkComplete()KFeedbackForm [signal]
formatComment()KFeedbackForm [protected]
KFeedbackForm(const QString &feedbackMailAddress, QWidget *parent)KFeedbackForm
mailSent()KFeedbackForm [signal]
questionList()KFeedbackForm [inline]
readyToSend()KFeedbackForm [virtual]
sendMail()KFeedbackForm [virtual, slot]
slotCheckComplete()KFeedbackForm [protected, slot]
~KFeedbackForm()KFeedbackForm [virtual]


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackForm.html b/doc/html/classKFeedbackForm.html new file mode 100644 index 0000000..de9f434 --- /dev/null +++ b/doc/html/classKFeedbackForm.html @@ -0,0 +1,300 @@ + + +kshowmail: KFeedbackForm Class Reference + + + + + + +

KFeedbackForm Class Reference

#include <kfeedback.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

virtual void sendMail ()

Signals

void mailSent ()
void checkComplete ()

Public Member Functions

 KFeedbackForm (const QString &feedbackMailAddress, QWidget *parent)
virtual ~KFeedbackForm ()
virtual bool readyToSend ()
KFeedbackQuestionListquestionList ()

Protected Slots

void slotCheckComplete ()

Protected Member Functions

QString formatComment ()

Protected Attributes

+QString _feedbackMailAddress
+KFeedbackQuestionList_questionList
+QMultiLineEdit * _comment
+


Detailed Description

+User feedback form:

+User is asked a list of questions, the answers of which will be sent via mail back to a feedback mail address. +

+ +

+Definition at line 98 of file kfeedback.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
KFeedbackForm::KFeedbackForm (const QString &  feedbackMailAddress,
QWidget *  parent 
)
+
+
+ +

+Constructor. +

+Definition at line 80 of file kfeedback.cpp. +

+References _comment, _questionList, checkComplete(), and slotCheckComplete(). +

+

+ +

+
+ + + + + + + + +
KFeedbackForm::~KFeedbackForm (  )  [virtual]
+
+
+ +

+Destructor. +

+Definition at line 146 of file kfeedback.cpp. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
void KFeedbackForm::sendMail (  )  [virtual, slot]
+
+
+ +

+Compose a mail from the user's answers and send it to the feedback mail address passed to the constructor.

+This method will check with readyToSend() if the mail can be sent with the questions answered until now and prompt the user to answer more questions if not.

+Connect the mailSent() signal if you are interested when exactly all this was successful. +

+Definition at line 153 of file kfeedback.cpp. +

+References _feedbackMailAddress, _questionList, formatComment(), mailSent(), and KFeedbackQuestionList::result(). +

+

+ +

+
+ + + + + + + + +
bool KFeedbackForm::readyToSend (  )  [virtual]
+
+
+ +

+Checks if the mail is ready to send, i.e. if all required fields are filled. +

+Definition at line 229 of file kfeedback.cpp. +

+References _questionList, and KFeedbackQuestionList::isComplete(). +

+Referenced by KFeedbackDialog::checkSendButton(). +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestionList* KFeedbackForm::questionList (  )  [inline]
+
+
+ +

+Returns the KFeedbackQuestionList . +

+Definition at line 142 of file kfeedback.h. +

+References _questionList. +

+Referenced by KShowMailApp::slotSendFeedbackMail(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackForm::mailSent (  )  [signal]
+
+
+ +

+Emitted when the user has sent the feedback mail - i.e. when he clicked on the "Send mail" button and the mail has successfully been forwarded to the mailer. He can still choose not to send the mail from within the mailer, though. +

+Definition at line 185 of file kfeedback.moc.cpp. +

+Referenced by sendMail(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackForm::checkComplete (  )  [signal]
+
+
+ +

+Emitted when it is time to check for completeness of all information in this form: Either when a new question is added or when a question is answered. +

+Definition at line 191 of file kfeedback.moc.cpp. +

+Referenced by KFeedbackForm(), and slotCheckComplete(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackForm::slotCheckComplete (  )  [protected, slot]
+
+
+ +

+Check for completeness of this form. +

+Definition at line 208 of file kfeedback.cpp. +

+References checkComplete(). +

+Referenced by KFeedbackForm(). +

+

+ +

+
+ + + + + + + + +
QString KFeedbackForm::formatComment (  )  [protected]
+
+
+ +

+Format the "personal comments" field for sending mail. +

+Definition at line 215 of file kfeedback.cpp. +

+References _comment. +

+Referenced by sendMail(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackQuestion-members.html b/doc/html/classKFeedbackQuestion-members.html new file mode 100644 index 0000000..14aa262 --- /dev/null +++ b/doc/html/classKFeedbackQuestion-members.html @@ -0,0 +1,44 @@ + + +kshowmail: Member List + + + + + + +

KFeedbackQuestion Member List

This is the complete list of members for KFeedbackQuestion, including all inherited members.

+ + + + + + + + + + + + + + + + +
_exclusiveAnswerKFeedbackQuestion [protected]
_idKFeedbackQuestion [protected]
_noKFeedbackQuestion [protected]
_requiredKFeedbackQuestion [protected]
addAnswer(const QString &text, const QString &id)KFeedbackQuestion
exclusiveAnswer()KFeedbackQuestion [inline]
firstAnswer() constKFeedbackQuestion [inline]
id()KFeedbackQuestion [inline]
isAnswered()KFeedbackQuestion
isRequired()KFeedbackQuestion [inline]
key(int column, bool ascending) constKFeedbackQuestion [virtual]
KFeedbackQuestion(KFeedbackQuestionList *parent, const QString &text, const QString &id, bool exclusiveAnswer=true, bool required=false, bool open=true)KFeedbackQuestion
nextQuestion() constKFeedbackQuestion [inline]
questionList() constKFeedbackQuestion
result()KFeedbackQuestion
text()KFeedbackQuestion


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackQuestion.html b/doc/html/classKFeedbackQuestion.html new file mode 100644 index 0000000..37cd13e --- /dev/null +++ b/doc/html/classKFeedbackQuestion.html @@ -0,0 +1,424 @@ + + +kshowmail: KFeedbackQuestion Class Reference + + + + + + +

KFeedbackQuestion Class Reference

#include <kfeedback.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 KFeedbackQuestion (KFeedbackQuestionList *parent, const QString &text, const QString &id, bool exclusiveAnswer=true, bool required=false, bool open=true)
void addAnswer (const QString &text, const QString &id)
bool isRequired ()
bool isAnswered ()
QString result ()
QString id ()
QString text ()
bool exclusiveAnswer ()
virtual QString key (int column, bool ascending) const
KFeedbackQuestionnextQuestion () const
KFeedbackAnswerfirstAnswer () const
KFeedbackQuestionListquestionList () const

Protected Attributes

+QString _id
+bool _exclusiveAnswer
+bool _required
+int _no
+


Detailed Description

+A user feedback question to be inserted into a KFeedbackQuestionList. +

+ +

+Definition at line 275 of file kfeedback.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KFeedbackQuestion::KFeedbackQuestion (KFeedbackQuestionList parent,
const QString &  text,
const QString &  id,
bool  exclusiveAnswer = true,
bool  required = false,
bool  open = true 
)
+
+
+ +

+Constructor.

+The parent KFeedbackQuestionList assumes ownership of this object, so don't delete it unless you want to delete it from the question list as well.

+'text' is the text the user will see (in his native language).

+'id' is what will be sent with the feedback mail, thus it should be unique within the application, yet human readable (preferably English) and not contain any weird characters that might confuse scripts that are later used to automatically parse those mails. Examples: "features_not_liked", "stability"

+Set 'required' to 'true' if answering this question is required to successfully complete this form.

+Set 'exclusiveAnswer' to 'true' if only one of all answers may be checked at any one time, to 'false' if multiple answers are allowed. +

+Definition at line 336 of file kfeedback.cpp. +

+References _no, and KFeedbackQuestionList::questionAdded(). +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void KFeedbackQuestion::addAnswer (const QString &  text,
const QString &  id 
)
+
+
+ +

+Add an answer to this question. Again, 'text' is what the user will see (translated to his native language), 'id' is what you will get back with the mail. The answer IDs need only be unique for that question; answers to other questions may have the same ID. +

+Definition at line 360 of file kfeedback.cpp. +

+References _exclusiveAnswer. +

+Referenced by KShowMailApp::addFeatureList(), KFeedbackQuestionList::addYesNoQuestion(), and KShowMailApp::slotSendFeedbackMail(). +

+

+ +

+
+ + + + + + + + +
bool KFeedbackQuestion::isRequired (  )  [inline]
+
+
+ +

+Returns if answering this question is required. +

+Definition at line 319 of file kfeedback.h. +

+References _required. +

+Referenced by KFeedbackQuestionList::isComplete(), and KFeedbackQuestionList::questionAdded(). +

+

+ +

+
+ + + + + + + + +
bool KFeedbackQuestion::isAnswered (  ) 
+
+
+ +

+Returns if this question is answered satisfactorily. +

+If any number of answers is permitted for this question, this question is always considered to be answered.

+If this question requires an exclusive answer, exactly one of them should be checked. We don't need to bother about more than one being checked here - QListView does that for us. +

+Definition at line 368 of file kfeedback.cpp. +

+References _exclusiveAnswer, firstAnswer(), KFeedbackAnswer::isChecked(), and KFeedbackAnswer::nextAnswer(). +

+Referenced by KFeedbackQuestionList::isComplete(). +

+

+ +

+
+ + + + + + + + +
QString KFeedbackQuestion::result (  ) 
+
+
+ +

+The result of this question in ASCII, e.g. recommend="yes" or features_i_like="builtin_tetris" features_i_like="pink_elephant" features_i_like="studlycapslyfier" +

+Definition at line 402 of file kfeedback.cpp. +

+References _id, firstAnswer(), KFeedbackAnswer::id(), KFeedbackAnswer::isChecked(), and KFeedbackAnswer::nextAnswer(). +

+Referenced by KFeedbackQuestionList::result(). +

+

+ +

+
+ + + + + + + + +
QString KFeedbackQuestion::id (  )  [inline]
+
+
+ +

+Return this question's ID. +

+Definition at line 339 of file kfeedback.h. +

+References _id. +

+

+ +

+
+ + + + + + + + +
QString KFeedbackQuestion::text (  ) 
+
+
+ +

+Return this question's text. +

+Definition at line 430 of file kfeedback.cpp. +

+

+ +

+
+ + + + + + + + +
bool KFeedbackQuestion::exclusiveAnswer (  )  [inline]
+
+
+ +

+Returns whether or not this question requires an exclusive answer. +

+Definition at line 349 of file kfeedback.h. +

+References _exclusiveAnswer. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + +
QString KFeedbackQuestion::key (int  column,
bool  ascending 
) const [virtual]
+
+
+ +

+Returns the sort key.

+Reimplemented from QListViewItem to maintain insertion order. +

+Definition at line 437 of file kfeedback.cpp. +

+References _no. +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestion* KFeedbackQuestion::nextQuestion (  )  const [inline]
+
+
+ +

+Returns the next question or 0 if there is no more. +

+Definition at line 362 of file kfeedback.h. +

+Referenced by KFeedbackQuestionList::isComplete(), and KFeedbackQuestionList::result(). +

+

+ +

+
+ + + + + + + + +
KFeedbackAnswer* KFeedbackQuestion::firstAnswer (  )  const [inline]
+
+
+ +

+Returns the first possible answer to this question. Use KFeedbackAnswer::nextAnswer() to get the next one. +

+Definition at line 369 of file kfeedback.h. +

+Referenced by isAnswered(), and result(). +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestionList * KFeedbackQuestion::questionList (  )  const
+
+
+ +

+Returns the KFeedbackQuestionList this question belongs to or 0 if the parent is no KFeedbackQuestionList. +

+Definition at line 447 of file kfeedback.cpp. +

+Referenced by KFeedbackAnswer::stateChange(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackQuestionList-members.html b/doc/html/classKFeedbackQuestionList-members.html new file mode 100644 index 0000000..73dc057 --- /dev/null +++ b/doc/html/classKFeedbackQuestionList-members.html @@ -0,0 +1,38 @@ + + +kshowmail: Member List + + + + + + +

KFeedbackQuestionList Member List

This is the complete list of members for KFeedbackQuestionList, including all inherited members.

+ + + + + + + + + + +
addQuestion(const QString &text, const QString &id, bool exclusiveAnswer=true, bool required=false)KFeedbackQuestionList
addYesNoQuestion(const QString &text, const QString &id, bool required=false)KFeedbackQuestionList
checkComplete()KFeedbackQuestionList [signal]
firstQuestion() constKFeedbackQuestionList [inline]
isComplete()KFeedbackQuestionList [virtual]
KFeedbackQuestionList(QWidget *parent)KFeedbackQuestionList
questionAdded(KFeedbackQuestion *question)KFeedbackQuestionList
questionAnswered()KFeedbackQuestionList
result()KFeedbackQuestionList
~KFeedbackQuestionList()KFeedbackQuestionList [virtual]


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKFeedbackQuestionList.html b/doc/html/classKFeedbackQuestionList.html new file mode 100644 index 0000000..0973549 --- /dev/null +++ b/doc/html/classKFeedbackQuestionList.html @@ -0,0 +1,343 @@ + + +kshowmail: KFeedbackQuestionList Class Reference + + + + + + +

KFeedbackQuestionList Class Reference

#include <kfeedback.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + +

Signals

void checkComplete ()

Public Member Functions

 KFeedbackQuestionList (QWidget *parent)
virtual ~KFeedbackQuestionList ()
virtual bool isComplete ()
QString result ()
KFeedbackQuestionaddQuestion (const QString &text, const QString &id, bool exclusiveAnswer=true, bool required=false)
void addYesNoQuestion (const QString &text, const QString &id, bool required=false)
KFeedbackQuestionfirstQuestion () const
void questionAnswered ()
void questionAdded (KFeedbackQuestion *question)
+


Detailed Description

+List of feedback questions presented in a QListView widget. +

+ +

+Definition at line 187 of file kfeedback.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + +
KFeedbackQuestionList::KFeedbackQuestionList (QWidget *  parent  ) 
+
+
+ +

+Constructor. +

+Definition at line 239 of file kfeedback.cpp. +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestionList::~KFeedbackQuestionList (  )  [virtual]
+
+
+ +

+Destructor. +

+Definition at line 247 of file kfeedback.cpp. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
bool KFeedbackQuestionList::isComplete (  )  [virtual]
+
+
+ +

+Returns whether or not this question list is answered satisfactorily, i.e. if all questions marked as "required" are answered. +

+Definition at line 254 of file kfeedback.cpp. +

+References firstQuestion(), KFeedbackQuestion::isAnswered(), KFeedbackQuestion::isRequired(), and KFeedbackQuestion::nextQuestion(). +

+Referenced by KFeedbackForm::readyToSend(). +

+

+ +

+
+ + + + + + + + +
QString KFeedbackQuestionList::result (  ) 
+
+
+ +

+The result of all answered questions in ASCII. +

+Definition at line 270 of file kfeedback.cpp. +

+References firstQuestion(), KFeedbackQuestion::nextQuestion(), and KFeedbackQuestion::result(). +

+Referenced by KFeedbackForm::sendMail(). +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KFeedbackQuestion * KFeedbackQuestionList::addQuestion (const QString &  text,
const QString &  id,
bool  exclusiveAnswer = true,
bool  required = false 
)
+
+
+ +

+Add a yes/no question to the list.

+'text' is the text the user will see (in his native language).

+'id' is what will be sent with the feedback mail, thus it should be unique within the application, yet human readable (preferably English) and not contain any weird characters that might confuse scripts that are later used to automatically parse those mails. Examples: "would_recommend_to_a_friend"

+Set 'required' to 'true' if answering this question is required to successfully complete this form.

+Returns a pointer to this question so you can add answers. +

+Definition at line 288 of file kfeedback.cpp. +

+Referenced by KShowMailApp::slotSendFeedbackMail(). +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void KFeedbackQuestionList::addYesNoQuestion (const QString &  text,
const QString &  id,
bool  required = false 
)
+
+
+ +

+Add a yes/no question to the list. +

+Definition at line 303 of file kfeedback.cpp. +

+References KFeedbackQuestion::addAnswer(). +

+Referenced by KShowMailApp::slotSendFeedbackMail(). +

+

+ +

+
+ + + + + + + + +
KFeedbackQuestion* KFeedbackQuestionList::firstQuestion (  )  const [inline]
+
+
+ +

+Returns the first question of that list. Use KFeedbackQuestion::next() to get the next one. +

+Definition at line 247 of file kfeedback.h. +

+Referenced by isComplete(), and result(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackQuestionList::questionAnswered (  ) 
+
+
+ +

+Notify the list that another question has been answered. Emits the checkComplete() signal when all required questions are answered. +

+Definition at line 318 of file kfeedback.cpp. +

+References checkComplete(). +

+Referenced by KFeedbackAnswer::stateChange(). +

+

+ +

+
+ + + + + + + + + +
void KFeedbackQuestionList::questionAdded (KFeedbackQuestion question  ) 
+
+
+ +

+Notify the list that another question has been added. Emits the checkComplete() signal when a required question is added. +

+Definition at line 324 of file kfeedback.cpp. +

+References checkComplete(), and KFeedbackQuestion::isRequired(). +

+Referenced by KFeedbackQuestion::KFeedbackQuestion(). +

+

+ +

+
+ + + + + + + + +
void KFeedbackQuestionList::checkComplete (  )  [signal]
+
+
+ +

+Emitted when all required questions are answered. +

+Definition at line 286 of file kfeedback.moc.cpp. +

+Referenced by questionAdded(), and questionAnswered(). +

+

+


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKShowMailApp-members.html b/doc/html/classKShowMailApp-members.html new file mode 100644 index 0000000..96a9e94 --- /dev/null +++ b/doc/html/classKShowMailApp-members.html @@ -0,0 +1,85 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

KShowMailApp Member List

This is the complete list of members for KShowMailApp, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addFeatureList(KFeedbackQuestion *question)KShowMailApp [protected]
askCloseConfirmation()KShowMailApp [protected]
delayNextRefresh()KShowMailApp
event(QEvent *e)KShowMailApp [protected, virtual]
fLogKShowMailApp [private]
initActions()KShowMailApp [protected]
initDocument()KShowMailApp [protected]
initFirstRefresh()KShowMailApp [protected]
initNextRefresh()KShowMailApp [protected]
initStatusBar()KShowMailApp [protected]
initView()KShowMailApp [protected]
KShowMailApp()KShowMailApp
KshowmailDock classKShowMailApp [friend]
KshowmailView classKShowMailApp [friend]
m_actionRefreshKShowMailApp [private]
m_bForceCloseKShowMailApp [private]
m_ConfigListKShowMailApp [private]
m_nSecondsToGoKShowMailApp [private]
m_pAboutKShowMailApp [static]
m_pAlertDialogKShowMailApp [private]
m_pDocKShowMailApp [private]
m_pDockWindowKShowMailApp [private]
m_pTimerKShowMailApp [private]
m_pViewKShowMailApp [private]
m_stateKShowMailApp [private]
queryClose()KShowMailApp [protected, virtual]
queryExit()KShowMailApp [protected, virtual]
SetupDialogKShowMailApp [private]
slotAccountActivated(QListViewItem *)KShowMailApp [protected, slot]
slotAlertDestroyed()KShowMailApp [protected, slot]
slotAlertOk()KShowMailApp [protected, slot]
slotConfChanged()KShowMailApp [protected, slot]
slotDelete()KShowMailApp [protected, slot]
slotDeletionReady()KShowMailApp [protected, slot]
slotEditToolbars()KShowMailApp [protected, slot]
slotFileQuit()KShowMailApp [protected, slot]
slotForceClose()KShowMailApp [protected, slot]
slotNormalCursor()KShowMailApp [protected, slot]
slotRefresh()KShowMailApp [protected, slot]
slotRefreshReady()KShowMailApp [protected, slot]
slotRefreshView()KShowMailApp [protected, slot]
slotSaveOptions()KShowMailApp [protected, slot]
slotSendFeedbackMail()KShowMailApp [protected, slot]
slotSetup()KShowMailApp [protected, slot]
slotSetupAccount()KShowMailApp [protected, slot]
slotShowFilterLog()KShowMailApp [protected, slot]
slotShowHeader()KShowMailApp [protected, slot]
slotShowMessage()KShowMailApp [protected, slot]
slotShowMessageReady()KShowMailApp [protected, slot]
slotStatusHelpMsg(const QString &text)KShowMailApp [protected, slot]
slotStatusMsg(const QString &text)KShowMailApp [protected, slot]
slotStop()KShowMailApp [protected, slot]
slotWaitingCursor()KShowMailApp [protected, slot]
stopRefreshTimer()KShowMailApp [protected]
timerEvent(QTimerEvent *)KShowMailApp [protected, virtual]
UniqueApp classKShowMailApp [friend]
~KShowMailApp()KShowMailApp


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKShowMailApp.html b/doc/html/classKShowMailApp.html new file mode 100644 index 0000000..9d618a8 --- /dev/null +++ b/doc/html/classKShowMailApp.html @@ -0,0 +1,1211 @@ + + +kshowmail.kdevelop: KShowMailApp Class Reference + + + + + + +

KShowMailApp Class Reference

#include <kshowmail.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 KShowMailApp ()
 ~KShowMailApp ()
void delayNextRefresh ()

Static Public Attributes

static KAboutData * m_pAbout

Protected Slots

void slotStatusHelpMsg (const QString &text)
void slotStatusMsg (const QString &text)
void slotConfChanged ()
void slotDelete ()
void slotDeletionReady ()
void slotShowMessage ()
void slotShowMessageReady ()
void slotNormalCursor ()
void slotWaitingCursor ()
void slotRefresh ()
void slotRefreshReady ()
void slotAlertDestroyed ()
void slotAlertOk ()
void slotRefreshView ()
void slotStop ()
void slotShowHeader ()
void slotEditToolbars ()
void slotSaveOptions ()
void slotFileQuit ()
void slotSetupAccount ()
void slotSetup ()
void slotShowFilterLog ()
void slotAccountActivated (QListViewItem *)
void slotSendFeedbackMail ()
void slotForceClose ()

Protected Member Functions

void initStatusBar ()
void initActions ()
void initDocument ()
void initView ()
virtual bool queryClose ()
virtual bool queryExit ()
virtual void timerEvent (QTimerEvent *)
virtual bool event (QEvent *e)
void initFirstRefresh ()
void stopRefreshTimer ()
void initNextRefresh ()
void addFeatureList (KFeedbackQuestion *question)
bool askCloseConfirmation ()

Private Attributes

KshowmailDocm_pDoc
KshowmailViewm_pView
KCMultiDialog * SetupDialog
KAction * m_actionRefresh
ConfigList m_ConfigList
AlertDialogm_pAlertDialog
KShowMailDockm_pDockWindow
QTimer * m_pTimer
Types::State_Type m_state
unsigned long m_nSecondsToGo
FilterLog fLog
bool m_bForceClose

Friends

class KshowmailView
class KshowmailDock
class UniqueApp
+


Detailed Description

+The base class for Kshowmail application windows. It sets up the main window and reads the config file as well as providing a menubar, toolbar and statusbar. An instance of KshowmailView creates your center view, which is connected to the window's Doc object. KShowMailApp reimplements the methods that KMainWindow provides for main window handling and supports full session management as well as keyboard accelerator configuration by using KAccel.
See also:
KMainWindow

+KApplication

+KConfig

+KAccel

+
Author:
Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
+
Version:
KDevelop version 0.4 code generation
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
KShowMailApp::KShowMailApp (  ) 
+
+
+ +

+Constructor of KShowMailApp, calls all init functions to create the application.

See also:
initMenuBar initToolBar
+ +
+

+ +

+
+ + + + + + + + +
KShowMailApp::~KShowMailApp (  ) 
+
+
+ +

+Destructor +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
void KShowMailApp::delayNextRefresh (  ) 
+
+
+ +

+Delays the next refresh for one minute. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::initStatusBar (  )  [protected]
+
+
+ +

+sets up the statusbar for the main window by initialzing a statuslabel. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::initActions (  )  [protected]
+
+
+ +

+sets up the actions. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::initDocument (  )  [protected]
+
+
+ +

+initializes the document object of the main window that is connected to the view in initView().

See also:
initView();
+ +
+

+ +

+
+ + + + + + + + +
void KShowMailApp::initView (  )  [protected]
+
+
+ +

+creates the centerwidget of the KMainWindow instance and sets it as the view +

+

+ +

+
+ + + + + + + + +
bool KShowMailApp::queryClose (  )  [protected, virtual]
+
+
+ +

+queryClose is called by KMainWindow 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 should be saved if Modified; on cancel the closeEvent is rejected.

See also:
KMainWindow::queryClose

+KMainWindow::closeEvent

+ +
+

+ +

+
+ + + + + + + + +
bool KShowMailApp::queryExit (  )  [protected, virtual]
+
+
+ +

+queryExit is called by KMainWindow when the last window of the app 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 also:
KMainWindow::queryExit

+KMainWindow::closeEvent

+ +
+

+ +

+
+ + + + + + + + + +
void KShowMailApp::timerEvent (QTimerEvent *   )  [protected, virtual]
+
+
+ +

+overwrite method of QObject; will be invoked by the internal QObject-Timer the timer is set to 1 second in the construtor; this method sets the time to the next refresh in the statusbar and animates the "?" in the traybar, when the refresh is working +

+

+ +

+
+ + + + + + + + + +
bool KShowMailApp::event (QEvent *  e  )  [protected, virtual]
+
+
+ +

+overwrite method of QWidget; to hide the taskbar button +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::initFirstRefresh (  )  [protected]
+
+
+ +

+Starts the first refresh or starts the refresh timer with the configured init time. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::stopRefreshTimer (  )  [protected]
+
+
+ +

+Stops the refresh timer. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::initNextRefresh (  )  [protected]
+
+
+ +

+Starts the refresh timer for the next refresh. +

+

+ +

+
+ + + + + + + + + +
void KShowMailApp::slotStatusHelpMsg (const QString &  text  )  [protected, slot]
+
+
+ +

+Changes the status message of the whole statusbar for two seconds, then restores the last status. This is used to display statusbar messages that give information about actions for toolbar icons and menu entries.

Parameters:
+ + +
text the text that is displayed in the statusbar
+
+ +
+

+ +

+
+ + + + + + + + + +
void KShowMailApp::slotStatusMsg (const QString &  text  )  [protected, slot]
+
+
+ +

+Changes the contents in the left status bar item permanently, used to indicate current actions. And sets the current time in the right item.

Parameters:
+ + +
text the text that is displayed in the statusbar
+
+ +
+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotConfChanged (  )  [protected, slot]
+
+
+ +

+Connected with the setup dialog. Reloads the configuration, if it was changed from the dialog. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotDelete (  )  [protected, slot]
+
+
+ +

+Connected with action m_actionDelete. Deletes all selected mails. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotDeletionReady (  )  [protected, slot]
+
+
+ +

+Connected with signal sigDeleteReady of m_ConfigList. This signal will be emitted when one or many accounts have ended a deletion. This slot refreshes the view, sets the state to idle and sets a normal cursor. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotShowMessage (  )  [protected, slot]
+
+
+ +

+Connected with action m_actionShowMessage. Shows all selected mails. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotShowMessageReady (  )  [protected, slot]
+
+
+ +

+Connected with signal sigShowBodiesReady of m_ConfigList. This signal will be emitted when all accounts have downloaded and shown the selected messages. This slot sets the state to idle and sets a normal cursor. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotNormalCursor (  )  [protected, slot]
+
+
+ +

+Connected with signal sigMessageWindowOpened of m_ConfigList. This signal will be emitted when a window to show a mail body was opened. Switches the cursor to normal view. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotWaitingCursor (  )  [protected, slot]
+
+
+ +

+Connected with signal sigAllMessageWindowsClosed of m_ConfigList. This signal will be emitted when all windows to show a mail body have been closed. Switches the cursor to waiting view. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotRefresh (  )  [protected, slot]
+
+
+ +

+Connected with m_actionRefresh. Refreshes the mail list. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotRefreshReady (  )  [protected, slot]
+
+
+ +

+Connected with signal sigRefreshReady of m_ConfigList. This signal will be emitted when all accounts have refreshed their mail list. This slot refreshes the mail view. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotAlertDestroyed (  )  [protected, slot]
+
+
+ +

+Connected with signal destroyed of the alert message dialog. Sets m_pAlertDialog to NULL, if the dialog was destroyed. If m_pAlertDialog == NULL, slotRefreshReady will create a new instance of it.

See also:
m_pAlertDialog

+slotRefreshReady()

+ +
+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotAlertOk (  )  [protected, slot]
+
+
+ +

+Connected with signal signalOk of the alert message dialog. Switches the main window to normal view.

See also:
m_pAlertDialog;
+ +
+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotRefreshView (  )  [protected, slot]
+
+
+ +

+Refreshes the account and messages list view. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotStop (  )  [protected, slot]
+
+
+ +

+If the application state is not "idle" it will stop all current running POP3 jobs. Connected with m_actionStop(). +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotShowHeader (  )  [protected, slot]
+
+
+ +

+Shows the headers of all selected mails. Connected with action m_actionShowHeader. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotEditToolbars (  )  [protected, slot]
+
+
+ +

+Connected with standard action configureToolbars. Opens a dialog to configure the icons of the toolbar. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotSaveOptions (  )  [protected, slot]
+
+
+ +

+Saves GUI options, account and filter settings to the configuration file. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotFileQuit (  )  [protected, slot]
+
+
+ +

+Calls the close() method of KShowMailApp to exit the application. Uses askCloseConfirmation() to ask the user (if configured). Sets m_bForceClose to TRUE, therefore queryClose() will be passed without anything to do. After that in queryExit() slotSaveOptions() will be invoked. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotSetupAccount (  )  [protected, slot]
+
+
+ +

+Opens the setup dialog for the highlighted account. Connected with m_actionSetupAccount. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotSetup (  )  [protected, slot]
+
+
+ +

+Connected with the standard setup action. If the application state is "idle" (m_state == idle) it will open the configuration dialog. +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotShowFilterLog (  )  [protected, slot]
+
+
+ +

+Shows the filter log. +

+

+ +

+
+ + + + + + + + + +
void KShowMailApp::slotAccountActivated (QListViewItem *   )  [protected, slot]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotSendFeedbackMail (  )  [protected, slot]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void KShowMailApp::slotForceClose (  )  [protected, slot]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void KShowMailApp::addFeatureList (KFeedbackQuestion *  question  )  [protected]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
bool KShowMailApp::askCloseConfirmation (  )  [protected]
+
+
+ +

+ +

+

+


Friends And Related Function Documentation

+ +
+
+ + + + +
friend class KshowmailView [friend]
+
+
+ +

+ +

+

+ +

+
+ + + + +
friend class KshowmailDock [friend]
+
+
+ +

+ +

+

+ +

+
+ + + + +
friend class UniqueApp [friend]
+
+
+ +

+ +

+

+


Member Data Documentation

+ +
+
+ + + + +
KshowmailDoc* KShowMailApp::m_pDoc [private]
+
+
+ +

+The central document of our application. Just contains the view (m_pView). +

+

+ +

+
+ + + + +
KshowmailView* KShowMailApp::m_pView [private]
+
+
+ +

+Contains the account and messages list views. +

+

+ +

+
+ + + + +
KCMultiDialog* KShowMailApp::SetupDialog [private]
+
+
+ +

+The setup dialog. Created and used by slotSetup(). +

+

+ +

+
+ + + + +
KAction* KShowMailApp::m_actionRefresh [private]
+
+
+ +

+refresh messages action; connected with slotRefresh() +

+

+ +

+
+ + + + +
ConfigList KShowMailApp::m_ConfigList [private]
+
+
+ +

+Contains the application and account settings. The account settings are stored in ConfigElem objects. +

+

+ +

+ +
+ +

+Message box which will be shown, when new mail has arrived. +

+

+ +

+ +
+ +

+The window into the system tray. +

+

+ +

+
+ + + + +
QTimer* KShowMailApp::m_pTimer [private]
+
+
+ +

+The refresh timer. Its timeout signal is connected with slotRefresh(). +

+

+ +

+ +
+ +

+Application state during the run time. Shows what KShowMail is doing :-) . +

+

+ +

+
+ + + + +
unsigned long KShowMailApp::m_nSecondsToGo [private]
+
+
+ +

+Number of seconds until the next refresh +

+

+ +

+
+ + + + +
FilterLog KShowMailApp::fLog [private]
+
+
+ +

+The filter log. +

+

+ +

+
+ + + + +
KAboutData * KShowMailApp::m_pAbout [static]
+
+
+ +

+Contains information about KShowMail, including author, license, version etc. This is accessed in main() when calling KShowMailApp::initMenuBar() to create the help menu. +

+

+ +

+
+ + + + +
bool KShowMailApp::m_bForceClose [private]
+
+
+ +

+ +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmail.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmail.cpp
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmailfeedback.cpp
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKShowMailDock-members.html b/doc/html/classKShowMailDock-members.html new file mode 100644 index 0000000..ec8f04f --- /dev/null +++ b/doc/html/classKShowMailDock-members.html @@ -0,0 +1,36 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

KShowMailDock Member List

This is the complete list of members for KShowMailDock, including all inherited members.

+ + + + + + + + +
clear()KShowMailDock
drawNumber(int n, const QColor &color)KShowMailDock
drawText(const QString str, const QColor &color)KShowMailDock
KShowMailDock(QWidget *, KAction *actionRefresh)KShowMailDock
m_backgroundKShowMailDock [private]
sigActivated(int)KShowMailDock [signal]
sigHighlighted(int)KShowMailDock [signal]
~KShowMailDock()KShowMailDock [inline]


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKShowMailDock.html b/doc/html/classKShowMailDock.html new file mode 100644 index 0000000..c62b9f5 --- /dev/null +++ b/doc/html/classKShowMailDock.html @@ -0,0 +1,240 @@ + + +kshowmail.kdevelop: KShowMailDock Class Reference + + + + + + +

KShowMailDock Class Reference

#include <kshowmaildock.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + +

Signals

void sigActivated (int)
void sigHighlighted (int)

Public Member Functions

 KShowMailDock (QWidget *, KAction *actionRefresh)
 ~KShowMailDock ()
void drawText (const QString str, const QColor &color)
void drawNumber (int n, const QColor &color)
void clear ()

Private Attributes

QPixmap m_background
+


Detailed Description

+
Author:
Eggert Ehmke
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
KShowMailDock::KShowMailDock (QWidget * ,
KAction *  actionRefresh 
)
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
KShowMailDock::~KShowMailDock (  )  [inline]
+
+
+ +

+ +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void KShowMailDock::drawText (const QString  str,
const QColor &  color 
)
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void KShowMailDock::drawNumber (int  n,
const QColor &  color 
)
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void KShowMailDock::clear (  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void KShowMailDock::sigActivated (int   )  [signal]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void KShowMailDock::sigHighlighted (int   )  [signal]
+
+
+ +

+ +

+

+


Member Data Documentation

+ +
+
+ + + + +
QPixmap KShowMailDock::m_background [private]
+
+
+ +

+ +

+

+


The documentation for this class was generated from the following files: +
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKshowmailDoc-members.html b/doc/html/classKshowmailDoc-members.html new file mode 100644 index 0000000..764afc0 --- /dev/null +++ b/doc/html/classKshowmailDoc-members.html @@ -0,0 +1,38 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

KshowmailDoc Member List

This is the complete list of members for KshowmailDoc, including all inherited members.

+ + + + + + + + + + +
addView(KshowmailView *view)KshowmailDoc
doc_urlKshowmailDoc [private]
KshowmailDoc(QWidget *parent, const char *name=0)KshowmailDoc
newDocument()KshowmailDoc
pViewKshowmailDoc [static]
removeView(KshowmailView *view)KshowmailDoc
setURL(const KURL &url)KshowmailDoc
slotUpdateAllViews(KshowmailView *sender)KshowmailDoc [slot]
URL() constKshowmailDoc
~KshowmailDoc()KshowmailDoc


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKshowmailDoc.html b/doc/html/classKshowmailDoc.html new file mode 100644 index 0000000..614bd5c --- /dev/null +++ b/doc/html/classKshowmailDoc.html @@ -0,0 +1,264 @@ + + +kshowmail.kdevelop: KshowmailDoc Class Reference + + + + + + +

KshowmailDoc Class Reference

#include <kshowmaildoc.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

void slotUpdateAllViews (KshowmailView *sender)

Public Member Functions

 KshowmailDoc (QWidget *parent, const char *name=0)
 ~KshowmailDoc ()
void addView (KshowmailView *view)
void removeView (KshowmailView *view)
bool newDocument ()
const KURL & URL () const
void setURL (const KURL &url)

Static Public Attributes

static KshowmailViewpView

Private Attributes

KURL doc_url
+


Detailed Description

+KshowmailDoc provides a document object for a document-view model.

+The KshowmailDoc class provides a document object that can be used in conjunction with the classes KshowmailApp and KshowmailView to create a document-view model for standard KDE applications based on KApplication and KMainWindow. Thereby, the document object is created by the KshowmailApp instance and contains the document structure with the according methods for manipulation of the document data by KshowmailView objects. Also, KshowmailDoc contains the methods for serialization of the document data from and to files.

+

Author:
Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
+
Version:
KDevelop version 1.2 code generation
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
KshowmailDoc::KshowmailDoc (QWidget *  parent,
const char *  name = 0 
)
+
+
+ +

+Constructor for the fileclass of the application +

+

+ +

+
+ + + + + + + + +
KshowmailDoc::~KshowmailDoc (  ) 
+
+
+ +

+Destructor for the fileclass of the application +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
void KshowmailDoc::addView (KshowmailView view  ) 
+
+
+ +

+adds a view to the document which represents the document contents. Usually this is your main view. +

+

+ +

+
+ + + + + + + + + +
void KshowmailDoc::removeView (KshowmailView view  ) 
+
+
+ +

+removes a view from the list of currently connected views +

+

+ +

+
+ + + + + + + + +
bool KshowmailDoc::newDocument (  ) 
+
+
+ +

+initializes the document generally +

+

+ +

+
+ + + + + + + + +
const KURL & KshowmailDoc::URL (  )  const
+
+
+ +

+returns the KURL of the document +

+

+ +

+
+ + + + + + + + + +
void KshowmailDoc::setURL (const KURL &  url  ) 
+
+
+ +

+sets the URL of the document +

+

+ +

+
+ + + + + + + + + +
void KshowmailDoc::slotUpdateAllViews (KshowmailView sender  )  [slot]
+
+
+ +

+calls repaint() on all views connected to the document object and is called by the view by which the document has been changed. As this view normally repaints itself, it is excluded from the paintEvent. +

+

+


Member Data Documentation

+ +
+
+ + + + +
KshowmailView * KshowmailDoc::pView [static]
+
+
+ +

+the list of the views currently connected to the document +

+

+ +

+
+ + + + +
KURL KshowmailDoc::doc_url [private]
+
+
+ +

+the modified flag of the current document +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildoc.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildoc.cpp
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKshowmailView-members.html b/doc/html/classKshowmailView-members.html new file mode 100644 index 0000000..aa29796 --- /dev/null +++ b/doc/html/classKshowmailView-members.html @@ -0,0 +1,45 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

KshowmailView Member List

This is the complete list of members for KshowmailView, including all inherited members.

+ + + + + + + + + + + + + + + + + +
clearMailListView()KshowmailView
configKshowmailView [private]
insertMail(QString &number, QString &account, QString &from, QString &to, QString &subject, QString &date, QString &size, QString &content, QString &state, QString &time)KshowmailView
KshowmailView(QWidget *parent=0, const char *name=0)KshowmailView
m_pixOkKshowmailView [private]
m_pListAccountsKshowmailView
m_pListMessagesKshowmailView
readOptions()KshowmailView [private]
refreshSetup()KshowmailView
saveOptions(KConfig *config)KshowmailView
signalActiveChanged()KshowmailView [signal]
slotAccountClicked(QListViewItem *, const QPoint &point, int col)KshowmailView [private, slot]
slotAccountContext(QListViewItem *, const QPoint &, int)KshowmailView [private, slot]
slotMessageClicked(QListViewItem *)KshowmailView [private, slot]
slotMessageContext(QListViewItem *, const QPoint &, int)KshowmailView [private, slot]
slotMessageDoubleClicked(QListViewItem *)KshowmailView [private, slot]
~KshowmailView()KshowmailView


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classKshowmailView.html b/doc/html/classKshowmailView.html new file mode 100644 index 0000000..0831a68 --- /dev/null +++ b/doc/html/classKshowmailView.html @@ -0,0 +1,525 @@ + + +kshowmail.kdevelop: KshowmailView Class Reference + + + + + + +

KshowmailView Class Reference

#include <kshowmailview.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Signals

void signalActiveChanged ()

Public Member Functions

 KshowmailView (QWidget *parent=0, const char *name=0)
 ~KshowmailView ()
void saveOptions (KConfig *config)
void clearMailListView ()
ShowListViewIteminsertMail (QString &number, QString &account, QString &from, QString &to, QString &subject, QString &date, QString &size, QString &content, QString &state, QString &time)
void refreshSetup ()

Public Attributes

KListView * m_pListAccounts
KListView * m_pListMessages

Private Slots

void slotMessageContext (QListViewItem *, const QPoint &, int)
void slotMessageDoubleClicked (QListViewItem *)
void slotMessageClicked (QListViewItem *)
void slotAccountContext (QListViewItem *, const QPoint &, int)
void slotAccountClicked (QListViewItem *, const QPoint &point, int col)

Private Member Functions

void readOptions ()

Private Attributes

QPixmap * m_pixOk
KConfig * config
+


Detailed Description

+The KshowmailView class provides the view widget for the KShowMailApp instance. The View instance inherits QWidget as a base class and represents the view object of a KMainWindow. As KshowmailView is part of the document-view model, it needs a reference to the document object connected with it by the KShowMailApp class to manipulate and display the document structure provided by the KshowmailDoc class.

+

Author:
Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.

+Ulrich Weigelt <ulrich.weigelt@gmx.de>

+
Version:
KDevelop version 0.4 code generation
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
KshowmailView::KshowmailView (QWidget *  parent = 0,
const char *  name = 0 
)
+
+
+ +

+Constructor for the main view +

+

+ +

+
+ + + + + + + + +
KshowmailView::~KshowmailView (  ) 
+
+
+ +

+Destructor for the main view +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
void KshowmailView::saveOptions (KConfig *  config  ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + +
void KshowmailView::clearMailListView (  ) 
+
+
+ +

+Clears the mail list view. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ShowListViewItem * KshowmailView::insertMail (QString &  number,
QString &  account,
QString &  from,
QString &  to,
QString &  subject,
QString &  date,
QString &  size,
QString &  content,
QString &  state,
QString &  time 
)
+
+
+ +

+Creates a mail list view item with the given content and inserts it into the mail list view.

Parameters:
+ + + + + + + + + + + +
number mail number
account account name
from sender of the mail
to recipient of the mail
subject mail subject
date date on which the mail was sent, formated to the current locale's conventions.
size size of the mail
content content type
state new or old
time send date, formated to the ISO 8601 extended specification (YYYY-MM-DDTHH:MM:SS)
+
+
Returns:
pointer to the created list view item
+ +
+

+ +

+
+ + + + + + + + +
void KshowmailView::refreshSetup (  ) 
+
+
+ +

+Refreshes the geometry. Reads from the config file the properties about show or hide columns. If a shown column should be hidden, the current width will be saved and the column will be hidden. If a hidden column should be shown, it will be set to the old saved width. +

+

+ +

+
+ + + + + + + + +
void KshowmailView::readOptions (  )  [private]
+
+
+ +

+Reads the some geometry options from the application config file. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void KshowmailView::slotMessageContext (QListViewItem * ,
const QPoint & ,
int  
) [private, slot]
+
+
+ +

+Connected with signal rightButtonClicked of m_pListMessages. Invoked, when the user has clicked on a list item with the right mouse button. Selects the clicked item and shows the popup menu mail_context_popup defined in kshowmailui.rc. +

+

+ +

+
+ + + + + + + + + +
void KshowmailView::slotMessageDoubleClicked (QListViewItem *   )  [private, slot]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void KshowmailView::slotMessageClicked (QListViewItem *   )  [private, slot]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void KshowmailView::slotAccountContext (QListViewItem * ,
const QPoint & ,
int  
) [private, slot]
+
+
+ +

+Connected with signal rightButtonClicked of m_pListAccounts. Invoked, when the user has clicked on a list item with the right mouse button. Selects the clicked item and shows the popup menu account_context_popup defined in kshowmailui.rc. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void KshowmailView::slotAccountClicked (QListViewItem * ,
const QPoint &  point,
int  col 
) [private, slot]
+
+
+ +

+Connected with signal clicked of the account list. Activate or deactivate the account, if the user has clicked in the first column +

+

+ +

+
+ + + + + + + + +
void KshowmailView::signalActiveChanged (  )  [signal]
+
+
+ +

+ +

+

+


Member Data Documentation

+ +
+
+ + + + +
KListView* KshowmailView::m_pListAccounts
+
+
+ +

+ +

+

+ +

+
+ + + + +
KListView* KshowmailView::m_pListMessages
+
+
+ +

+ +

+

+ +

+
+ + + + +
QPixmap* KshowmailView::m_pixOk [private]
+
+
+ +

+ +

+

+ +

+
+ + + + +
KConfig* KshowmailView::config [private]
+
+
+ +

+Connector to the configuration file +

+

+


The documentation for this class was generated from the following files: +
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classLogger-members.html b/doc/html/classLogger-members.html new file mode 100644 index 0000000..73880ee --- /dev/null +++ b/doc/html/classLogger-members.html @@ -0,0 +1,33 @@ + + +kshowmail: Member List + + + + + + +

Logger Member List

This is the complete list of members for Logger, including all inherited members.

+ + + + + +
flush()Logger [static]
logfileLogger [static]
Logger()Logger [inline]
logstreamLogger [static]
~Logger()Logger


Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classLogger.html b/doc/html/classLogger.html new file mode 100644 index 0000000..a647303 --- /dev/null +++ b/doc/html/classLogger.html @@ -0,0 +1,58 @@ + + +kshowmail: Logger Class Reference + + + + + + +

Logger Class Reference

#include <logger.h> +

+List of all members. + + + + + + + + + + + + + + +

Public Member Functions

Logger ()
~Logger ()

Static Public Member Functions

+static void flush ()

Static Public Attributes

+static QTextStream * logstream
+static QFile logfile
+


Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 29 of file logger.h.


The documentation for this class was generated from the following files: +
Generated on Thu Jul 5 19:36:09 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classOptionDialog-members.html b/doc/html/classOptionDialog-members.html new file mode 100644 index 0000000..1b78f79 --- /dev/null +++ b/doc/html/classOptionDialog-members.html @@ -0,0 +1,123 @@ + + +kshowmail: Member List + + + + + + +

OptionDialog Member List

This is the complete list of members for OptionDialog, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_checkConfirmCloseOptionDlg
GroupBox2OptionDlg
GroupBox2LayoutOptionDlg [protected]
GroupBox3OptionDlg
GroupBox3LayoutOptionDlg [protected]
groupBox4OptionDlg
groupBox4LayoutOptionDlg [protected]
languageChange()OptionDlg [protected, virtual, slot]
layout2OptionDlg [protected]
layout3OptionDlg [protected]
m_ButtonAddOptionDlg
m_ButtonCancelOptionDlg
m_ButtonCopyOptionDlg
m_ButtonDeleteOptionDlg
m_ButtonEditOptionDlg
m_ButtonExternalProgTestOptionDlg
m_ButtonOkOptionDlg
m_ButtonSelectSoundFileOptionDlg
m_ButtonSoundTestOptionDlg
m_CheckAccount1OptionDlg
m_CheckAccount2OptionDlg
m_CheckActiveOptionDlg
m_CheckBeepOptionDlg
m_CheckCloseMinimizesOptionDlg
m_CheckConfirmDeleteOptionDlg
m_CheckContentOptionDlg
m_CheckDateOptionDlg
m_CheckExternalProgOptionDlg
m_CheckFromOptionDlg
m_checkHTMLOptionDlg
m_CheckKeepNewMailOptionDlg
m_CheckMessagesOptionDlg
m_CheckMinimizeNoMailOptionDlg
m_CheckMinimizeToTrayOptionDlg
m_CheckNumberOptionDlg
m_CheckSavePasswordOptionDlg
m_CheckServerOptionDlg
m_CheckShowMainWindowOptionDlg
m_CheckShowMessageboxOptionDlg
m_CheckSize1OptionDlg
m_CheckSize2OptionDlg
m_CheckSoundOptionDlg
m_CheckStartMinimizedOptionDlg
m_CheckStateOptionDlg
m_CheckSubjectOptionDlg
m_CheckTerminateNoMailOptionDlg
m_CheckToOptionDlg
m_CheckUserOptionDlg
m_ComboAccountOptionDlg
m_ComboExternalProgOptionDlg
m_ConfigListOptionDialog [private]
m_EditSoundFileOptionDlg
m_pCmdListOptionDialog [private]
m_pConfigListOptionDialog [private]
m_SpinInitTimerOptionDlg
m_SpinIntervalTimerOptionDlg
m_SpinMaxSizeOptionDlg
m_SpinPop3TimerOptionDlg
OptionDialog(QWidget *parent, const char *name, ConfigList *config, CommandList *cmd)OptionDialog
OptionDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)OptionDlg
OptionDlgLayoutOptionDlg [protected]
QGroupBox_1OptionDlg
QGroupBox_1LayoutOptionDlg [protected]
QLabel_1OptionDlg
QLabel_2OptionDlg
QLabel_3OptionDlg
QLabel_4OptionDlg
QLabel_5OptionDlg
QLabel_6OptionDlg
slotAccountActivated(int index)OptionDialog [virtual, slot]
slotButtonAddClicked()OptionDialog [virtual, slot]
slotButtonCopyClicked()OptionDialog [virtual, slot]
slotButtonDeleteClicked()OptionDialog [virtual, slot]
slotButtonEditClicked()OptionDialog [virtual, slot]
slotButtonOkClicked()OptionDialog [virtual, slot]
slotButtonSelectSoundFile()OptionDialog [virtual, slot]
slotExternalProgTest()OptionDialog [virtual, slot]
slotMinimizeNoMailClicked()OptionDialog [virtual, slot]
slotSavePasswordToggled()OptionDialog [virtual, slot]
slotSoundTest()OptionDialog [virtual, slot]
slotTerminateNoMailClicked()OptionDialog [virtual, slot]
spacer2OptionDlg [protected]
spacer4OptionDlg [protected]
Spacer70OptionDlg [protected]
tabOptionDlg
tab_2OptionDlg
tab_3OptionDlg
tab_4OptionDlg
tabLayoutOptionDlg [protected]
tabLayout_2OptionDlg [protected]
tabLayout_3OptionDlg [protected]
tabLayout_4OptionDlg [protected]
TabWidget2OptionDlg
~OptionDialog()OptionDialog
~OptionDlg()OptionDlg


Generated on Wed May 16 21:15:20 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classOptionDialog.html b/doc/html/classOptionDialog.html new file mode 100644 index 0000000..9d1d98d --- /dev/null +++ b/doc/html/classOptionDialog.html @@ -0,0 +1,99 @@ + + +kshowmail: OptionDialog Class Reference + + + + + + +

OptionDialog Class Reference

#include <optiondialog.h> +

+

Inheritance diagram for OptionDialog: +

+ +OptionDlg + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotButtonAddClicked ()
+virtual void slotButtonEditClicked ()
+virtual void slotButtonCopyClicked ()
+virtual void slotButtonDeleteClicked ()
+virtual void slotButtonOkClicked ()
+virtual void slotAccountActivated (int index)
+virtual void slotSavePasswordToggled ()
+virtual void slotButtonSelectSoundFile ()
+virtual void slotMinimizeNoMailClicked ()
+virtual void slotTerminateNoMailClicked ()
+virtual void slotSoundTest ()
+virtual void slotExternalProgTest ()

Public Member Functions

OptionDialog (QWidget *parent, const char *name, ConfigList *config, CommandList *cmd)
~OptionDialog ()

Private Attributes

+ConfigList m_ConfigList
+ConfigListm_pConfigList
+CommandListm_pCmdList
+

Detailed Description

+
Author:
Eggert Ehmke
+ +

+ +

+Definition at line 30 of file optiondialog.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:20 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classOptionDialog.png b/doc/html/classOptionDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9b5d8386413f314c727b935dea19c4b418eb2c GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^p+FqK!VDy5iK*NIQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi&e)6>N<#G~`=~4UP2{>P6VqIs8s--fg+Ap!=GIzVwOZ_42QzHVTDod$n(E=b}xDvXV6l zY#K#syMIi2u=m`jSvIQPI?Ju3L7@KFvvq%`ovp48`!n@jH~*j0|FrD3IQ`nNIco3v z2tAL~`^SIYn3x~e+pbrCI&NC>jns|ehKJ;y9!^oWzIoDXf~Abb=hWvZ6F>2_hfZI2 zndN)V#qjcwrOAe}oqU`>xgPk0OjkEzcsT8;X{8ri=_K}Bn=VAG&{;FZU*~&HT5NsZ ztE$laq|Z05&Ia1Pa$DS=)Z}k=Z+b%xoqNQ<{p7*?dnc7|H0J-~RPJ8kp}bGb6Bt4a Mp00i_>zopr0KYh*D*ylh literal 0 HcmV?d00001 diff --git a/doc/html/classOptionDlg-members.html b/doc/html/classOptionDlg-members.html new file mode 100644 index 0000000..1f204b6 --- /dev/null +++ b/doc/html/classOptionDlg-members.html @@ -0,0 +1,118 @@ + + +kshowmail: Member List + + + + + + +

OptionDlg Member List

This is the complete list of members for OptionDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_checkConfirmCloseOptionDlg
GroupBox2OptionDlg
GroupBox2LayoutOptionDlg [protected]
GroupBox3OptionDlg
GroupBox3LayoutOptionDlg [protected]
groupBox4OptionDlg
groupBox4LayoutOptionDlg [protected]
languageChange()OptionDlg [protected, virtual, slot]
layout2OptionDlg [protected]
layout3OptionDlg [protected]
m_ButtonAddOptionDlg
m_ButtonCancelOptionDlg
m_ButtonCopyOptionDlg
m_ButtonDeleteOptionDlg
m_ButtonEditOptionDlg
m_ButtonExternalProgTestOptionDlg
m_ButtonOkOptionDlg
m_ButtonSelectSoundFileOptionDlg
m_ButtonSoundTestOptionDlg
m_CheckAccount1OptionDlg
m_CheckAccount2OptionDlg
m_CheckActiveOptionDlg
m_CheckBeepOptionDlg
m_CheckCloseMinimizesOptionDlg
m_CheckConfirmDeleteOptionDlg
m_CheckContentOptionDlg
m_CheckDateOptionDlg
m_CheckExternalProgOptionDlg
m_CheckFromOptionDlg
m_checkHTMLOptionDlg
m_CheckKeepNewMailOptionDlg
m_CheckMessagesOptionDlg
m_CheckMinimizeNoMailOptionDlg
m_CheckMinimizeToTrayOptionDlg
m_CheckNumberOptionDlg
m_CheckSavePasswordOptionDlg
m_CheckServerOptionDlg
m_CheckShowMainWindowOptionDlg
m_CheckShowMessageboxOptionDlg
m_CheckSize1OptionDlg
m_CheckSize2OptionDlg
m_CheckSoundOptionDlg
m_CheckStartMinimizedOptionDlg
m_CheckStateOptionDlg
m_CheckSubjectOptionDlg
m_CheckTerminateNoMailOptionDlg
m_CheckToOptionDlg
m_CheckUserOptionDlg
m_ComboAccountOptionDlg
m_ComboExternalProgOptionDlg
m_EditSoundFileOptionDlg
m_SpinInitTimerOptionDlg
m_SpinIntervalTimerOptionDlg
m_SpinMaxSizeOptionDlg
m_SpinPop3TimerOptionDlg
OptionDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)OptionDlg
OptionDlgLayoutOptionDlg [protected]
QGroupBox_1OptionDlg
QGroupBox_1LayoutOptionDlg [protected]
QLabel_1OptionDlg
QLabel_2OptionDlg
QLabel_3OptionDlg
QLabel_4OptionDlg
QLabel_5OptionDlg
QLabel_6OptionDlg
slotAccountActivated(int)OptionDlg [virtual, slot]
slotButtonAddClicked()OptionDlg [virtual, slot]
slotButtonCopyClicked()OptionDlg [virtual, slot]
slotButtonDeleteClicked()OptionDlg [virtual, slot]
slotButtonEditClicked()OptionDlg [virtual, slot]
slotButtonOkClicked()OptionDlg [virtual, slot]
slotButtonSelectSoundFile()OptionDlg [virtual, slot]
slotExternalProgTest()OptionDlg [virtual, slot]
slotMinimizeNoMailClicked()OptionDlg [virtual, slot]
slotSavePasswordToggled()OptionDlg [virtual, slot]
slotSoundTest()OptionDlg [virtual, slot]
slotTerminateNoMailClicked()OptionDlg [virtual, slot]
spacer2OptionDlg [protected]
spacer4OptionDlg [protected]
Spacer70OptionDlg [protected]
tabOptionDlg
tab_2OptionDlg
tab_3OptionDlg
tab_4OptionDlg
tabLayoutOptionDlg [protected]
tabLayout_2OptionDlg [protected]
tabLayout_3OptionDlg [protected]
tabLayout_4OptionDlg [protected]
TabWidget2OptionDlg
~OptionDlg()OptionDlg


Generated on Wed May 16 21:15:21 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classOptionDlg.html b/doc/html/classOptionDlg.html new file mode 100644 index 0000000..b21d2ad --- /dev/null +++ b/doc/html/classOptionDlg.html @@ -0,0 +1,317 @@ + + +kshowmail: OptionDlg Class Reference + + + + + + +

OptionDlg Class Reference

Inheritance diagram for OptionDlg: +

+ +OptionDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotExternalProgTest ()
+virtual void slotAccountActivated (int)
+virtual void slotButtonAddClicked ()
+virtual void slotButtonCopyClicked ()
+virtual void slotButtonDeleteClicked ()
+virtual void slotButtonEditClicked ()
+virtual void slotButtonOkClicked ()
+virtual void slotButtonSelectSoundFile ()
+virtual void slotMinimizeNoMailClicked ()
+virtual void slotSavePasswordToggled ()
+virtual void slotSoundTest ()
+virtual void slotTerminateNoMailClicked ()

Public Member Functions

OptionDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~OptionDlg ()

Public Attributes

+QGroupBox * QGroupBox_1
+QLabel * QLabel_1
+QPushButton * m_ButtonDelete
+QPushButton * m_ButtonCopy
+QPushButton * m_ButtonEdit
+QPushButton * m_ButtonAdd
+QComboBox * m_ComboAccount
+QTabWidget * TabWidget2
+QWidget * tab
+QCheckBox * m_CheckSavePassword
+QCheckBox * m_CheckStartMinimized
+QCheckBox * m_CheckConfirmDelete
+QLabel * QLabel_2
+QLabel * QLabel_3
+QLabel * QLabel_6
+QLabel * QLabel_4
+QSpinBox * m_SpinPop3Timer
+QSpinBox * m_SpinInitTimer
+QSpinBox * m_SpinIntervalTimer
+QSpinBox * m_SpinMaxSize
+QCheckBox * _checkConfirmClose
+QCheckBox * m_CheckKeepNewMail
+QCheckBox * m_CheckCloseMinimizes
+QCheckBox * m_CheckMinimizeToTray
+QWidget * tab_2
+QGroupBox * GroupBox3
+QCheckBox * m_CheckActive
+QCheckBox * m_CheckAccount1
+QCheckBox * m_CheckServer
+QCheckBox * m_CheckUser
+QCheckBox * m_CheckMessages
+QCheckBox * m_CheckSize1
+QGroupBox * GroupBox2
+QCheckBox * m_CheckNumber
+QCheckBox * m_CheckAccount2
+QCheckBox * m_CheckFrom
+QCheckBox * m_CheckTo
+QCheckBox * m_CheckSubject
+QCheckBox * m_CheckDate
+QCheckBox * m_CheckSize2
+QCheckBox * m_CheckContent
+QCheckBox * m_CheckState
+QGroupBox * groupBox4
+QCheckBox * m_checkHTML
+QWidget * tab_3
+QCheckBox * m_CheckMinimizeNoMail
+QCheckBox * m_CheckTerminateNoMail
+QWidget * tab_4
+QCheckBox * m_CheckBeep
+QCheckBox * m_CheckShowMainWindow
+QCheckBox * m_CheckSound
+QCheckBox * m_CheckExternalProg
+QPushButton * m_ButtonSelectSoundFile
+QPushButton * m_ButtonSoundTest
+QLabel * QLabel_5
+QComboBox * m_ComboExternalProg
+QPushButton * m_ButtonExternalProgTest
+QLineEdit * m_EditSoundFile
+QCheckBox * m_CheckShowMessagebox
+QPushButton * m_ButtonOk
+QPushButton * m_ButtonCancel

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QVBoxLayout * OptionDlgLayout
+QGridLayout * QGroupBox_1Layout
+QSpacerItem * spacer4
+QSpacerItem * spacer2
+QVBoxLayout * layout3
+QGridLayout * tabLayout
+QHBoxLayout * tabLayout_2
+QVBoxLayout * GroupBox3Layout
+QVBoxLayout * GroupBox2Layout
+QVBoxLayout * groupBox4Layout
+QVBoxLayout * tabLayout_3
+QGridLayout * tabLayout_4
+QHBoxLayout * layout2
+QSpacerItem * Spacer70
+

Detailed Description

+ +

+ +

+Definition at line 30 of file OptionDlg.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:21 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classOptionDlg.png b/doc/html/classOptionDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..c787b905c4109427b25078f2a4ff7d750d30b13f GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^p+FqK!VDy5iK*NIQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWu_VYZn8D%MjWi&e-_yl0#G~`=ho6?j@7UNTN&u5MZtyCP`m z8+)hR&x=)d=*k3{3h4_PJ>$ONf5dTn6Zg9C=c%?!G=6MSn_E3u_vePF&t|Vnz2$8T z82XeWA3E1?n4Ql4^volYFZWs~5dQ7)jcwPRy)QTNWB9J~b{{7HF|AqAy5&{++N%2- zViTzXd#%*F1xm#> zK4~b(P?2b^L4)8 zIeV-u{%uw0`c0WRuR`mWR%@(HufI8CFMqW%@7K*12PWNX{J(Ru`-W%s`LBL4 + +kshowmail.kdevelop: Member List + + + + + + +

ServerDialog Member List

This is the complete list of members for ServerDialog, including all inherited members.

+ + + + + + + + + + + + + + + + +
accountServerDialog [private]
cboProtocolServerDialog [private]
chkActiveServerDialog [private]
fillDialog()ServerDialog [protected]
grpPasswordStorageServerDialog [private]
grpSecureTransferServerDialog [private]
ServerDialog(QWidget *parent, ConfigElem *item=NULL)ServerDialog
slotOk()ServerDialog [protected, slot]
slotPasswordStorageChanged(int id)ServerDialog [protected, slot]
slotSecureTransferChanged(int id)ServerDialog [protected, slot]
spbPortServerDialog [private]
txtAccountServerDialog [private]
txtPasswordServerDialog [private]
txtServerServerDialog [private]
txtUserServerDialog [private]
~ServerDialog()ServerDialog


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classServerDialog.html b/doc/html/classServerDialog.html new file mode 100644 index 0000000..c7c70ea --- /dev/null +++ b/doc/html/classServerDialog.html @@ -0,0 +1,375 @@ + + +kshowmail.kdevelop: ServerDialog Class Reference + + + + + + +

ServerDialog Class Reference

Dialog to edit account options. You can not create a new account or edit the account name. +More... +

+#include <serverdialog.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 ServerDialog (QWidget *parent, ConfigElem *item=NULL)
 ~ServerDialog ()

Protected Slots

void slotPasswordStorageChanged (int id)
void slotSecureTransferChanged (int id)
void slotOk ()

Protected Member Functions

void fillDialog ()

Private Attributes

ConfigElemaccount
KLineEdit * txtAccount
KLineEdit * txtServer
KComboBox * cboProtocol
QSpinBox * spbPort
KLineEdit * txtUser
KPasswordEdit * txtPassword
QCheckBox * chkActive
QButtonGroup * grpPasswordStorage
QButtonGroup * grpSecureTransfer
+


Detailed Description

+Dialog to edit account options. You can not create a new account or edit the account name. +

+

Author:
Eggert Ehmke

+Ulrich Weigelt <ulrich.weigelt@gmx.de>

+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
ServerDialog::ServerDialog (QWidget *  parent,
ConfigElem item = NULL 
)
+
+
+ +

+General constructor

Parameters:
+ + + +
parent parent of the dialog
item account to setup
+
+ +
+

+ +

+
+ + + + + + + + +
ServerDialog::~ServerDialog (  ) 
+
+
+ +

+Destructor +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
void ServerDialog::slotPasswordStorageChanged (int  id  )  [protected, slot]
+
+
+ +

+Connected with the password button group. Enabled or disabled the password edit line.

Parameters:
+ + +
id button identifier
+
+ +
+

+ +

+
+ + + + + + + + + +
void ServerDialog::slotSecureTransferChanged (int  id  )  [protected, slot]
+
+
+ +

+Connected with the secure transfer button group. Changes the port number.

Parameters:
+ + +
id button identifier
+
+ +
+

+ +

+
+ + + + + + + + +
void ServerDialog::slotOk (  )  [protected, slot]
+
+
+ +

+Overwritten methode of KDialogBase. Called if OK was clicked. Stores the entered values into the given account item. If no item was given, it creates a new one. After then it invokes slotOk() of KDialogBase. +

+

+ +

+
+ + + + + + + + +
void ServerDialog::fillDialog (  )  [protected]
+
+
+ +

+Writes the values of the account into the dialog items. +

+

+


Member Data Documentation

+ +
+
+ + + + +
ConfigElem* ServerDialog::account [private]
+
+
+ +

+account to setup +

+

+ +

+
+ + + + +
KLineEdit* ServerDialog::txtAccount [private]
+
+
+ +

+Edit line which contains the unique account name. +

+

+ +

+
+ + + + +
KLineEdit* ServerDialog::txtServer [private]
+
+
+ +

+Edit line which contains the server name. +

+

+ +

+
+ + + + +
KComboBox* ServerDialog::cboProtocol [private]
+
+
+ +

+Combo box to choose the protocol. +

+

+ +

+
+ + + + +
QSpinBox* ServerDialog::spbPort [private]
+
+
+ +

+Spinbox to choose the tcp port. +

+

+ +

+
+ + + + +
KLineEdit* ServerDialog::txtUser [private]
+
+
+ +

+Edit line which contains the user name. +

+

+ +

+
+ + + + +
KPasswordEdit* ServerDialog::txtPassword [private]
+
+
+ +

+Edit line which contains the password. +

+

+ +

+
+ + + + +
QCheckBox* ServerDialog::chkActive [private]
+
+
+ +

+Check box to select whether the account is active or not. +

+

+ +

+
+ + + + +
QButtonGroup* ServerDialog::grpPasswordStorage [private]
+
+
+ +

+Combines the radio buttons of password storage. +

+

+ +

+
+ + + + +
QButtonGroup* ServerDialog::grpSecureTransfer [private]
+
+
+ +

+Combines the radio buttons of secure transfer. +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/serverdialog.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/serverdialog.cpp
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classServerDialog.png b/doc/html/classServerDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..86fb286352071a22c7035757e8e155012279376e GIT binary patch literal 406 zcmV;H0crk;P)Klu-_Y zAPk1-%bwfbpqyaYF0?1_e}uIKF%xu<%w#4OV@Uf^etwDJ*&p}th~05+n5Zfeag-LU zNnXQ-Zo%40%VL1&Hq5%3bi#%W4Om-g89?Wt+aPKheV!5o ziws+!!^)nbkYFq?S`J7F4l|4yURErfEl1?qF{IBr%cx+;T@s9Q`a{MF_5_3?BTK3@ zo6pHtd(4gOGZ0j6bi@D*Be045vnzTGJn}1e1Lp&w + +kshowmail: Member List + + + + + + +

ServerDlg Member List

This is the complete list of members for ServerDlg, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
CheckActiveServerDlg
languageChange()ServerDlg [protected, virtual, slot]
Layout13ServerDlg [protected]
Layout14ServerDlg [protected]
Layout15ServerDlg [protected]
m_ButtonCancelServerDlg
m_ButtonOkServerDlg
m_ComboProtocolServerDlg
m_EditAccountServerDlg
m_EditPasswordServerDlg
m_EditServerServerDlg
m_EditUserServerDlg
m_SpinPortServerDlg
QLabel_1ServerDlg
QLabel_2ServerDlg
QLabel_3ServerDlg
QLabel_4ServerDlg
QLabel_5ServerDlg
QLabel_6ServerDlg
ServerDlg(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)ServerDlg
ServerDlgLayoutServerDlg [protected]
slotButtonOkClicked()ServerDlg [virtual, slot]
Spacer1ServerDlg [protected]
Spacer10ServerDlg [protected]
Spacer11ServerDlg [protected]
~ServerDlg()ServerDlg


Generated on Wed May 16 21:15:21 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classServerDlg.html b/doc/html/classServerDlg.html new file mode 100644 index 0000000..d786310 --- /dev/null +++ b/doc/html/classServerDlg.html @@ -0,0 +1,125 @@ + + +kshowmail: ServerDlg Class Reference + + + + + + +

ServerDlg Class Reference

Inheritance diagram for ServerDlg: +

+ +ServerDialog + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Slots

+virtual void slotButtonOkClicked ()

Public Member Functions

ServerDlg (QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags fl=0)
~ServerDlg ()

Public Attributes

+QLabel * QLabel_4
+QLineEdit * m_EditAccount
+QLineEdit * m_EditServer
+QLabel * QLabel_3
+QCheckBox * CheckActive
+QPushButton * m_ButtonOk
+QPushButton * m_ButtonCancel
+QLabel * QLabel_1
+QLabel * QLabel_2
+QLabel * QLabel_5
+QLabel * QLabel_6
+QComboBox * m_ComboProtocol
+QSpinBox * m_SpinPort
+QLineEdit * m_EditUser
+QLineEdit * m_EditPassword

Protected Slots

+virtual void languageChange ()

Protected Attributes

+QGridLayout * ServerDlgLayout
+QHBoxLayout * Layout13
+QSpacerItem * Spacer1
+QHBoxLayout * Layout15
+QSpacerItem * Spacer11
+QHBoxLayout * Layout14
+QSpacerItem * Spacer10
+

Detailed Description

+ +

+ +

+Definition at line 28 of file ServerDlg.h.


The documentation for this class was generated from the following files: +
Generated on Wed May 16 21:15:21 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classServerDlg.png b/doc/html/classServerDlg.png new file mode 100644 index 0000000000000000000000000000000000000000..076105ff4a3534b6579fca21c8b2702011ab8568 GIT binary patch literal 413 zcmV;O0b>4%P)KltGTe zAPhy#rfb_ba86LoNIg$ix&INyHiSsvL?BJ1R*H!#YCp{9hZbl&5DGHx44zd+>2r^#9?hzk)Cx-!@3 zv91@v7rJr7H+;i4d;gGXa|`oE1+cc#vWU(_w_(=R z?DL!;*=5)Q9ah$!tceVB{h + +kshowmail.kdevelop: Member List + + + + + + +

ShowListViewItem Member List

This is the complete list of members for ShowListViewItem, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_colAccount enum valueShowListViewItem
_colContent enum valueShowListViewItem
_colDate enum valueShowListViewItem
_colFrom enum valueShowListViewItem
_colNumber enum valueShowListViewItem
_colSize enum valueShowListViewItem
_colState enum valueShowListViewItem
_colSubject enum valueShowListViewItem
_colTo enum valueShowListViewItem
compare(QListViewItem *i, int col, bool ascending) constShowListViewItem [virtual]
key(int column, bool ascending) constShowListViewItem [virtual]
m_timeShowListViewItem [private]
setAccount(const QString &)ShowListViewItem
setContent(const QString &)ShowListViewItem
setDate(const QString &)ShowListViewItem
setFrom(const QString &)ShowListViewItem
setNumber(const QString &)ShowListViewItem
setSize(const QString &)ShowListViewItem
setState(const QString &)ShowListViewItem
setSubject(const QString &)ShowListViewItem
setTime(const QString &)ShowListViewItem
setTo(const QString &)ShowListViewItem
ShowListViewItem(QListView *parent, ShowListViewItem *after)ShowListViewItem
ShowListViewItem(QListView *parent)ShowListViewItem
~ShowListViewItem()ShowListViewItem [virtual]


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classShowListViewItem.html b/doc/html/classShowListViewItem.html new file mode 100644 index 0000000..fde173f --- /dev/null +++ b/doc/html/classShowListViewItem.html @@ -0,0 +1,487 @@ + + +kshowmail.kdevelop: ShowListViewItem Class Reference + + + + + + +

ShowListViewItem Class Reference

#include <showlistviewitem.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

enum  {
+  _colNumber, +_colAccount, +_colFrom, +_colTo, +
+  _colSubject, +_colDate, +_colSize, +_colContent, +
+  _colState +
+ }

Public Member Functions

 ShowListViewItem (QListView *parent, ShowListViewItem *after)
 ShowListViewItem (QListView *parent)
virtual ~ShowListViewItem ()
virtual QString key (int column, bool ascending) const
virtual int compare (QListViewItem *i, int col, bool ascending) const
void setNumber (const QString &)
void setAccount (const QString &)
void setFrom (const QString &)
void setTo (const QString &)
void setSubject (const QString &)
void setDate (const QString &)
void setSize (const QString &)
void setContent (const QString &)
void setState (const QString &)
void setTime (const QString &)

Private Attributes

QString m_time
+


Detailed Description

+
Author:
Eggert Ehmke
+ +

+


Member Enumeration Documentation

+ +
+
+ + + + +
anonymous enum
+
+
+ +

+

Enumerator:
+ + + + + + + + + + +
_colNumber  +
_colAccount  +
_colFrom  +
_colTo  +
_colSubject  +
_colDate  +
_colSize  +
_colContent  +
_colState  +
+
+ +
+

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
ShowListViewItem::ShowListViewItem (QListView *  parent,
ShowListViewItem after 
)
+
+
+ +

+Constructor

Parameters:
+ + + +
parent mail list view
after insert the new item after this item
+
+ +
+

+ +

+
+ + + + + + + + + +
ShowListViewItem::ShowListViewItem (QListView *  parent  ) 
+
+
+ +

+Constructor

Parameters:
+ + +
parent mail list view
+
+ +
+

+ +

+
+ + + + + + + + +
ShowListViewItem::~ShowListViewItem (  )  [virtual]
+
+
+ +

+ +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
QString ShowListViewItem::key (int  column,
bool  ascending 
) const [virtual]
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ShowListViewItem::compare (QListViewItem *  i,
int  col,
bool  ascending 
) const [virtual]
+
+
+ +

+reimplement compare to solve bug #856005 standard compare is locale dependant +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setNumber (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setAccount (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setFrom (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setTo (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setSubject (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setDate (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setSize (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setContent (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setState (const QString &   ) 
+
+
+ +

+ +

+

+ +

+
+ + + + + + + + + +
void ShowListViewItem::setTime (const QString &   ) 
+
+
+ +

+ +

+

+


Member Data Documentation

+ +
+
+ + + + +
QString ShowListViewItem::m_time [private]
+
+
+ +

+ +

+

+


The documentation for this class was generated from the following files: +
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classShowRecord-members.html b/doc/html/classShowRecord-members.html new file mode 100644 index 0000000..bc37347 --- /dev/null +++ b/doc/html/classShowRecord-members.html @@ -0,0 +1,62 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

ShowRecord Member List

This is the complete list of members for ShowRecord, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
appendNewMail(int number, QString uid, bool isNew)ShowRecord
applyHeaderFilter(HeaderFilter *filter, QString account, MailNumberList_Type &deleteList, MailToDownloadMap_Type &downloadList, FilterLog *log=NULL)ShowRecord
cancelShowHeadersShowRecord [static]
continueShowHeadersShowRecord [static]
decodeMailBody(QByteArray body, int number, bool preferHTML) constShowRecord
fillMailListView(KshowmailView *view, QString &account)ShowRecord
getDateOf(int number) constShowRecord
getHeaderOf(QString uid)ShowRecord
getNewMails()ShowRecord
getNumberMails()ShowRecord
getNumberNewMails()ShowRecord
getSelectedMails()ShowRecord
getSelectedSubjects() constShowRecord
getSenderOf(int number) constShowRecord
getSizeOf(int number) constShowRecord
getSubjectOf(int number) constShowRecord
getTotalSize()ShowRecord
getUIDsOfOldMails()ShowRecord
hasMail(QString uid)ShowRecord
hasSelectedMails()ShowRecord
isNew(QString uid) const ShowRecord
printMailList()ShowRecord
readStoredMails(QDomElement &parent)ShowRecord
removeMail(int number)ShowRecord
saveOptions(QDomDocument &doc, QDomElement &parent)ShowRecord
setHeader(int number, QString header)ShowRecord
setHeader(QString uid, QString header)ShowRecord
setMarkAtNextViewRefresh(int number)ShowRecord
setSize(int number, long size)ShowRecord
ShowRecord()ShowRecord
showSelectedHeaders(QString &account)ShowRecord
writeToDeleteLog(FilterLog *log, int number, QString account)ShowRecord
writeToMoveLog(FilterLog *log, int number, QString account, QString mailbox)ShowRecord
~ShowRecord()ShowRecord


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classShowRecord.html b/doc/html/classShowRecord.html new file mode 100644 index 0000000..9e972ec --- /dev/null +++ b/doc/html/classShowRecord.html @@ -0,0 +1,1060 @@ + + +kshowmail.kdevelop: ShowRecord Class Reference + + + + + + +

ShowRecord Class Reference

List which contains all mails of an account. +More... +

+#include <showrecord.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 ShowRecord ()
 ~ShowRecord ()
void saveOptions (QDomDocument &doc, QDomElement &parent)
void readStoredMails (QDomElement &parent)
void applyHeaderFilter (HeaderFilter *filter, QString account, MailNumberList_Type &deleteList, MailToDownloadMap_Type &downloadList, FilterLog *log=NULL)
bool hasSelectedMails ()
Types::MailNumberList_Type getSelectedMails ()
void removeMail (int number)
QStringList getSelectedSubjects () const
QString getSenderOf (int number) const
QString getDateOf (int number) const
QString getSizeOf (int number) const
QString getSubjectOf (int number) const
QString decodeMailBody (QByteArray body, int number, bool preferHTML) const
bool hasMail (QString uid)
bool isNew (QString uid) const
void appendNewMail (int number, QString uid, bool isNew)
void printMailList ()
void setSize (int number, long size)
Types::MailNumberList_Type getNewMails ()
void setHeader (int number, QString header)
QStringList getUIDsOfOldMails ()
QString getHeaderOf (QString uid)
void setHeader (QString uid, QString header)
int getNumberNewMails ()
int getNumberMails ()
long getTotalSize ()
void fillMailListView (KshowmailView *view, QString &account)
int showSelectedHeaders (QString &account)
void writeToMoveLog (FilterLog *log, int number, QString account, QString mailbox)
void writeToDeleteLog (FilterLog *log, int number, QString account)
void setMarkAtNextViewRefresh (int number)

Static Public Attributes

static const int continueShowHeaders
static const int cancelShowHeaders
+


Detailed Description

+List which contains all mails of an account. +

+The mails are objects of ShowRecordElem. Inherits QPtrList.

+

See also:
ShowRecordElem
+
Author:
Eggert Ehmke

+Ulrich Weigelt

+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
ShowRecord::ShowRecord (  ) 
+
+
+ +

+Constructor +

+

+ +

+
+ + + + + + + + +
ShowRecord::~ShowRecord (  ) 
+
+
+ +

+Destructor Does nothing. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ShowRecord::saveOptions (QDomDocument &  doc,
QDomElement &  parent 
)
+
+
+ +

+Saves all stored mails into the given DOM document inside the given account element.

Parameters:
+ + + +
doc DOM document in that all options are stored
parent account element
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecord::readStoredMails (QDomElement &  parent  ) 
+
+
+ +

+Reads out all mails stored inside the given account element, creates objects from class ShowRecordElem and stores them in this list. All old items will be removed.

Parameters:
+ + +
parent account element (DOM element)
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ShowRecord::applyHeaderFilter (HeaderFilter filter,
QString  account,
MailNumberList_Type &  deleteList,
MailToDownloadMap_Type &  downloadList,
FilterLog log = NULL 
)
+
+
+ +

+Apply the filters to the mails in this list.

Parameters:
+ + + + + + +
filter pointer to the header filter
account name of this account
deleteList reference to a list in which this methode writes the numbers of mails to delete
downloadList reference to a list in which this methode writes the number of mails to download
log pointer to the filter log
+
+ +
+

+ +

+
+ + + + + + + + +
bool ShowRecord::hasSelectedMails (  ) 
+
+
+ +

+Returns whether there are mails in this list which are selected in the list view.

Returns:
TRUE - there are selected mails

+FALSE - there aren't selected mails

+ +
+

+ +

+
+ + + + + + + + +
MailNumberList_Type ShowRecord::getSelectedMails (  ) 
+
+
+ +

+Returns the numbers of all selected mails.

Returns:
numbers of selected mails.
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecord::removeMail (int  number  ) 
+
+
+ +

+Removes the mail which has the given number.

Parameters:
+ + +
number number of the mail which will be removed
+
+ +
+

+ +

+
+ + + + + + + + +
QStringList ShowRecord::getSelectedSubjects (  )  const
+
+
+ +

+Returns the subjects of the selected mails.

Returns:
subjects of selected mails
+ +
+

+ +

+
+ + + + + + + + + +
QString ShowRecord::getSenderOf (int  number  )  const
+
+
+ +

+Returns the sender of the mail with the given number.

Parameters:
+ + +
number mail number
+
+
Returns:
sender
+ +
+

+ +

+
+ + + + + + + + + +
QString ShowRecord::getDateOf (int  number  )  const
+
+
+ +

+Returns the date of sent of the mail with the given number.

Parameters:
+ + +
number mail number
+
+
Returns:
date
+ +
+

+ +

+
+ + + + + + + + + +
QString ShowRecord::getSizeOf (int  number  )  const
+
+
+ +

+Returns the size of the mail with the given number.

Parameters:
+ + +
number mail number
+
+
Returns:
size
+ +
+

+ +

+
+ + + + + + + + + +
QString ShowRecord::getSubjectOf (int  number  )  const
+
+
+ +

+Returns the subject of the mail with the given number.

Parameters:
+ + +
number mail number
+
+
Returns:
subject
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
QString ShowRecord::decodeMailBody (QByteArray  body,
int  number,
bool  preferHTML 
) const
+
+
+ +

+Decodes the given mail body by the appropriate mail object. The mail object (ShowRecordElem) has to do this job, because it has stored the mail header and therefore it knows the content type and encoding of the mail. It decodes just the text or html part of the body. The rest of it will be rejected.

Parameters:
+ + + + +
body the encoded mail (including header)
number number of the downloaded mail
preferHTML decode HTML part if present
+
+
Returns:
decoded mail body
+ +
+

+ +

+
+ + + + + + + + + +
bool ShowRecord::hasMail (QString  uid  ) 
+
+
+ +

+Returns whether there is mail with the given uid in the list.

Parameters:
+ + +
uid UID of the mail
+
+
Returns:
TRUE - mail is in the list

+FALSE - mail is not in the list

+ +
+

+ +

+
+ + + + + + + + + +
bool ShowRecord::isNew (QString  uid  )  const
+
+
+ +

+Returns whether the given mail is new.

Parameters:
+ + +
uid UID of the mail
+
+
Returns:
TRUE - mail is new

+FALSE - mail is not new or mail doesn't exist

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ShowRecord::appendNewMail (int  number,
QString  uid,
bool  isNew 
)
+
+
+ +

+Appends a new mail to the list.

Parameters:
+ + + + +
number number of the mail on the server
uid Unique ID of the mail
isNew TRUE - mail is new; FALSE - mail is not new
+
+ +
+

+ +

+
+ + + + + + + + +
void ShowRecord::printMailList (  ) 
+
+
+ +

+Just for debugging. Prints a list of all contained mails to stdout. +

+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecord::setSize (int  number,
long  size 
)
+
+
+ +

+Sets the size of a mail.

Parameters:
+ + + +
number number of the mail
size mail size
+
+ +
+

+ +

+
+ + + + + + + + +
Types::MailNumberList_Type ShowRecord::getNewMails (  ) 
+
+
+ +

+Returns the numbers of mails which are marked as new.

Returns:
numbers of the new mails
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecord::setHeader (int  number,
QString  header 
)
+
+
+ +

+Sets the header of the given mail.

Parameters:
+ + + +
number number of the mail
header the header
+
+ +
+

+ +

+
+ + + + + + + + +
QStringList ShowRecord::getUIDsOfOldMails (  ) 
+
+
+ +

+Returns a list of the UIDs of all old mails.

Returns:
UIDs of all old mails
+ +
+

+ +

+
+ + + + + + + + + +
QString ShowRecord::getHeaderOf (QString  uid  ) 
+
+
+ +

+Returns the header of the mail with the given UID.

Parameters:
+ + +
uid UID
+
+
Returns:
mail header
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecord::setHeader (QString  uid,
QString  header 
)
+
+
+ +

+Sets the header of the mail with the given UID.

Parameters:
+ + + +
uid UID
header mail header
+
+ +
+

+ +

+
+ + + + + + + + +
int ShowRecord::getNumberNewMails (  ) 
+
+
+ +

+Returns the number of new mails.

Returns:
number of new mails
+ +
+

+ +

+
+ + + + + + + + +
int ShowRecord::getNumberMails (  ) 
+
+
+ +

+Returns the number of mails.

Returns:
number of mails
+ +
+

+ +

+
+ + + + + + + + +
long ShowRecord::getTotalSize (  ) 
+
+
+ +

+Returns the total size of all mails.

Returns:
total size
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecord::fillMailListView (KshowmailView view,
QString &  account 
)
+
+
+ +

+Creates for every mail a list view item and insert it into the mail list view.

Parameters:
+ + + +
view pointer to the application view
account account name
+
+ +
+

+ +

+
+ + + + + + + + + +
int ShowRecord::showSelectedHeaders (QString &  account  ) 
+
+
+ +

+Shows the headers of all selected mails.

Parameters:
+ + +
account account name
+
+
Returns:
continueShowHeaders - the user has always clicked OK. The invoking function will show the next header

+cancelShowHeaders - the user has clicked Cancel. The invoking function will not show the next header.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ShowRecord::writeToMoveLog (FilterLog log,
int  number,
QString  account,
QString  mailbox 
)
+
+
+ +

+Writes the mail into the Move Log.

Parameters:
+ + + + + +
log pointer to the log
number number of the mail
account name of the account
mailbox name of the mailbox
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ShowRecord::writeToDeleteLog (FilterLog log,
int  number,
QString  account 
)
+
+
+ +

+Writes the mail into the Delete Log.

Parameters:
+ + + + +
log pointer to the log
number number of the mail
account name of the account
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecord::setMarkAtNextViewRefresh (int  number  ) 
+
+
+ +

+The given mail will be marked at the next view refresh.

Parameters:
+ + +
number number of the mail
+
+ +
+

+


Member Data Documentation

+ +
+
+ + + + +
int const ShowRecord::continueShowHeaders [static]
+
+
+ +

+Returned by showSelectedHeaders() if the user has always clicked OK. +

+

+ +

+
+ + + + +
int const ShowRecord::cancelShowHeaders [static]
+
+
+ +

+Returned by showSelectedHeaders() if the user has clicked Cancel. +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecord.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecord.cpp
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classShowRecordElem-members.html b/doc/html/classShowRecordElem-members.html new file mode 100644 index 0000000..a130b5c --- /dev/null +++ b/doc/html/classShowRecordElem-members.html @@ -0,0 +1,86 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

ShowRecordElem Member List

This is the complete list of members for ShowRecordElem, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
applyHeaderFilter(HeaderFilter *filter, QString account, QString &mailbox, FilterLog *log=NULL)ShowRecordElem
cancelShowHeadersShowRecordElem [static]
content() constShowRecordElem
continueShowHeadersShowRecordElem [static]
date() constShowRecordElem
decodeMailBody(QByteArray body, bool preferHTML) constShowRecordElem
from() constShowRecordElem
getBoundary() constShowRecordElem [private]
getCharset() constShowRecordElem [private]
getTransferEncoding() constShowRecordElem [private]
header() constShowRecordElem
isNew() constShowRecordElem
isSelected() constShowRecordElem
m_contentShowRecordElem [private]
m_fromShowRecordElem [private]
m_headerShowRecordElem [private]
m_newShowRecordElem [private]
m_nNumberShowRecordElem [private]
m_pFilterShowRecordElem [private]
m_pItemShowRecordElem [private]
m_sizeShowRecordElem [private]
m_subjectShowRecordElem [private]
m_toShowRecordElem [private]
m_uidShowRecordElem [private]
m_unixDateShowRecordElem [private]
markAtViewRefreshShowRecordElem [private]
number() constShowRecordElem
readOptions(QDomElement &elem)ShowRecordElem
saveOptions(QDomDocument &doc, QDomElement &parent)ShowRecordElem
scanHeader(const QString &item) constShowRecordElem [private]
sentDateTime() constShowRecordElem
setContent(const QCString &content)ShowRecordElem [private]
setDate(const QCString &date)ShowRecordElem [private]
setFilter(FilterElem *filter)ShowRecordElem [private]
setFrom(const QCString &from)ShowRecordElem [private]
setHeader(const QString &header)ShowRecordElem
setMarkAtNextViewRefresh()ShowRecordElem
setNew(bool isnew)ShowRecordElem
setNumber(int n)ShowRecordElem
setSize(int size)ShowRecordElem
setSubject(const QCString &subject)ShowRecordElem [private]
setTo(const QCString &to)ShowRecordElem [private]
setUIDL(const QString &uid)ShowRecordElem
setViewItem(ShowListViewItem *item)ShowRecordElem
showHeader(QString &account)ShowRecordElem
ShowRecordElem()ShowRecordElem
ShowRecordElem(int number, QString &uid, bool isNew)ShowRecordElem
size() constShowRecordElem
state() constShowRecordElem
strSize() constShowRecordElem
strSizePrefix() constShowRecordElem
strUnixTime() constShowRecordElem
subject() constShowRecordElem
to() constShowRecordElem
uidl() constShowRecordElem
viewItem() constShowRecordElem
writeToDeleteLog(FilterLog *log, QString account)ShowRecordElem
writeToMoveLog(FilterLog *log, QString account, QString mailbox)ShowRecordElem


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classShowRecordElem.html b/doc/html/classShowRecordElem.html new file mode 100644 index 0000000..64055a4 --- /dev/null +++ b/doc/html/classShowRecordElem.html @@ -0,0 +1,1459 @@ + + +kshowmail.kdevelop: ShowRecordElem Class Reference + + + + + + +

ShowRecordElem Class Reference

Represents a mail. +More... +

+#include <showrecordelem.h> +

+List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 ShowRecordElem ()
 ShowRecordElem (int number, QString &uid, bool isNew)
void setHeader (const QString &header)
QString header () const
QString from () const
QString to () const
QString subject () const
QString content () const
QString date () const
QString strUnixTime () const
QDateTime sentDateTime () const
void setUIDL (const QString &uid)
QString uidl () const
void setSize (int size)
int size () const
QString strSize () const
QString strSizePrefix () const
void setNew (bool isnew)
bool isNew () const
QString state () const
void setNumber (int n)
int number () const
void setViewItem (ShowListViewItem *item)
ShowListViewItemviewItem () const
FilterAction_Type applyHeaderFilter (HeaderFilter *filter, QString account, QString &mailbox, FilterLog *log=NULL)
void readOptions (QDomElement &elem)
void saveOptions (QDomDocument &doc, QDomElement &parent)
bool isSelected () const
QString decodeMailBody (QByteArray body, bool preferHTML) const
int showHeader (QString &account)
void writeToMoveLog (FilterLog *log, QString account, QString mailbox)
void writeToDeleteLog (FilterLog *log, QString account)
void setMarkAtNextViewRefresh ()

Static Public Attributes

static const int continueShowHeaders
static const int cancelShowHeaders

Private Member Functions

QCString scanHeader (const QString &item) const
void setFrom (const QCString &from)
void setTo (const QCString &to)
void setSubject (const QCString &subject)
void setDate (const QCString &date)
void setContent (const QCString &content)
void setFilter (FilterElem *filter)
QString getBoundary () const
QString getCharset () const
QString getTransferEncoding () const

Private Attributes

QCString m_header
QCString m_from
QCString m_to
QCString m_subject
QDateTime m_unixDate
QCString m_content
QString m_uid
int m_size
bool m_new
int m_nNumber
bool markAtViewRefresh
ShowListViewItemm_pItem
FilterElem * m_pFilter
+


Detailed Description

+Represents a mail. +

+It contains UID, Subject, From, To and date of the mail. Subject, From and To will be read out from the given header. It also contains pointer to the corresponding list view entry and maybe to a matching filter. All mail objects are held by ShowRecord.

See also:
ShowRecord

+ConfigElem

+
Author:
Eggert Ehmke
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
ShowRecordElem::ShowRecordElem (  ) 
+
+
+ +

+Constructor +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ShowRecordElem::ShowRecordElem (int  number,
QString &  uid,
bool  isNew 
)
+
+
+ +

+Constructor

Parameters:
+ + + + +
number number of the mail on the server
uid Unique ID of the mail
isNew TRUE - mail is new; FALSE - mail is not new
+
+ +
+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
void ShowRecordElem::setHeader (const QString &  header  ) 
+
+
+ +

+Sets the mail header and extracts From, To, Subject, Date and Content Type. All parts of the header are coded according RFC 2047.

Parameters:
+ + +
header the mail header
+
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::header (  )  const
+
+
+ +

+Returns the whole header.

Returns:
the mail header
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::from (  )  const
+
+
+ +

+Returns the sender address.

Returns:
sender address
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::to (  )  const
+
+
+ +

+Returns the addressee.

Returns:
the addressee
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::subject (  )  const
+
+
+ +

+Returns the subject.

Returns:
mail subject
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::content (  )  const
+
+
+ +

+Returns the stored content type.

Returns:
content type
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::date (  )  const
+
+
+ +

+Returns the date on which the mail was sent, formated to the current locale's conventions.

Returns:
the date
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::strUnixTime (  )  const
+
+
+ +

+Returns the date on which the mail was sent. The format corresponds to the ISO 8601 extended specification for representations of dates and times, which is YYYY-MM-DDTHH:MM:SS

Returns:
the date
+ +
+

+ +

+
+ + + + + + + + +
QDateTime ShowRecordElem::sentDateTime (  )  const
+
+
+ +

+Returns the date and time on which the mail was sent.

Returns:
the date
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setUIDL (const QString &  uid  ) 
+
+
+ +

+Sets the unique mail ID.

Parameters:
+ + +
uid the ID
+
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::uidl (  )  const
+
+
+ +

+Returns the unique ID of this mail.

Returns:
UID
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setSize (int  size  ) 
+
+
+ +

+Sets the size of the mail.

Parameters:
+ + +
size Size
+
+ +
+

+ +

+
+ + + + + + + + +
int ShowRecordElem::size (  )  const
+
+
+ +

+Returns the mail size as numeric value.

Returns:
size of the mail
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::strSize (  )  const
+
+
+ +

+Returns the mail size as string. The String has a length of 8 and the number is right-aligned to allow sorting. +

+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::strSizePrefix (  )  const
+
+
+ +

+Returns the mails size as string with prefix +

+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setNew (bool  isnew  ) 
+
+
+ +

+Sets whether the mail is new or not.

Parameters:
+ + +
isnew TRUE - mail is new; FALSE - mail is not new
+
+ +
+

+ +

+
+ + + + + + + + +
bool ShowRecordElem::isNew (  )  const
+
+
+ +

+Returns whether the mail is new or not.

Returns:
TRUE - mail is new

+FALSE - mail is not new

+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::state (  )  const
+
+
+ +

+Returns whether the mail is new or not.

Returns:
localized String "new", if the mail is new

+localized String "old", if the mail is not new

+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setNumber (int  n  ) 
+
+
+ +

+Sets the number of this mail.

Parameters:
+ + +
n mail number
+
+ +
+

+ +

+
+ + + + + + + + +
int ShowRecordElem::number (  )  const
+
+
+ +

+Returns the number of this mail.

Returns:
mail number
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setViewItem (ShowListViewItem item  ) 
+
+
+ +

+Sets the pointer to the corresponding list view item.

See also:
m_pItem

+ShowListViewItem

+
Parameters:
+ + +
item pointer to the corresponding item
+
+ +
+

+ +

+
+ + + + + + + + +
ShowListViewItem * ShowRecordElem::viewItem (  )  const
+
+
+ +

+Returns the pointer to the corresponding list view item.

See also:
m_pItem

+ShowListViewItem

+
Returns:
pointer to the item
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilterAction_Type ShowRecordElem::applyHeaderFilter (HeaderFilter filter,
QString  account,
QString &  mailbox,
FilterLog log = NULL 
)
+
+
+ +

+Looks for a filter matching the mail header and returns the action recommend by this filter. If the action is MARK, it set markAtViewRefresh to True so the related view entry will be marked at the next view refresh.

Parameters:
+ + + + + +
filter pointer to the header filter
account name of the account
mailbox reference to a QString object in which the mailbox name shall be written if the action is MOVE
log pointer to the filter log
+
+
Returns:
recommend action
+
See also:
FilterAction_Type

+HeaderFilter

+markAtViewRefresh

+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::readOptions (QDomElement &  elem  ) 
+
+
+ +

+Read a mail (header, size, uid and number) from the given DOM element and store it in this mail object. The element has to contains the attributes "uidl", "size", "number" and a child node called "header".

Parameters:
+ + +
elem a DOM element which contains a mail
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecordElem::saveOptions (QDomDocument &  doc,
QDomElement &  parent 
)
+
+
+ +

+Creates a new DOM element in the given DOM document and add it to given DOM parent element

Parameters:
+ + + +
doc the DOM document in that all options are stored
parent the parent element (account) of the mail
+
+ +
+

+ +

+
+ + + + + + + + +
bool ShowRecordElem::isSelected (  )  const
+
+
+ +

+Returns whether the mail is selected in the list view.

Returns:
TRUE - mail is selected

+FALSE - mail is not selected

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
QString ShowRecordElem::decodeMailBody (QByteArray  body,
bool  preferHTML 
) const
+
+
+ +

+Decodes the given mail body. The mail object has to do this job, because it has stored the mail header and therefore it knows the content type and encoding of the mail. It decodes just the text or html part of the body. The rest of it will be rejected.

Parameters:
+ + + +
body the encoded mail (including header)
preferHTML decode HTML part if present
+
+
Returns:
decoded mail body
+ +
+

+ +

+
+ + + + + + + + + +
int ShowRecordElem::showHeader (QString &  account  ) 
+
+
+ +

+Shows the header in a dialog box.

Parameters:
+ + +
account account name
+
+
Returns:
continueShowHeaders - the user has OK clicked. The invoking function will show the next header

+cancelShowHeaders - the user has Cancel clicked. The invoking function will not show the next header.

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ShowRecordElem::writeToMoveLog (FilterLog log,
QString  account,
QString  mailbox 
)
+
+
+ +

+Writes this mail into the Move Log.

Parameters:
+ + + + +
log pointer to the log
account name of the account
mailbox name of the mailbox
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void ShowRecordElem::writeToDeleteLog (FilterLog log,
QString  account 
)
+
+
+ +

+Writes this mail into the Delete Log.

Parameters:
+ + + +
log pointer to the log
account name of the account
+
+ +
+

+ +

+
+ + + + + + + + +
void ShowRecordElem::setMarkAtNextViewRefresh (  ) 
+
+
+ +

+The mail will be marked at the next view refresh. +

+

+ +

+
+ + + + + + + + + +
QCString ShowRecordElem::scanHeader (const QString &  item  )  const [private]
+
+
+ +

+Searches in the header for a line which starts with the given item. For example: scanHeader( "From") will find the line "From: Ulrich Weigelt <ulrich.weigelt@gmx.de>" and returns "Ulrich Weigelt <ulrich.weigelt@gmx.de>" Returns an empty string (""), if nothing was found.

Parameters:
+ + +
item the search item
+
+
Returns:
the content of the found line
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setFrom (const QCString &  from  )  [private]
+
+
+ +

+Sets the given string as sender address

Parameters:
+ + +
from sender address
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setTo (const QCString &  to  )  [private]
+
+
+ +

+Sets the given string as recipient address

Parameters:
+ + +
to recipient address
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setSubject (const QCString &  subject  )  [private]
+
+
+ +

+Sets the given string as subject

Parameters:
+ + +
subject the mail subject
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setDate (const QCString &  date  )  [private]
+
+
+ +

+Converts the given string to a date-time value and stores it.

Parameters:
+ + +
date the date
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setContent (const QCString &  content  )  [private]
+
+
+ +

+Sets the given string as content type.

Parameters:
+ + +
content the content type
+
+ +
+

+ +

+
+ + + + + + + + + +
void ShowRecordElem::setFilter (FilterElem *  filter  )  [private]
+
+
+ +

+Sets the pointer to a matching filter. Used by applyFilters().

See also:
applyFilters
+
Parameters:
+ + +
filter pointer to the filter
+
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::getBoundary (  )  const [private]
+
+
+ +

+Returns the boundary, if the mail has a multi part body. Otherwise it returns an empty string.

Returns:
boundary
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::getCharset (  )  const [private]
+
+
+ +

+Returns the char set of the content (e.g. iso-8859-1). If no char set is denoted, it will returns an empty string.

Returns:
charset
+ +
+

+ +

+
+ + + + + + + + +
QString ShowRecordElem::getTransferEncoding (  )  const [private]
+
+
+ +

+Returns the content transfer encoding of the content (e.g. quoted-printable). If no encoding is denoted, it will returns an empty string.

Returns:
content transfer encoding
+ +
+

+


Member Data Documentation

+ +
+
+ + + + +
int const ShowRecordElem::continueShowHeaders [static]
+
+
+ +

+Returned by showHeader(), if the user has clicked OK. +

+

+ +

+
+ + + + +
int const ShowRecordElem::cancelShowHeaders [static]
+
+
+ +

+Returned by showHeader(), if the user has clicked Cancel. +

+

+ +

+
+ + + + +
QCString ShowRecordElem::m_header [private]
+
+
+ +

+Mail header; coded according RFC 2047 +

+

+ +

+
+ + + + +
QCString ShowRecordElem::m_from [private]
+
+
+ +

+The sender address; coded according RFC 2047 +

+

+ +

+
+ + + + +
QCString ShowRecordElem::m_to [private]
+
+
+ +

+The addressee; coded according RFC 2047 +

+

+ +

+
+ + + + +
QCString ShowRecordElem::m_subject [private]
+
+
+ +

+The subject; coded according RFC 2047 +

+

+ +

+
+ + + + +
QDateTime ShowRecordElem::m_unixDate [private]
+
+
+ +

+The date on which the mail was sent +

+

+ +

+
+ + + + +
QCString ShowRecordElem::m_content [private]
+
+
+ +

+The content type +

+

+ +

+
+ + + + +
QString ShowRecordElem::m_uid [private]
+
+
+ +

+The unique ID of the mail. +

+

+ +

+
+ + + + +
int ShowRecordElem::m_size [private]
+
+
+ +

+Size of the mail +

+

+ +

+
+ + + + +
bool ShowRecordElem::m_new [private]
+
+
+ +

+It is set to TRUE when the mail is new. +

+

+ +

+
+ + + + +
int ShowRecordElem::m_nNumber [private]
+
+
+ +

+The mail number of the account +

+

+ +

+
+ + + + +
bool ShowRecordElem::markAtViewRefresh [private]
+
+
+ +

+TRUE - the mail shall be marked at the next mail view refresh. It will be set to True by applyHeaderFilter() if the recommend filter action is MARK. It is used by setViewItem(). This methode marks the related list entry and after then it set this variable to False. +

+

+ +

+ +
+ +

+Pointer to the corresponding list view entry. Used to check whether the entry is highlighted and we have to process this mail.

See also:
ShowListViewItem
+ +
+

+ +

+
+ + + + +
FilterElem* ShowRecordElem::m_pFilter [private]
+
+
+ +

+This is a pointer to the filter, which matches this mail. If it is NULL, no filter matches. Will be set by applyFilters(). This pointer will just be used to count the deleted mails by this filter( see implementation of setDeleted() ). +

+

+


The documentation for this class was generated from the following files: +
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classUniqueApp-members.html b/doc/html/classUniqueApp-members.html new file mode 100644 index 0000000..83f4d8a --- /dev/null +++ b/doc/html/classUniqueApp-members.html @@ -0,0 +1,32 @@ + + +kshowmail.kdevelop: Member List + + + + + + +

UniqueApp Member List

This is the complete list of members for UniqueApp, including all inherited members.

+ + + + +
m_pAppUniqueApp [private]
newInstance()UniqueApp [virtual]
UniqueApp()UniqueApp
~UniqueApp()UniqueApp


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classUniqueApp.html b/doc/html/classUniqueApp.html new file mode 100644 index 0000000..9efe314 --- /dev/null +++ b/doc/html/classUniqueApp.html @@ -0,0 +1,128 @@ + + +kshowmail.kdevelop: UniqueApp Class Reference + + + + + + +

UniqueApp Class Reference

Creates a unique instance of kshowmail. +More... +

+#include <uniqueapp.h> +

+List of all members. + + + + + + + + + + + +

Public Member Functions

 UniqueApp ()
 ~UniqueApp ()
virtual int newInstance ()

Private Attributes

KShowMailAppm_pApp
+


Detailed Description

+Creates a unique instance of kshowmail. +

+

Author:
Eggert Ehmke
+ +

+


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
UniqueApp::UniqueApp (  ) 
+
+
+ +

+Constructor +

+

+ +

+
+ + + + + + + + +
UniqueApp::~UniqueApp (  ) 
+
+
+ +

+Destructor +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + +
int UniqueApp::newInstance (  )  [virtual]
+
+
+ +

+overloaded method of KUniqueApplication. Creates a new instance of kshowmail. +

+

+


Member Data Documentation

+ +
+
+ + + + +
KShowMailApp* UniqueApp::m_pApp [private]
+
+
+ +

+the kshowmail instance +

+

+


The documentation for this class was generated from the following files:
    +
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/uniqueapp.h
  • Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/uniqueapp.cpp
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/classes.html b/doc/html/classes.html new file mode 100644 index 0000000..6831214 --- /dev/null +++ b/doc/html/classes.html @@ -0,0 +1,39 @@ + + +kshowmail.kdevelop: Alphabetical List + + + + + + +

kshowmail.kdevelop Class Index

A | C | D | F | H | K | M | S | U

+ +
  A  
+
ConfigFilter   FilterItem   HeaderFilter   SenderListDialog   
AccountSetupDialog   ConfigGeneral   FilterItemCriteria   
  K  
+
SenderListFilter   
AccountSetupItem   ConfigList   FilterLog   KShowMailApp   ServerDialog   
AlertDialog   ConfigLog   FilterLogEntry   KshowmailDoc   ShowHeaderDialog   
AlertDlg   ConfigSpamcheck   FilterLogView   KShowMailDock   ShowListViewItem   
  C  
+
  D  
+
FilterLogViewDeletedItem   KshowmailView   ShowMailDialog   
ConfigAccounts   DownloadActionParams_Type (Types)   FilterLogViewMovedItem   
  M  
+
ShowRecord   
ConfigActions   
  F  
+
FilterSetupDialog   MailBoxWizard   ShowRecordElem   
ConfigDisplay   FilterCriteria_Type (Types)   FilterSetupItem   MailBoxWizardListItem   
  U  
+
ConfigElem   FilterCriteriaWidget   
  H  
+
  S  
+
UniqueApp   

A | C | D | F | H | K | M | S | U

+


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commanddialog_8cpp-source.html b/doc/html/commanddialog_8cpp-source.html new file mode 100644 index 0000000..bdd3432 --- /dev/null +++ b/doc/html/commanddialog_8cpp-source.html @@ -0,0 +1,150 @@ + + +kshowmail: kshowmail/commanddialog.cpp Source File + + + + + + +

commanddialog.cpp

00001 /***************************************************************************
+00002                           commanddialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <klocale.h>
+00019 #include <kmessagebox.h>
+00020 #include "kshowmail.h"
+00021 #include "commanddialog.h"
+00022 #include "commandentrydialog.h"
+00023 
+00024 CommandDialog::CommandDialog(QWidget *parent, const char *name, CommandList* list, ConfigElem* pConfig, ConfigList* pConfigList):
+00025        CommandDlg(parent,name,true),
+00026 //     m_locallist (*list), we don't have a proper copy contructor
+00027        m_plist (list),
+00028        m_pConfigList (pConfigList),
+00029        m_pConfig (pConfig)
+00030 {
+00031        m_locallist = *list;
+00032        int index = list->at ();
+00033        for (unsigned int i = 0; i < list->count(); i ++)
+00034        {
+00035               m_ComboCommand->insertItem (m_locallist.at (i)->m_name);
+00036        }
+00037        m_locallist.at (index);
+00038        m_ComboCommand->setCurrentItem (index);
+00039 }
+00040 
+00041 CommandDialog::~CommandDialog()
+00042 {
+00043 }
+00044 
+00045 void CommandDialog::slotAdd ()
+00046 {
+00047        CommandEntry* entry = new CommandEntry ();
+00048        CommandEntryDialog dlg (this, "New command", entry, m_pConfig);
+00049        if (dlg.exec () == QDialog::Accepted)
+00050        {
+00051               m_locallist.append (entry);
+00052               int pos = m_locallist.at ();
+00053     m_locallist.setCombo (m_ComboCommand, pos);
+00054   }
+00055        else
+00056               delete entry;
+00057 }
+00058 
+00059 void CommandDialog::slotEdit ()
+00060 {
+00061        if (m_locallist.current ())
+00062        {
+00063               CommandEntryDialog dlg (this, "Edit command", m_locallist.current (), m_pConfig);
+00064               if (dlg.exec () == QDialog::Accepted)
+00065               {
+00066                      // the command name may have changed. Update the combo box.
+00067                      int pos = m_locallist.at ();
+00068       m_locallist.setCombo (m_ComboCommand, pos);
+00069               }
+00070        }
+00071 }
+00072 
+00073 void CommandDialog::slotCopy ()
+00074 {
+00075        if (m_locallist.current ())
+00076        {
+00077               CommandEntry* entry = new CommandEntry (m_locallist.current ());
+00078               CommandEntryDialog dlg (this, "Copy command", entry, m_pConfig);
+00079               if (dlg.exec () == QDialog::Accepted)
+00080               {
+00081                      m_locallist.append (entry);
+00082                      int pos = m_locallist.at ();
+00083       m_locallist.setCombo (m_ComboCommand, pos);
+00084               }
+00085               else
+00086                      delete entry;
+00087        }
+00088 }
+00089 
+00090 void CommandDialog::slotDelete ()
+00091 {
+00092        if (m_locallist.current())
+00093        {
+00094               if (KMessageBox::warningYesNo (this, i18n("Command %1 will be deleted.\nAre you sure ?").arg(m_locallist.current()->m_name)) == KMessageBox::Yes)
+00095               {
+00096                      int pos = m_locallist.at ();
+00097                      m_locallist.remove (pos);
+00098       m_locallist.setCombo (m_ComboCommand, pos);
+00099               }
+00100        }
+00101 }
+00102 
+00103 void CommandDialog::slotOk ()
+00104 {
+00105        *m_plist = m_locallist;
+00106        int index = m_locallist.at ();
+00107        for (unsigned int i = 0; i < m_plist->count (); i++)
+00108        {
+00109               if (m_plist->at (i)->m_name == "complain")
+00110                      m_plist->at (i)->m_id = ID_OPTION_COMPLAIN;
+00111               else
+00112                      m_plist->at (i)->m_id = ID_OPTION_COMPLAIN + 1 + i;
+00113        }
+00114        if (m_pConfigList->m_bExternalProg && (m_pConfigList->m_nExternalProg >= m_plist->count ()))
+00115        {
+00116               m_pConfigList->m_bExternalProg = false;
+00117               m_pConfigList->m_nExternalProg = -1;
+00118        }
+00119        m_plist->at (index);
+00120        accept ();
+00121 }
+00122 
+00123 void CommandDialog::slotCommandActivated (int index)
+00124 {
+00125        m_locallist.at (index); // will set current item
+00126 }
+00127 
+00128 
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commanddialog_8h-source.html b/doc/html/commanddialog_8h-source.html new file mode 100644 index 0000000..fabeb32 --- /dev/null +++ b/doc/html/commanddialog_8h-source.html @@ -0,0 +1,73 @@ + + +kshowmail: kshowmail/commanddialog.h Source File + + + + + + +

commanddialog.h

00001 /***************************************************************************
+00002                           commanddialog.h  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef COMMANDDIALOG_H
+00019 #define COMMANDDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "CommandDlg.h"
+00023 #include "commandlist.h"
+00024 #include "configelem.h"
+00025 #include "configlist.h"
+00026 
+00031 #define ID_OPTION_COMPLAIN 13000
+00032 
+00033 class ConfigList;
+00034 
+00035 class CommandDialog : public CommandDlg
+00036 {
+00037    Q_OBJECT
+00038 public: 
+00039        CommandDialog(QWidget *parent, const char *name, CommandList* list, ConfigElem* pConfig, ConfigList* pConfigList);
+00040        ~CommandDialog();
+00041 private slots:
+00042   virtual void slotAdd ();
+00043   virtual void slotEdit ();
+00044   virtual void slotCopy();
+00045   virtual void slotDelete ();
+00046   virtual void slotOk ();
+00047   virtual void slotCommandActivated (int);
+00048 private:
+00049        CommandList* m_plist;
+00050        CommandList m_locallist;
+00051        ConfigList* m_pConfigList;
+00052        ConfigElem* m_pConfig;
+00053 };
+00054 
+00055 #endif
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commanddialog_8moc_8cpp-source.html b/doc/html/commanddialog_8moc_8cpp-source.html new file mode 100644 index 0000000..1a54c91 --- /dev/null +++ b/doc/html/commanddialog_8moc_8cpp-source.html @@ -0,0 +1,141 @@ + + +kshowmail: kshowmail/commanddialog.moc.cpp Source File + + + + + + +

commanddialog.moc.cpp

00001 /****************************************************************************
+00002 ** CommandDialog meta object code from reading C++ file 'commanddialog.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: commanddialog_8moc_8cpp-source.html,v 1.8 2007/05/16 20:12:00 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "commanddialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *CommandDialog::className() const
+00023 {
+00024     return "CommandDialog";
+00025 }
+00026 
+00027 QMetaObject *CommandDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_CommandDialog( "CommandDialog", &CommandDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString CommandDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "CommandDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString CommandDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "CommandDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* CommandDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = CommandDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotAdd", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotEdit", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotCopy", 0, 0 };
+00058     static const QUMethod slot_3 = {"slotDelete", 0, 0 };
+00059     static const QUMethod slot_4 = {"slotOk", 0, 0 };
+00060     static const QUParameter param_slot_5[] = {
+00061        { 0, &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_5 = {"slotCommandActivated", 1, param_slot_5 };
+00064     static const QMetaData slot_tbl[] = {
+00065        { "slotAdd()", &slot_0, QMetaData::Private },
+00066        { "slotEdit()", &slot_1, QMetaData::Private },
+00067        { "slotCopy()", &slot_2, QMetaData::Private },
+00068        { "slotDelete()", &slot_3, QMetaData::Private },
+00069        { "slotOk()", &slot_4, QMetaData::Private },
+00070        { "slotCommandActivated(int)", &slot_5, QMetaData::Private }
+00071     };
+00072     metaObj = QMetaObject::new_metaobject(
+00073        "CommandDialog", parentObject,
+00074        slot_tbl, 6,
+00075        0, 0,
+00076 #ifndef QT_NO_PROPERTIES
+00077        0, 0,
+00078        0, 0,
+00079 #endif // QT_NO_PROPERTIES
+00080        0, 0 );
+00081     cleanUp_CommandDialog.setMetaObject( metaObj );
+00082     return metaObj;
+00083 }
+00084 
+00085 void* CommandDialog::qt_cast( const char* clname )
+00086 {
+00087     if ( !qstrcmp( clname, "CommandDialog" ) )
+00088        return this;
+00089     return CommandDlg::qt_cast( clname );
+00090 }
+00091 
+00092 bool CommandDialog::qt_invoke( int _id, QUObject* _o )
+00093 {
+00094     switch ( _id - staticMetaObject()->slotOffset() ) {
+00095     case 0: slotAdd(); break;
+00096     case 1: slotEdit(); break;
+00097     case 2: slotCopy(); break;
+00098     case 3: slotDelete(); break;
+00099     case 4: slotOk(); break;
+00100     case 5: slotCommandActivated((int)static_QUType_int.get(_o+1)); break;
+00101     default:
+00102        return CommandDlg::qt_invoke( _id, _o );
+00103     }
+00104     return TRUE;
+00105 }
+00106 
+00107 bool CommandDialog::qt_emit( int _id, QUObject* _o )
+00108 {
+00109     return CommandDlg::qt_emit(_id,_o);
+00110 }
+00111 #ifndef QT_NO_PROPERTIES
+00112 
+00113 bool CommandDialog::qt_property( int id, int f, QVariant* v)
+00114 {
+00115     return CommandDlg::qt_property( id, f, v);
+00116 }
+00117 
+00118 bool CommandDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00119 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandentry_8cpp-source.html b/doc/html/commandentry_8cpp-source.html new file mode 100644 index 0000000..94ad5c7 --- /dev/null +++ b/doc/html/commandentry_8cpp-source.html @@ -0,0 +1,143 @@ + + +kshowmail: kshowmail/commandentry.cpp Source File + + + + + + +

commandentry.cpp

00001 /***************************************************************************
+00002                           commandentry.cpp  -  description
+00003                              -------------------
+00004     begin                : Thu Jul 20 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 #include <stdlib.h>
+00018 #include <stdio.h>
+00019 #include <unistd.h>
+00020 
+00021 #include <kapplication.h>
+00022 #include <kaction.h>
+00023 #include <kdebug.h>
+00024 #include <qmessagebox.h>
+00025 
+00026 #include "commandentry.h"
+00027 #include "editdialog.h"
+00028 
+00029 CommandEntry& CommandEntry::operator = (const CommandEntry& entry)
+00030 {
+00031        m_id = entry.m_id;
+00032        m_name = entry.m_name;
+00033        m_path = entry.m_path;
+00034   m_waitForCommand = entry.m_waitForCommand;
+00035   return *this;
+00036 }
+00037 
+00038 bool CommandEntry::exec (ConfigElem* pelem, const char* header, const char* body)
+00039 {
+00040        kdDebug () << "CommandEntry::exec ();" << endl;
+00041        return exec (m_path, pelem, header, body);
+00042 }
+00043 
+00044 bool CommandEntry::exec (const QString& path, ConfigElem* pelem, const char* header, const char* body)
+00045 {
+00046        kdDebug () << "CommandEntry::exec (" << path << ");" << endl;
+00047        QString cmd = path;
+00048        int pos;
+00049        if (pelem)
+00050        {
+00051               if ((pos = cmd.find ("<user>")) >= 0)
+00052                      cmd.replace (pos, strlen ("<user>"), pelem->getUser() );
+00053               if ((pos = cmd.find ("<server>")) >= 0)
+00054                      cmd.replace (pos, strlen ("<server>"), pelem->getHost());
+00055               if ((pos = cmd.find ("<passwd>")) >= 0)
+00056                      cmd.replace (pos, strlen ("<passwd>"), pelem->getPassword());
+00057        }
+00058   else
+00059   {
+00060               if ((pos = cmd.find ("<user>")) >= 0)
+00061                      cmd.remove (pos, strlen ("<user>"));
+00062               if ((pos = cmd.find ("<server>")) >= 0)
+00063                      cmd.remove (pos, strlen ("<server>"));
+00064               if ((pos = cmd.find ("<passwd>")) >= 0)
+00065                      cmd.remove (pos, strlen ("<passwd>"));
+00066   }
+00067        if (header && (pos = cmd.find ("<header>")) >= 0)
+00068        {
+00069               FILE* tmp = fopen ("/tmp/spamheader", "w");
+00070               fputs (header, tmp);
+00071               fclose (tmp);
+00072               cmd.replace (pos, strlen ("<header>"), "/tmp/spamheader");
+00073        }
+00074        if (body && (pos = cmd.find ("<body>")) >= 0)
+00075        {
+00076               FILE* tmp = fopen ("/tmp/spambody", "w");
+00077               fputs (body, tmp);
+00078               fclose (tmp);
+00079               cmd.replace (pos, strlen ("<body>"), "/tmp/spambody");
+00080        }
+00081   int result = 0;
+00082   if (m_waitForCommand) {
+00083     //execute the command and wait for it to return
+00084     FILE* output = popen (cmd, "r");
+00085        char buffer [81];
+00086        QString str;
+00087        while (fgets (buffer, 80, output))
+00088        {
+00089               str += buffer;
+00090        }
+00091               KApplication::setOverrideCursor (Qt::arrowCursor);
+00092        result = pclose (output);
+00093        if (!str.isEmpty ())
+00094        {
+00095               EditDialog dlg (NULL, cmd, str, false);
+00096               dlg.exec ();
+00097        }
+00098        kdDebug () << cmd << " returned " << result << endl;
+00099   }
+00100   else
+00101   {
+00102     //execute the command and don't wait for it to return
+00103     int pid;
+00104     if ((pid = fork()) == 0)
+00105     {
+00106       // child processing; don't do any gui stuff here !
+00107       system (cmd);
+00108       // we must terminate the child process
+00109       exit (0);
+00110       // the bad thing is, we never know if the command failed. We would need some pipe.
+00111     }
+00112     else if (pid == -1)
+00113     {
+00114       EditDialog dlg (NULL, cmd, "The command failed to execute", false);
+00115       dlg.exec ();
+00116     }
+00117   }
+00118   KApplication::restoreOverrideCursor ();
+00119   return (result == 0);
+00120 }
+00121 
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandentry_8h-source.html b/doc/html/commandentry_8h-source.html new file mode 100644 index 0000000..9e53f18 --- /dev/null +++ b/doc/html/commandentry_8h-source.html @@ -0,0 +1,69 @@ + + +kshowmail: kshowmail/commandentry.h Source File + + + + + + +

commandentry.h

00001 /***************************************************************************
+00002                           commandentry.h  -  description
+00003                              -------------------
+00004     begin                : Thu Jul 20 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef COMMANDENTRY_H
+00019 #define COMMANDENTRY_H
+00020 
+00021 #include <qdialog.h>
+00022 #include <qpopupmenu.h>
+00023 
+00024 #include <ktoolbar.h>
+00025 
+00026 #include "configelem.h"
+00027 
+00031 class ConfigElem;
+00032 
+00033 class CommandEntry
+00034 {
+00035        public:
+00036        CommandEntry () {};
+00037        CommandEntry (const char* name, const char* path, const int id, const bool modal)
+00038        : m_name (name), m_path (path), m_id (id), m_waitForCommand (modal) {};
+00039        CommandEntry (const CommandEntry* copy)
+00040        : m_name (copy->m_name), m_path (copy->m_path), m_id (copy->m_id), m_waitForCommand (copy->m_waitForCommand) {};
+00041        CommandEntry& operator = (const CommandEntry& entry);
+00042        bool exec (ConfigElem* pelem = NULL, const char* header = NULL, const char* body = NULL);
+00043        bool exec (const QString& path, ConfigElem* pelem, const char* header = NULL, const char* body = NULL);
+00044        QString m_name;
+00045        QString m_path;
+00046        int m_id;
+00047   bool m_waitForCommand;
+00048 };
+00049 
+00050 #endif
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandentrydialog_8cpp-source.html b/doc/html/commandentrydialog_8cpp-source.html new file mode 100644 index 0000000..fae9542 --- /dev/null +++ b/doc/html/commandentrydialog_8cpp-source.html @@ -0,0 +1,91 @@ + + +kshowmail: kshowmail/commandentrydialog.cpp Source File + + + + + + +

commandentrydialog.cpp

00001 /***************************************************************************
+00002                           commandentrydialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qwidget.h>
+00019 #include <qlineedit.h>
+00020 #include <qfileinfo.h>
+00021 #include <qfiledialog.h>
+00022 #include <qcheckbox.h>
+00023 #include <klocale.h>
+00024 #include "commandentry.h"
+00025 #include "commandentrydialog.h"
+00026 
+00027 CommandEntryDialog::CommandEntryDialog(QWidget *parent, const char *name, CommandEntry* entry, ConfigElem* pConfigElem):
+00028        CommandEntryDlg(parent,name,true),
+00029        m_pentry (entry),
+00030        m_pConfigElem (pConfigElem)
+00031 {
+00032        m_EditName->setText (entry->m_name);
+00033        m_EditPath->setText (entry->m_path);
+00034   m_checkModal->setChecked(entry->m_waitForCommand);
+00035        m_EditName->setFocus ();
+00036 }
+00037 
+00038 CommandEntryDialog::~CommandEntryDialog(){
+00039 }
+00040 
+00041 void CommandEntryDialog::slotPath ()
+00042 {
+00043        QFileInfo info (m_EditPath->text ());
+00044        QString dir = info.dirPath ();
+00045        QFileDialog dlg (this, "Command", TRUE);
+00046        dlg.setCaption (i18n("Select Command"));
+00047        dlg.setDir (dir);
+00048        dlg.setMode (QFileDialog::ExistingFile);
+00049   if (dlg.exec () == QDialog::Accepted)
+00050        m_EditPath->setText (dlg.selectedFile());
+00051 }
+00052 
+00053 void CommandEntryDialog::slotOk ()
+00054 {
+00055        QString name = m_EditName->text();
+00056        QString path = m_EditPath->text();
+00057        if (!name.isEmpty() && !path.isEmpty())
+00058        {
+00059               m_pentry->m_name = name;
+00060               m_pentry->m_path = path;
+00061     m_pentry->m_waitForCommand = m_checkModal->isChecked();
+00062     accept ();
+00063        }
+00064 }
+00065 
+00066 void CommandEntryDialog::slotTest ()
+00067 {
+00068        m_pentry->exec (m_EditPath->text(), m_pConfigElem);
+00069 }
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandentrydialog_8h-source.html b/doc/html/commandentrydialog_8h-source.html new file mode 100644 index 0000000..b091588 --- /dev/null +++ b/doc/html/commandentrydialog_8h-source.html @@ -0,0 +1,63 @@ + + +kshowmail: kshowmail/commandentrydialog.h Source File + + + + + + +

commandentrydialog.h

00001 /***************************************************************************
+00002                           commandentrydialog.h  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef COMMANDENTRYDIALOG_H
+00019 #define COMMANDENTRYDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "commandentry.h"
+00023 #include "CommandEntryDlg.h"
+00024 #include "configelem.h"
+00025 
+00030 class CommandEntryDialog : public CommandEntryDlg
+00031 {
+00032    Q_OBJECT
+00033 public: 
+00034        CommandEntryDialog(QWidget *parent, const char *name, CommandEntry* entry, ConfigElem* pConfigElem);
+00035        ~CommandEntryDialog();
+00036 private slots:
+00037   void slotPath ();
+00038   void slotTest ();
+00039   void slotOk ();
+00040 private:
+00041        CommandEntry* m_pentry;
+00042        ConfigElem* m_pConfigElem;
+00043 };
+00044 
+00045 #endif
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandentrydialog_8moc_8cpp-source.html b/doc/html/commandentrydialog_8moc_8cpp-source.html new file mode 100644 index 0000000..d6439ed --- /dev/null +++ b/doc/html/commandentrydialog_8moc_8cpp-source.html @@ -0,0 +1,129 @@ + + +kshowmail: kshowmail/commandentrydialog.moc.cpp Source File + + + + + + +

commandentrydialog.moc.cpp

00001 /****************************************************************************
+00002 ** CommandEntryDialog meta object code from reading C++ file 'commandentrydialog.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: commandentrydialog_8moc_8cpp-source.html,v 1.8 2007/05/16 20:12:00 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "commandentrydialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *CommandEntryDialog::className() const
+00023 {
+00024     return "CommandEntryDialog";
+00025 }
+00026 
+00027 QMetaObject *CommandEntryDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_CommandEntryDialog( "CommandEntryDialog", &CommandEntryDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString CommandEntryDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "CommandEntryDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString CommandEntryDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "CommandEntryDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* CommandEntryDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = CommandEntryDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotPath", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotTest", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotOk", 0, 0 };
+00058     static const QMetaData slot_tbl[] = {
+00059        { "slotPath()", &slot_0, QMetaData::Private },
+00060        { "slotTest()", &slot_1, QMetaData::Private },
+00061        { "slotOk()", &slot_2, QMetaData::Private }
+00062     };
+00063     metaObj = QMetaObject::new_metaobject(
+00064        "CommandEntryDialog", parentObject,
+00065        slot_tbl, 3,
+00066        0, 0,
+00067 #ifndef QT_NO_PROPERTIES
+00068        0, 0,
+00069        0, 0,
+00070 #endif // QT_NO_PROPERTIES
+00071        0, 0 );
+00072     cleanUp_CommandEntryDialog.setMetaObject( metaObj );
+00073     return metaObj;
+00074 }
+00075 
+00076 void* CommandEntryDialog::qt_cast( const char* clname )
+00077 {
+00078     if ( !qstrcmp( clname, "CommandEntryDialog" ) )
+00079        return this;
+00080     return CommandEntryDlg::qt_cast( clname );
+00081 }
+00082 
+00083 bool CommandEntryDialog::qt_invoke( int _id, QUObject* _o )
+00084 {
+00085     switch ( _id - staticMetaObject()->slotOffset() ) {
+00086     case 0: slotPath(); break;
+00087     case 1: slotTest(); break;
+00088     case 2: slotOk(); break;
+00089     default:
+00090        return CommandEntryDlg::qt_invoke( _id, _o );
+00091     }
+00092     return TRUE;
+00093 }
+00094 
+00095 bool CommandEntryDialog::qt_emit( int _id, QUObject* _o )
+00096 {
+00097     return CommandEntryDlg::qt_emit(_id,_o);
+00098 }
+00099 #ifndef QT_NO_PROPERTIES
+00100 
+00101 bool CommandEntryDialog::qt_property( int id, int f, QVariant* v)
+00102 {
+00103     return CommandEntryDlg::qt_property( id, f, v);
+00104 }
+00105 
+00106 bool CommandEntryDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00107 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandlist_8cpp-source.html b/doc/html/commandlist_8cpp-source.html new file mode 100644 index 0000000..913d2df --- /dev/null +++ b/doc/html/commandlist_8cpp-source.html @@ -0,0 +1,153 @@ + + +kshowmail: kshowmail/commandlist.cpp Source File + + + + + + +

commandlist.cpp

00001 /***************************************************************************
+00002                           commandlist.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <kdebug.h>
+00019 #include "commandentry.h"
+00020 #include "commandlist.h"
+00021 
+00022 CommandList::CommandList()
+00023 {
+00024        setAutoDelete (true);
+00025 }
+00026 
+00027 CommandList::~CommandList()
+00028 {
+00029 }
+00030 
+00031 void CommandList::setCombo (QComboBox* combo, int nIndex)
+00032 {
+00033        combo->clear ();
+00034        for (CommandEntry* pElem = first(); pElem; pElem = next())
+00035        {
+00036               combo->insertItem (pElem->m_name);
+00037        }
+00038        if (nIndex >= 0)
+00039        {
+00040               at (nIndex);
+00041               combo->setCurrentItem (nIndex);
+00042        }
+00043 }
+00044 
+00045 CommandList& CommandList::operator = (CommandList& list)
+00046 {
+00047        clear ();
+00048        int nIndex = list.at ();
+00049        for (CommandEntry* item = list.first (); item; item = list.next ())
+00050        {
+00051               append (new CommandEntry (item));         
+00052        }
+00053        at (nIndex);
+00054        return *this;
+00055 }
+00056 
+00057 bool CommandList::exec (unsigned int id, ConfigElem* pelem, const char* header, const char* body)
+00058 {
+00059        bool result = false;
+00060        CommandEntry* test = new CommandEntry (NULL, NULL, id, true);
+00061        int pos = find (test);
+00062        if (pos >= 0)
+00063        {
+00064               result = at (pos)->exec (pelem, header, body);
+00065        }
+00066        else
+00067               kdError () << "No ID " << id << " found in commandlist." << endl;
+00068        delete test;
+00069        return result;
+00070 }
+00071 
+00072 bool CommandList::exec (unsigned int pos, ConfigElem* pelem)
+00073 {
+00074        // command may have bee deleted
+00075        if (pos < count ())
+00076               return at (pos)->exec (pelem);
+00077        else
+00078               return false;
+00079 }
+00080 
+00081 int CommandList::compareItems (QCollection::Item item1, QCollection::Item item2 )
+00082 {
+00083        CommandEntry* entry1 = (CommandEntry*) item1;
+00084        CommandEntry* entry2 = (CommandEntry*) item2;
+00085        if (entry1->m_id > entry2->m_id)
+00086               return 1;
+00087        else if (entry1->m_id == entry2->m_id)
+00088               return 0;
+00089        else return -1;
+00090 }
+00091 
+00092 QCollection::Item CommandList::newItem (QCollection::Item d)
+00093 {
+00094        return new CommandEntry ((CommandEntry*)d);
+00095 }
+00096 
+00097 void CommandList::readOptions (KConfig* config)
+00098 {
+00099        config->setGroup ("usercommands");
+00100        bool goon = true;
+00101        int i = 0;
+00102        while (goon)
+00103        {
+00104               QString cmd (config->readEntry (QString ("cmd%1").arg(i)));
+00105               if (!cmd.isEmpty ())
+00106               {
+00107                      QString path = config->readEntry (QString("path%1").arg(i));
+00108                      int id = config->readNumEntry (QString("id%1").arg(i));
+00109       bool modal = config->readBoolEntry (QString("modal%1").arg(i), true);
+00110       append (new CommandEntry (cmd, path, id, modal));
+00111                      i++;
+00112               }
+00113               else
+00114                      goon = false;
+00115        }
+00116        if (i > 0)
+00117               at (0);
+00118 }
+00119 
+00120 void CommandList::saveOptions (KConfig* config)
+00121 {
+00122        kdDebug () << "CommandList::saveOptions" << endl;
+00123        config->setGroup ("usercommands");
+00124        for (unsigned int i = 0; i < count (); i++)
+00125        {
+00126               config->writeEntry (QString("cmd%1").arg(i), at(i)->m_name);
+00127               config->writeEntry (QString("path%1").arg(i), at(i)->m_path);
+00128               config->writeEntry (QString("id%1").arg(i), at(i)->m_id);
+00129               config->writeEntry (QString("modal%1").arg(i), at(i)->m_waitForCommand);
+00130        }
+00131 }
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/commandlist_8h-source.html b/doc/html/commandlist_8h-source.html new file mode 100644 index 0000000..651391b --- /dev/null +++ b/doc/html/commandlist_8h-source.html @@ -0,0 +1,66 @@ + + +kshowmail: kshowmail/commandlist.h Source File + + + + + + +

commandlist.h

00001 /***************************************************************************
+00002                           commandlist.h  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef COMMANDLIST_H
+00019 #define COMMANDLIST_H
+00020 
+00021 #include <qptrlist.h>
+00022 #include "configelem.h"
+00023 #include "commandentry.h"
+00024 
+00028 class CommandEntry;
+00029 class ConfigElem;
+00030 
+00031 class CommandList : public QPtrList<CommandEntry>
+00032 {
+00033        public:
+00034        CommandList ();
+00035        virtual ~CommandList();
+00036        void setCombo (QComboBox* combo, int nIndex);
+00037        CommandList& operator = (CommandList& right);
+00038        bool exec (unsigned int id, ConfigElem* pelem, const char* header, const char* body);
+00039        bool exec (unsigned int pos, ConfigElem* pelem);
+00040        void readOptions (KConfig* config);
+00041        void saveOptions (KConfig* config);
+00042        protected:
+00043        virtual int compareItems (QCollection::Item item1, QCollection::Item item2);
+00044        virtual QCollection::Item newItem (QCollection::Item d);
+00045 };
+00046 
+00047 #endif
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/config_8h-source.html b/doc/html/config_8h-source.html new file mode 100644 index 0000000..1f431a6 --- /dev/null +++ b/doc/html/config_8h-source.html @@ -0,0 +1,265 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/config.h Source File + + + + + + + +

config.h

Go to the documentation of this file.
00001 /* config.h.  Generated from config.h.in by configure.  */
+00002 /* config.h.in.  Generated from configure.in by autoheader.  */
+00003 
+00004 /* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+00005 /* #undef HAVE_CARBON_CARBON_H */
+00006 
+00007 /* Define if you have the CoreAudio API */
+00008 /* #undef HAVE_COREAUDIO */
+00009 
+00010 /* Define to 1 if you have the <crt_externs.h> header file. */
+00011 /* #undef HAVE_CRT_EXTERNS_H */
+00012 
+00013 /* Defines if your system has the crypt function */
+00014 #define HAVE_CRYPT 1
+00015 
+00016 /* Define to 1 if you have the <dlfcn.h> header file. */
+00017 #define HAVE_DLFCN_H 1
+00018 
+00019 /* Define to 1 if you have the <inttypes.h> header file. */
+00020 #define HAVE_INTTYPES_H 1
+00021 
+00022 /* Define if you have libjpeg */
+00023 #define HAVE_LIBJPEG 1
+00024 
+00025 /* Define if you have libpng */
+00026 #define HAVE_LIBPNG 1
+00027 
+00028 /* Define if you have a working libpthread (will enable threaded code) */
+00029 #define HAVE_LIBPTHREAD 1
+00030 
+00031 /* Define if you have libz */
+00032 #define HAVE_LIBZ 1
+00033 
+00034 /* Define to 1 if you have the <memory.h> header file. */
+00035 #define HAVE_MEMORY_H 1
+00036 
+00037 /* Define if your system needs _NSGetEnviron to set up the environment */
+00038 /* #undef HAVE_NSGETENVIRON */
+00039 
+00040 /* Define if you have res_init */
+00041 #define HAVE_RES_INIT 1
+00042 
+00043 /* Define if you have the res_init prototype */
+00044 #define HAVE_RES_INIT_PROTO 1
+00045 
+00046 /* Define if you have a STL implementation by SGI */
+00047 #define HAVE_SGI_STL 1
+00048 
+00049 /* Define to 1 if you have the `snprintf' function. */
+00050 #define HAVE_SNPRINTF 1
+00051 
+00052 /* Define to 1 if you have the <stdint.h> header file. */
+00053 #define HAVE_STDINT_H 1
+00054 
+00055 /* Define to 1 if you have the <stdlib.h> header file. */
+00056 #define HAVE_STDLIB_H 1
+00057 
+00058 /* Define to 1 if you have the <strings.h> header file. */
+00059 #define HAVE_STRINGS_H 1
+00060 
+00061 /* Define to 1 if you have the <string.h> header file. */
+00062 #define HAVE_STRING_H 1
+00063 
+00064 /* Define if you have strlcat */
+00065 /* #undef HAVE_STRLCAT */
+00066 
+00067 /* Define if you have the strlcat prototype */
+00068 /* #undef HAVE_STRLCAT_PROTO */
+00069 
+00070 /* Define if you have strlcpy */
+00071 /* #undef HAVE_STRLCPY */
+00072 
+00073 /* Define if you have the strlcpy prototype */
+00074 /* #undef HAVE_STRLCPY_PROTO */
+00075 
+00076 /* Define to 1 if you have the <sys/bitypes.h> header file. */
+00077 #define HAVE_SYS_BITYPES_H 1
+00078 
+00079 /* Define to 1 if you have the <sys/stat.h> header file. */
+00080 #define HAVE_SYS_STAT_H 1
+00081 
+00082 /* Define to 1 if you have the <sys/types.h> header file. */
+00083 #define HAVE_SYS_TYPES_H 1
+00084 
+00085 /* Define to 1 if you have the <unistd.h> header file. */
+00086 #define HAVE_UNISTD_H 1
+00087 
+00088 /* Define to 1 if you have the `vsnprintf' function. */
+00089 #define HAVE_VSNPRINTF 1
+00090 
+00091 /* Suffix for lib directories */
+00092 #define KDELIBSUFF ""
+00093 
+00094 /* Name of package */
+00095 #define PACKAGE "kshowmail"
+00096 
+00097 /* Define to the address where bug reports for this package should be sent. */
+00098 #define PACKAGE_BUGREPORT ""
+00099 
+00100 /* Define to the full name of this package. */
+00101 #define PACKAGE_NAME ""
+00102 
+00103 /* Define to the full name and version of this package. */
+00104 #define PACKAGE_STRING ""
+00105 
+00106 /* Define to the one symbol short name of this package. */
+00107 #define PACKAGE_TARNAME ""
+00108 
+00109 /* Define to the version of this package. */
+00110 #define PACKAGE_VERSION ""
+00111 
+00112 /* The size of `char *', as computed by sizeof. */
+00113 #define SIZEOF_CHAR_P 4
+00114 
+00115 /* The size of `int', as computed by sizeof. */
+00116 #define SIZEOF_INT 4
+00117 
+00118 /* The size of `long', as computed by sizeof. */
+00119 #define SIZEOF_LONG 4
+00120 
+00121 /* The size of `short', as computed by sizeof. */
+00122 #define SIZEOF_SHORT 2
+00123 
+00124 /* The size of `size_t', as computed by sizeof. */
+00125 #define SIZEOF_SIZE_T 4
+00126 
+00127 /* The size of `unsigned long', as computed by sizeof. */
+00128 #define SIZEOF_UNSIGNED_LONG 4
+00129 
+00130 /* Define to 1 if you have the ANSI C header files. */
+00131 #define STDC_HEADERS 1
+00132 
+00133 /* Version number of package */
+00134 #define VERSION "3.3"
+00135 
+00136 /* Defined if compiling without arts */
+00137 /* #undef WITHOUT_ARTS */
+00138 
+00139 /*
+00140  * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+00141  * headers and I'm too lazy to write a configure test as long as only
+00142  * unixware is related
+00143  */
+00144 #ifdef _UNIXWARE
+00145 #define HAVE_BOOLEAN
+00146 #endif
+00147 
+00148 
+00149 
+00150 /*
+00151  * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+00152  * that defines bzero.
+00153  */
+00154 
+00155 #if defined(_AIX)
+00156 #include <strings.h>
+00157 #endif
+00158 
+00159 
+00160 
+00161 #if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+00162 # include <sys/time.h>
+00163 # include <crt_externs.h>
+00164 # define environ (*_NSGetEnviron())
+00165 #endif
+00166 
+00167 
+00168 
+00169 #if !defined(HAVE_RES_INIT_PROTO)
+00170 #ifdef __cplusplus
+00171 extern "C" {
+00172 #endif
+00173 int res_init(void);
+00174 #ifdef __cplusplus
+00175 }
+00176 #endif
+00177 #endif
+00178 
+00179 
+00180 
+00181 #if !defined(HAVE_STRLCAT_PROTO)
+00182 #ifdef __cplusplus
+00183 extern "C" {
+00184 #endif
+00185 unsigned long strlcat(char*, const char*, unsigned long);
+00186 #ifdef __cplusplus
+00187 }
+00188 #endif
+00189 #endif
+00190 
+00191 
+00192 
+00193 #if !defined(HAVE_STRLCPY_PROTO)
+00194 #ifdef __cplusplus
+00195 extern "C" {
+00196 #endif
+00197 unsigned long strlcpy(char*, const char*, unsigned long);
+00198 #ifdef __cplusplus
+00199 }
+00200 #endif
+00201 #endif
+00202 
+00203 
+00204 
+00205 /*
+00206  * On HP-UX, the declaration of vsnprintf() is needed every time !
+00207  */
+00208 
+00209 #if !defined(HAVE_VSNPRINTF) || defined(hpux)
+00210 #if __STDC__
+00211 #include <stdarg.h>
+00212 #include <stdlib.h>
+00213 #else
+00214 #include <varargs.h>
+00215 #endif
+00216 #ifdef __cplusplus
+00217 extern "C"
+00218 #endif
+00219 int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+00220 #ifdef __cplusplus
+00221 extern "C"
+00222 #endif
+00223 int snprintf(char *str, size_t n, char const *fmt, ...);
+00224 #endif
+00225 
+00226 
+00227 
+00228 #if defined(__SVR4) && !defined(__svr4__)
+00229 #define __svr4__ 1
+00230 #endif
+00231 
+00232 
+00233 /* type to use in place of socklen_t if not defined */
+00234 #define kde_socklen_t socklen_t
+00235 
+00236 /* type to use in place of socklen_t if not defined (deprecated, use
+00237    kde_socklen_t) */
+00238 #define ksize_t socklen_t
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/configelem_8cpp-source.html b/doc/html/configelem_8cpp-source.html new file mode 100644 index 0000000..e8e1e2a --- /dev/null +++ b/doc/html/configelem_8cpp-source.html @@ -0,0 +1,1223 @@ + + +kshowmail: kshowmail/configelem.cpp Source File + + + + + + +

configelem.cpp

00001 /***************************************************************************
+00002                           ConfigElem.cpp  -  description
+00003                              -------------------
+00004     begin                : Tue May 9 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "configelem.h"
+00019 
+00020 int const ConfigElem::continueShowHeaders( 0 );
+00021 int const ConfigElem::cancelShowHeaders( 1 );
+00022 
+00023 
+00024 ConfigElem::ConfigElem( ) : QObject()
+00025 {
+00026   //initialize account
+00027   init();
+00028 
+00029   //set default values
+00030   m_url.setProtocol( "pop3" );
+00031   m_url.setPort( 110 );
+00032   m_bActive = false;
+00033   appConfig = NULL;
+00034   m_strAccount = "";
+00035 }
+00036 
+00037 ConfigElem::ConfigElem( ConfigList* config ) : QObject()
+00038 {
+00039   //initialize account
+00040   init();
+00041 
+00042   m_url.setProtocol( "pop3" );
+00043   m_url.setPort (110);
+00044 
+00045   m_bActive = false;
+00046 
+00047   appConfig = config;
+00048 
+00049 }
+00050 
+00051 ConfigElem::ConfigElem( ConfigElem* pElem ) : QObject()
+00052 {
+00053   //initialize account
+00054   init();
+00055 
+00056   //set active by default
+00057   m_bActive = pElem->isActive();
+00058 
+00059   //copy some interesting stuff from the sample
+00060   //the url object contains all necessary information about the server
+00061   m_strAccount = pElem->getAccountName();
+00062   m_url = pElem->getURL();
+00063   appConfig = pElem->appConfig;
+00064 
+00065 }
+00066 
+00067 ConfigElem::ConfigElem( ConfigList* config, const QString& account ) : QObject()
+00068 {
+00069   //initialize account
+00070   init();
+00071 
+00072   //set account name
+00073   m_strAccount = account;
+00074 
+00075   //deactivate it by default
+00076   m_bActive = false;
+00077 
+00078   //set the pointer to the general app configuration
+00079   appConfig = config;
+00080 }
+00081 
+00082 void ConfigElem::init( )
+00083 {
+00084   //initialize timeout timer
+00085   pop3Timer = new QTimer( this );
+00086   connect( pop3Timer, SIGNAL( timeout() ), this, SLOT( slotTimeout() ) );
+00087 
+00088   //state is idle
+00089   state = AccountIdle;
+00090 
+00091   //create new empty mail list
+00092   m_pshowrecord = new ShowRecord();
+00093 
+00094   //the account has no appropriate account list view item yet
+00095   m_pViewItem = NULL;
+00096 
+00097   //set default values
+00098   PasswordStorage = DEFAULT_ACCOUNT_PASSWORD_STORAGE;
+00099 }
+00100 
+00101 
+00102 ConfigElem::~ConfigElem()
+00103 {
+00104   // do not delete m_pshowrecord here
+00105 }
+00106 
+00107 void ConfigElem::saveOptions( QDomDocument& doc, QDomElement& parent )
+00108 {
+00109   //get application config
+00110   KConfig* config = KApplication::kApplication()->config();
+00111 
+00112   //save the active state
+00113   config->setGroup( getAccountName() );
+00114   config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, m_bActive );
+00115   config->sync();
+00116 
+00117   //save the stored mails inside this account
+00118   parent.setAttribute( ATTRIBUTE_ACCOUNT_NAME, m_strAccount );
+00119   m_pshowrecord->saveOptions( doc, parent );
+00120 }
+00121 
+00122 void ConfigElem::readStoredMails( QDomElement& parent )
+00123 {
+00124   //get mails
+00125   m_pshowrecord->readStoredMails( parent );
+00126 }
+00127 
+00128 
+00129 int ConfigElem::count()
+00130 {
+00131   return m_pshowrecord->count();
+00132 }
+00133 
+00134 void ConfigElem::applyFilters()
+00135 {
+00136   m_pshowrecord->applyFilters();
+00137 }
+00138 
+00139 bool ConfigElem::isActive( ) const
+00140 {
+00141   return m_bActive;
+00142 }
+00143 
+00144 void ConfigElem::setActive( bool active )
+00145 {
+00146   m_bActive = active;
+00147 }
+00148 
+00149 QString ConfigElem::getAccountName( ) const
+00150 {
+00151   return m_strAccount;
+00152 }
+00153 
+00154 void ConfigElem::setAccountName( QString name )
+00155 {
+00156   if( name != NULL )
+00157     m_strAccount = name;
+00158 }
+00159 
+00160 QString ConfigElem::getPassword( ) const
+00161 {
+00162   return m_url.pass();
+00163 }
+00164 
+00165 void ConfigElem::setPassword( const QString& password )
+00166 {
+00167     m_url.setPass( password );
+00168 }
+00169 
+00170 KURL ConfigElem::getURL( ) const
+00171 {
+00172   return m_url;
+00173 }
+00174 
+00175 bool ConfigElem::hasPassword( ) const
+00176 {
+00177   return m_url.hasPass();
+00178 }
+00179 
+00180 void ConfigElem::setListViewItem( QListViewItem* item )
+00181 {
+00182   m_pViewItem = item;
+00183 }
+00184 
+00185 QListViewItem * ConfigElem::getListViewItem( )
+00186 {
+00187   return m_pViewItem;
+00188 }
+00189 
+00190 bool ConfigElem::isSelected( ) const
+00191 {
+00192   if( m_pViewItem == NULL )
+00193 
+00194     return false;
+00195 
+00196   else
+00197 
+00198     return m_pViewItem->isSelected();
+00199 }
+00200 
+00201 void ConfigElem::clearMailList( )
+00202 {
+00203   if( m_pshowrecord == NULL )
+00204     //there is no mail list yet, create a one
+00205     m_pshowrecord = new ShowRecord;
+00206   else
+00207     //clear the existing mail list
+00208     m_pshowrecord->clear();
+00209 }
+00210 
+00211 void ConfigElem::setHost( const QString& host )
+00212 {
+00213   m_url.setHost( host );
+00214 }
+00215 
+00216 void ConfigElem::setProtocol( const QString& protocol )
+00217 {
+00218   m_url.setProtocol( protocol );
+00219 }
+00220 
+00221 void ConfigElem::setPort( unsigned short int port )
+00222 {
+00223   m_url.setPort( port );
+00224 }
+00225 
+00226 void ConfigElem::setUser( const QString & user )
+00227 {
+00228   m_url.setUser( user );
+00229 }
+00230 
+00231 QString ConfigElem::getUser( ) const
+00232 {
+00233   return m_url.user();
+00234 }
+00235 
+00236 QString ConfigElem::getHost( ) const
+00237 {
+00238   return m_url.host();
+00239 }
+00240 
+00241 void ConfigElem::deleteSelectedMails( )
+00242 {
+00243   //return if this account has no selected mails or
+00244   //the account is not idle or the account is not active
+00245   if( !m_pshowrecord->hasSelectedMails() || state != AccountIdle || !isActive() )
+00246   {
+00247     emit sigDeleteReady( m_strAccount );
+00248     return;
+00249   }
+00250 
+00251   //check whether we have a password for this account
+00252   //if not, ask for it
+00253   //return when no password is available
+00254   if( !assertPassword() )
+00255   {
+00256     emit sigDeleteReady( m_strAccount );
+00257     return;
+00258   }
+00259 
+00260   //get the numbers of all selected mails
+00261   MailsToDelete = m_pshowrecord->getSelectedMails();
+00262   if( MailsToDelete.empty() )
+00263   {
+00264     kdError() << "ConfigElem::deleteSelectedMails (Account " << m_strAccount << "): The account has selected mails to delete but ShowRecord::getSelectedMails has returned an empty list." << endl;
+00265     emit sigDeleteReady( m_strAccount );
+00266     return;
+00267   }
+00268 
+00269   //set account state
+00270   state = AccountDeleting;
+00271 
+00272   //start the deleting of all mails in MailsToDelete
+00273   deleteNextMail();
+00274 }
+00275 
+00276 bool ConfigElem::assertPassword( bool force )
+00277 {
+00278   //is a password stored?
+00279   if ( !hasPassword() || force )
+00280   {
+00281     //no password found, we will ask the user!
+00282     //set normal cursor
+00283     while( QApplication::overrideCursor() )
+00284       QApplication::restoreOverrideCursor();
+00285 
+00286     QCString password;      //for the password dialog to store the password
+00287     int result = KPasswordDialog::getPassword( password, i18n( "Please type in the password for %1" ).arg( getAccountName() ) );
+00288 
+00289     //set waiting cursor
+00290     QApplication::setOverrideCursor( Qt::waitCursor );
+00291 
+00292     //let's look, what the user has done :o)
+00293     if( result == KPasswordDialog::Accepted )
+00294     {
+00295       //the user has clicked OK in the password dialog
+00296       //store the password
+00297       setPassword( password );
+00298 
+00299       //save password in file or KWallet
+00300       KConfig* config = KApplication::kApplication()->config();
+00301       config->setGroup( getAccountName() );
+00302 
+00303       if( PasswordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE )
+00304         config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, crypt( m_url ) );
+00305       else
+00306         config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null );
+00307 
+00308       if( PasswordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET )
+00309         KWalletAccess::savePassword( getAccountName(), m_url.pass() );
+00310 
+00311       config->sync();
+00312 
+00313       //emit configuration changed signal
+00314       emit sigConfigChanged();
+00315 
+00316       //tell we have a password
+00317       return true;
+00318     }
+00319     else
+00320       //the user has clicked Cancel in the password dialog; we don't have a password
+00321       return false;
+00322   }
+00323   else
+00324     //we have already a password for this account
+00325     return true;
+00326 
+00327 }
+00328 
+00329 void ConfigElem::deleteNextMail( )
+00330 {
+00331   //if the list of mails to delete is empty, finalize the deletion and return
+00332   if( MailsToDelete.empty() )
+00333   {
+00334     commitDeletion();
+00335     return;
+00336   }
+00337 
+00338   //start job
+00339   startKIOJob( QString( "/remove/%1" ).arg( *MailsToDelete.begin() ) );
+00340   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotMailDeleted( KIO::Job* ) ) );
+00341 }
+00342 
+00343 void ConfigElem::slotMailDeleted( KIO::Job* job )
+00344 {
+00345   //stop timeout timer
+00346   pop3Timer->stop();
+00347 
+00348   //check for errors
+00349   //if an error is occured, the deletion will be canceled
+00350   //or will ask for a new password
+00351   if( job->error() == KIO::ERR_COULD_NOT_LOGIN )
+00352   {
+00353     //login failed, ask for a new password
+00354     job->showErrorDialog();
+00355     bool res = assertPassword( true );
+00356     if( res == false )
+00357     {
+00358       //we have not got a new password; cancel delete
+00359       slotFinalizeDeletion( NULL );
+00360       return;
+00361     }
+00362     //if we have got a new password, it jumps to the end of the if-statement
+00363   }
+00364   else if( job->error() != 0 )
+00365   {
+00366     //unknown error, show message and cancel delete
+00367     job->showErrorDialog();
+00368     slotFinalizeDeletion( NULL );
+00369     return;
+00370   }
+00371   else
+00372   {
+00373     //operation was successful
+00374     //remove the deleted mail from the internal mail list
+00375     m_pshowrecord->removeMail( *MailsToDelete.begin() );
+00376 
+00377     //remove the first item of the list of mails to delete
+00378     MailsToDelete.remove( MailsToDelete.begin() );
+00379 
+00380     //if the list of mails to delete is empty, finalize the deletion and return
+00381     if( MailsToDelete.empty() )
+00382     {
+00383       commitDeletion();
+00384       return;
+00385     }
+00386   }
+00387 
+00388   //delete next mail in list
+00389   deleteNextMail();
+00390 
+00391 
+00392 }
+00393 
+00394 void ConfigElem::slotFinalizeDeletion( KIO::Job* )
+00395 {
+00396   //stop timeout time
+00397   pop3Timer->stop();
+00398 
+00399   //set account state to idle
+00400   state = AccountIdle;
+00401 
+00402   //emit signal to report the deletion is ready
+00403   emit sigDeleteReady( m_strAccount );
+00404 }
+00405 
+00406 void ConfigElem::startKIOJob( const QString & path )
+00407 {
+00408   KIO::MetaData options;           //options for the pop3 job
+00409 
+00410   //set options
+00411   options.insert( "progress", "off" );
+00412   options.insert( "pipelining", "off" );
+00413   options.insert( "auth", "TEXT" );
+00414   options.insert( "tls", "off" );
+00415 
+00416   //set the given command and parameters
+00417   m_url.setPath( path );
+00418 
+00419   //print debug message
+00420   kdDebug() << "ConfigElem::startKIOJob: start KIO job on URL " << m_url.url() << endl;
+00421 
+00422   //start the job and get handle to it
+00423   pop3Job = KIO::get( m_url, false, false );
+00424 
+00425   //put options to the job
+00426   pop3Job->addMetaData( options );
+00427 
+00428   //start timeout timer
+00429   pop3Timer->start( getTimeoutTime() * 1000, true );
+00430 }
+00431 
+00432 Types::AccountState_Type ConfigElem::getState( )
+00433 {
+00434   return state;
+00435 }
+00436 
+00437 void ConfigElem::commitDeletion( )
+00438 {
+00439   //start job to commit
+00440   startKIOJob( QString( "/commit" ) );
+00441   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeDeletion( KIO::Job* ) ) );
+00442 }
+00443 
+00444 unsigned int ConfigElem::getTimeoutTime( )
+00445 {
+00446   //return default time, if the configuration is not accessable
+00447   if( appConfig == NULL )
+00448     return DEFAULT_TIMEOUT_TIME;
+00449 
+00450   //get time from configuration
+00451   unsigned int time = appConfig->getTimeoutTime();
+00452 
+00453   //take minimum time, if get time is less
+00454   if( time < MINIMUM_TIMEOUT_TIME )
+00455     time = MINIMUM_TIMEOUT_TIME;
+00456 
+00457   return time;
+00458 }
+00459 
+00460 void ConfigElem::slotTimeout( )
+00461 {
+00462   //kill a running job
+00463   if( pop3Job != NULL )
+00464     pop3Job->kill( true );
+00465 
+00466   //show error message (during refresh if desired only)
+00467   kdError() << "Timeout error!" << endl;
+00468 
+00469   if( state != AccountRefreshing || appConfig->showConnectionErrors() )
+00470     KMessageBox::error( NULL, QString( i18n( "Time out on %1. The operation could not be finished on time" ) ).arg( m_strAccount ), i18n( "Time Out" ) );
+00471 
+00472   //call the appropriate finalize methode
+00473   switch( state )
+00474   {
+00475     case AccountIdle        : break;
+00476     case AccountDeleting    : slotFinalizeDeletion( NULL ); break;
+00477     case AccountDownloading : slotFinalizeShowMail( NULL ); break;
+00478     case AccountRefreshing  : cancelRefresh(); break;
+00479 
+00480     default : break;
+00481   }
+00482 }
+00483 
+00484 QStringList ConfigElem::getSelectedSubjects( ) const
+00485 {
+00486   return m_pshowrecord->getSelectedSubjects();
+00487 }
+00488 
+00489 bool ConfigElem::hasSelectedMails( )
+00490 {
+00491   return m_pshowrecord->hasSelectedMails();
+00492 }
+00493 
+00494 void ConfigElem::showSelectedMails( )
+00495 {
+00496   //return if this account has no selected mails or
+00497   //the account is not idle or the account is not active
+00498   if( !m_pshowrecord->hasSelectedMails() || state != AccountIdle || !isActive() )
+00499   {
+00500     emit sigShowBodiesReady( m_strAccount );
+00501     return;
+00502   }
+00503 
+00504   //check whether we have a password for this account
+00505   //if not, ask for it
+00506   //return when no password is available
+00507   if( !assertPassword() )
+00508   {
+00509     emit sigShowBodiesReady( m_strAccount );
+00510     return;
+00511   }
+00512 
+00513   //get the numbers of all selected mails
+00514   MailsToShow = m_pshowrecord->getSelectedMails();
+00515   if( MailsToShow.empty() )
+00516   {
+00517     kdError() << "ConfigElem::showSelectedMails (Account " << m_strAccount << "): The account has selected mails to show but ShowRecord::getSelectedMails has returned an empty list." << endl;
+00518     emit sigShowBodiesReady( m_strAccount );
+00519     return;
+00520   }
+00521 
+00522   //set account state
+00523   state = AccountDownloading;
+00524 
+00525   //start the deleting of all mails in MailsToDelete
+00526   showNextMail();
+00527 
+00528 }
+00529 
+00530 void ConfigElem::showNextMail( )
+00531 {
+00532   //if the list of mails to show is empty, finalize it and return
+00533   if( MailsToShow.empty() )
+00534   {
+00535     slotFinalizeShowMail( NULL );
+00536     return;
+00537   }
+00538 
+00539   //clear the class variable mailbody, which contains the downloaded mail body
+00540   mailbody.resize( 0 );
+00541 
+00542   //start job
+00543   startKIOJob( QString( "/download/%1" ).arg( *MailsToShow.begin() ) );
+00544   connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotDataMailBody( KIO::Job*, const QByteArray & ) ) );
+00545   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotBodyDownloaded( KIO::Job* ) ) );
+00546 
+00547 }
+00548 
+00549 void ConfigElem::slotBodyDownloaded( KIO::Job * job )
+00550 {
+00551   //stop timeout timer
+00552   pop3Timer->stop();
+00553 
+00554   //check for errors
+00555   //if an error has occured, the download will be canceled
+00556   //or will ask for a new password
+00557   if( job->error() == KIO::ERR_COULD_NOT_LOGIN )
+00558   {
+00559     //login failed, ask for a new password
+00560     job->showErrorDialog();
+00561     bool res = assertPassword( true );
+00562     if( res == false )
+00563     {
+00564       //we have not got a new password; cancel delete
+00565       slotFinalizeShowMail( NULL );
+00566       return;
+00567     }
+00568     //if we have got a new password, jump to the end of the if-statement
+00569   }
+00570   else if( job->error() != 0 )
+00571   {
+00572     job->showErrorDialog();
+00573     slotFinalizeShowMail( NULL );
+00574     return;
+00575   }
+00576   else
+00577   {
+00578     //succesful download
+00579     //show mail
+00580     int currentMail = *MailsToShow.begin();
+00581     QString tsender = m_pshowrecord->getSenderOf( currentMail );
+00582     QString tdate = m_pshowrecord->getDateOf( currentMail );
+00583     QString tsize = m_pshowrecord->getSizeOf( currentMail );
+00584     QString tsubject = m_pshowrecord->getSubjectOf( currentMail );
+00585     QString tmailbody( m_pshowrecord->decodeMailBody( mailbody, currentMail, appConfig->allowHTML() ) );
+00586 
+00587     //emit signal to notify the opening of a window
+00588     emit sigMessageWindowOpened();
+00589 
+00590     //create and open the window
+00591     ShowMailDialog dlg( kapp->mainWidget(), m_strAccount, appConfig->allowHTML(), tsender, tdate, tsize, tsubject, tmailbody );
+00592     int ret = dlg.exec();
+00593 
+00594     //emit signal to notify the closing of a window
+00595     emit sigMessageWindowClosed();
+00596 
+00597     //cancel the download if desired
+00598     if( ret == KDialogBase::Rejected )
+00599     {
+00600       MailsToShow.clear();
+00601       commitDownloading();
+00602       return;
+00603     }
+00604 
+00605     //remove the first item of the list of mails to show
+00606     MailsToShow.remove( MailsToShow.begin() );
+00607 
+00608     //if the list of mails is empty, finalize the showing and return
+00609     if( MailsToShow.empty() )
+00610     {
+00611       commitDownloading();
+00612       return;
+00613     }
+00614   }
+00615 
+00616 
+00617   //show next mail in list
+00618   showNextMail();
+00619 }
+00620 
+00621 void ConfigElem::slotFinalizeShowMail( KIO::Job* )
+00622 {
+00623   //stop timeout time
+00624   pop3Timer->stop();
+00625 
+00626   //set account state to idle
+00627   state = AccountIdle;
+00628 
+00629   //emit signal to report the download is ready
+00630   emit sigShowBodiesReady( m_strAccount );
+00631 }
+00632 
+00633 void ConfigElem::slotDataMailBody( KIO::Job *, const QByteArray & datas )
+00634 {
+00635   if( !datas.isEmpty() )
+00636   {
+00637     //we get the next part of the mail
+00638     //append it
+00639     uint lastSize = mailbody.size();
+00640     mailbody.resize( lastSize + datas.size() );
+00641     for( uint i = 0; i < datas.size(); i++ )
+00642       mailbody[ lastSize + i ] = datas[ i ];
+00643   }
+00644 }
+00645 
+00646 void ConfigElem::commitDownloading( )
+00647 {
+00648   //start job to commit
+00649   startKIOJob( QString( "/commit" ) );
+00650   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeShowMail( KIO::Job* ) ) );
+00651 }
+00652 
+00653 void ConfigElem::refreshMailList( )
+00654 {
+00655   //return, if account is not active
+00656   if( !isActive() )
+00657   {
+00658     emit sigRefreshReady( m_strAccount );
+00659     return;
+00660   }
+00661 
+00662   //check whether we have a password for this account
+00663   //if not, ask for it
+00664   //return when no password is available
+00665   if( !assertPassword() )
+00666   {
+00667     emit sigRefreshReady( m_strAccount );
+00668     return;
+00669   }
+00670 
+00671   //create a new ShowRecord instance
+00672   //When the refresh has finished successfully, this will
+00673   //replace the old mail list
+00674   tempMailList = new ShowRecord();
+00675 
+00676   //set account state
+00677   state = AccountRefreshing;
+00678 
+00679   //the first step is to get the UIDs
+00680   getUIDs();
+00681 }
+00682 
+00683 void ConfigElem::getUIDs( )
+00684 {
+00685   //clears the QString list, which contains all received UIDs
+00686   receivedUIDs.clear();
+00687 
+00688   //start job
+00689   startKIOJob( QString( "/uidl" ) );
+00690   connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotReceiveUID( KIO::Job*, const QByteArray & ) ) );
+00691   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotUIDsReceived( KIO::Job* ) ) );
+00692 
+00693 }
+00694 
+00695 void ConfigElem::slotReceiveUID( KIO::Job*, const QByteArray& data )
+00696 {
+00697   //return, when data is empty
+00698   if( data.isEmpty() ) return;
+00699 
+00700  //cast the data to QString
+00701   QString uid( data );
+00702 
+00703   //insert the uid at the end of the UID list
+00704   receivedUIDs.append( uid );
+00705 }
+00706 
+00707 void ConfigElem::slotUIDsReceived( KIO::Job * job )
+00708 {
+00709   int number;                 //an extracted mail number
+00710   QString uid;                //an extracted uid
+00711   bool corruptData = false;   //set to TRUE, if a data is corrupt
+00712   bool isNew = false;         //state of the received mail
+00713 
+00714   //stop timeout timer
+00715   pop3Timer->stop();
+00716 
+00717   //check for errors
+00718   //if an error has occured, the refresh will be canceled
+00719   //or will ask for a new password
+00720   if( job->error() == KIO::ERR_COULD_NOT_LOGIN )
+00721   {
+00722     //login failed, ask for a new password
+00723     job->showErrorDialog();
+00724     bool res = assertPassword( true );
+00725     if( res == true )
+00726     {
+00727       //we have got a new password, try again
+00728       delete tempMailList;
+00729       refreshMailList();
+00730     }
+00731     else
+00732       //we have not got a new password; cancel refresh
+00733       cancelRefresh();
+00734 
+00735     return;
+00736   }
+00737   else if( job->error() != 0 )
+00738   {
+00739     //show error message if desired
+00740     if( appConfig->showConnectionErrors() )
+00741       job->showErrorDialog();
+00742 
+00743     cancelRefresh();
+00744     return;
+00745   }
+00746 
+00747   //analyze UIDs
+00748   if( !receivedUIDs.isEmpty() )
+00749   {
+00750     //iterate over all UIDs in the list
+00751     for ( QStringList::Iterator it = receivedUIDs.begin(); it != receivedUIDs.end(); ++it )
+00752     {
+00753       QString line = *it;
+00754 
+00755       //every line has the format "number UID", e.g.: 1 bf10d38018de7c1d628d65288d722f6a
+00756       //get the position of the separating space
+00757       int positionOfSpace = line.find( " " );
+00758 
+00759       //if no space was found, the line is corrupt
+00760       if( positionOfSpace == -1 )
+00761       {
+00762         kdError() << "ConfigElem::slotUIDsReceived: get a corrupt UID from " << dynamic_cast<KIO::SimpleJob*>(job)->url().host() << ". No space. : " << line << endl;
+00763         corruptData = true;
+00764       }
+00765       else
+00766       {
+00767         //extract mail number and uid
+00768         bool isNumber;
+00769         number = line.left( positionOfSpace ).toInt( &isNumber );
+00770         //check number
+00771         if( !isNumber )
+00772         {
+00773           //the first part is not a number
+00774           kdError() << "ConfigElem::slotUIDsReceived: get a corrupt UID from " << dynamic_cast<KIO::SimpleJob*>(job)->url().host() << ". No number found at begin. : " << line << endl;
+00775           corruptData = true;
+00776         }
+00777         else
+00778         {
+00779           //number is ok; extract uid
+00780           uid = line.mid( positionOfSpace + 1 );
+00781 
+00782           //determine about new mail or not
+00783           if( !m_pshowrecord->hasMail( uid ) )
+00784           {
+00785             //the old list doesn't contain a mail with this uid
+00786             //the mail is new
+00787             isNew = true;
+00788           }
+00789           else if( appConfig->keepNew() && m_pshowrecord->isNew( uid ) )
+00790           {
+00791             //the mail is already in the old list
+00792             //but we will leave the state of formerly new mails, because the user wants it
+00793             isNew = true;
+00794           }
+00795           else
+00796             isNew = false;
+00797 
+00798           //append mail to the list
+00799           tempMailList->appendNewMail( number, uid, isNew );
+00800 
+00801         }
+00802       }
+00803     }
+00804 
+00805     //if the data are ok, start the second step: get sizes
+00806     //otherwise cancel the refresh
+00807     if( !corruptData )
+00808       getSizes();
+00809     else
+00810       cancelRefresh();
+00811   }
+00812   else
+00813   {
+00814     //we haven't received any UIDs. The account has no mails.
+00815     //Commit refresh.
+00816     commitRefresh();
+00817   }
+00818 
+00819 }
+00820 
+00821 void ConfigElem::cancelRefresh()
+00822 {
+00823   //print error message
+00824   kdError() << m_strAccount << ": " << "Refresh canceled" << endl;
+00825 
+00826   //delete the new mail list
+00827   delete tempMailList;
+00828 
+00829   //delete old mail list and create a new empty one
+00830   delete m_pshowrecord;
+00831   m_pshowrecord = new ShowRecord();
+00832 
+00833   //emit signal
+00834   emit sigRefreshReady( m_strAccount );
+00835 
+00836   //set account state to idle
+00837   state = AccountIdle;
+00838 
+00839   //we don't need an error message, because the KIO job has shown one
+00840 }
+00841 
+00842 void ConfigElem::slotFinalizeRefresh( KIO::Job* )
+00843 {
+00844   //stop timeout time
+00845   pop3Timer->stop();
+00846 
+00847   //delete old mail list
+00848   delete m_pshowrecord;
+00849 
+00850   //assign the new list
+00851   if( tempMailList != NULL )
+00852     m_pshowrecord = tempMailList;
+00853   else
+00854     m_pshowrecord = new ShowRecord();
+00855 
+00856   //emit signal
+00857   emit sigRefreshReady( m_strAccount );
+00858 
+00859   //set account state to idle
+00860   state = AccountIdle;
+00861 }
+00862 
+00863 void ConfigElem::commitRefresh( )
+00864 {
+00865   //start job to commit
+00866   startKIOJob( QString( "/commit" ) );
+00867   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeRefresh( KIO::Job* ) ) );
+00868 }
+00869 
+00870 void ConfigElem::getSizes( )
+00871 {
+00872   //clears the QString list, which contains all received UIDs
+00873   receivedSizes.clear();
+00874 
+00875   //start job
+00876   startKIOJob( QString( "/index" ) );
+00877   connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotReceiveSize( KIO::Job*, const QByteArray & ) ) );
+00878   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotSizesReceived( KIO::Job* ) ) );
+00879 
+00880 }
+00881 
+00882 void ConfigElem::slotSizesReceived( KIO::Job * job )
+00883 {
+00884   int number;                 //an extracted mail number
+00885   long size;                   //an extracted size
+00886   bool corruptData = false;   //set to TRUE, if a data is corrupt
+00887 
+00888   //stop timeout timer
+00889   pop3Timer->stop();
+00890 
+00891   //check for errors
+00892   //if an error has occured, the refresh will be canceled
+00893   if( job->error() != 0 )
+00894   {
+00895     //show error message if desired
+00896     if( appConfig->showConnectionErrors() )
+00897       job->showErrorDialog();
+00898     cancelRefresh();
+00899     return;
+00900   }
+00901 
+00902   //analyze UIDs
+00903   if( !receivedSizes.isEmpty() )
+00904   {
+00905     //iterate over all sizes in the list
+00906     for ( QStringList::Iterator it = receivedSizes.begin(); it != receivedSizes.end(); ++it )
+00907     {
+00908       QString line = *it;
+00909 
+00910       //every line has the format "number size", e.g.: 1 1234
+00911       //get the position of the separating space
+00912       int positionOfSpace = line.find( " " );
+00913 
+00914       //if no space was found, the line is corrupt
+00915       if( positionOfSpace == -1 )
+00916       {
+00917         kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast<KIO::SimpleJob*>(job)->url().host() << ". No space. : " << line << endl;
+00918         corruptData = true;
+00919       }
+00920       else
+00921       {
+00922         //extract mail number and size
+00923         bool isNumber;
+00924         number = line.left( positionOfSpace ).toInt( &isNumber );
+00925         //check number
+00926         if( !isNumber )
+00927         {
+00928           //the first part is not a number
+00929           kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast<KIO::SimpleJob*>(job)->url().host() << ". No number found at begin. : " << line << endl;
+00930           corruptData = true;
+00931         }
+00932         else
+00933         {
+00934           //number is ok; extract size
+00935           size = line.mid( positionOfSpace + 1 ).toLong( &isNumber );
+00936 
+00937           //check size
+00938           if( !isNumber )
+00939           {
+00940             //the second part of the string is not a number
+00941             kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast<KIO::SimpleJob*>(job)->url().host() << ". No size found at end. : " << line << endl;
+00942             corruptData = true;
+00943           }
+00944           else
+00945           {
+00946             //size is ok
+00947             //set it
+00948             tempMailList->setSize( number, size );
+00949           }
+00950         }
+00951       }
+00952     }
+00953 
+00954     //if the data are ok, start the third step: get headers
+00955     //otherwise cancel the refresh
+00956     if( !corruptData )
+00957       getHeaders();
+00958     else
+00959       cancelRefresh();
+00960   }
+00961 }
+00962 
+00963 void ConfigElem::slotReceiveSize( KIO::Job *, const QByteArray & data )
+00964 {
+00965   //return, when data is empty
+00966   if( data.isEmpty() ) return;
+00967 
+00968  //cast the data to QString
+00969   QString size( data );
+00970 
+00971   //insert the uid at the end of the sizes list
+00972   receivedSizes.append( size );
+00973 
+00974 }
+00975 
+00976 void ConfigElem::getHeaders( )
+00977 {
+00978   //get the numbers of all new mails
+00979   newMails = tempMailList->getNewMails();
+00980   if( newMails.empty() )
+00981   {
+00982     //no new mails available; copy the known headers from the old mail list
+00983     copyHeaders();
+00984     return;
+00985   }
+00986 
+00987   //get the headers
+00988   getNextHeader();
+00989 }
+00990 
+00991 void ConfigElem::getNextHeader( )
+00992 {
+00993   //if the list of mails empty, copy the known headers from the old mail list
+00994   if( newMails.empty() )
+00995   {
+00996     copyHeaders();
+00997     return;
+00998   }
+00999 
+01000   //clear temporary header store
+01001   receivedHeader.resize( 0 );
+01002 
+01003   //start job
+01004   startKIOJob( QString( "/headers/%1" ).arg( *newMails.begin() ) );
+01005   connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), this, SLOT( slotReceiveHeader( KIO::Job*, const QByteArray & ) ) );
+01006   connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotHeaderDownloaded( KIO::Job* ) ) );
+01007 
+01008 }
+01009 
+01010 void ConfigElem::slotHeaderDownloaded( KIO::Job * job )
+01011 {
+01012   //stop timeout timer
+01013   pop3Timer->stop();
+01014 
+01015   //check for errors
+01016   //if an error is occured, the download will be canceled
+01017   if( job->error() != 0 )
+01018   {
+01019     //show error message if desired
+01020     if( appConfig->showConnectionErrors() )
+01021       job->showErrorDialog();
+01022 
+01023     cancelRefresh();
+01024     return;
+01025   }
+01026 
+01027   //store header
+01028   tempMailList->setHeader( *newMails.begin(), QString( receivedHeader ) );
+01029 
+01030   //remove the first item of the list of new mails
+01031   newMails.remove( newMails.begin() );
+01032 
+01033   //if the list of new mails is empty, copy the headers of old mails to the new list
+01034   if( newMails.empty() )
+01035   {
+01036     copyHeaders();
+01037     return;
+01038   }
+01039 
+01040   //get next header
+01041   getNextHeader();
+01042 }
+01043 
+01044 void ConfigElem::copyHeaders( )
+01045 {
+01046   //get the UIDs of the old mails in the temporary mail list
+01047   QStringList UIDs = tempMailList->getUIDsOfOldMails();
+01048 
+01049   //iterate over all members of the list,
+01050   //get the header from the old list and store it in the new one
+01051   QStringList::iterator it;
+01052   for ( it = UIDs.begin(); it != UIDs.end(); ++it )
+01053   {
+01054     QString header = m_pshowrecord->getHeaderOf( *it );
+01055     tempMailList->setHeader( *it, header );
+01056   }
+01057 
+01058   //commit refresh
+01059   commitRefresh();
+01060 }
+01061 
+01062 void ConfigElem::slotReceiveHeader( KIO::Job *, const QByteArray & data )
+01063 {
+01064   if( !data.isEmpty() )
+01065   {
+01066     //we get the next part of the mail
+01067     //append it
+01068     uint lastSize = receivedHeader.size();
+01069     receivedHeader.resize( lastSize + data.size() );
+01070     for( uint i = 0; i < data.size(); i++ )
+01071       receivedHeader[ lastSize + i ] = data[ i ];
+01072   }
+01073 }
+01074 
+01075 int ConfigElem::getNumberNewMails( )
+01076 {
+01077   return m_pshowrecord->getNumberNewMails();
+01078 }
+01079 
+01080 int ConfigElem::getNumberMails( )
+01081 {
+01082   return m_pshowrecord->getNumberMails();
+01083 }
+01084 
+01085 long ConfigElem::getTotalSize( )
+01086 {
+01087   return m_pshowrecord->getTotalSize();
+01088 }
+01089 
+01090 void ConfigElem::fillMailListView( KshowmailView* view )
+01091 {
+01092   m_pshowrecord->fillMailListView( view, m_strAccount );
+01093 }
+01094 
+01095 void ConfigElem::refreshAccountListItem( )
+01096 {
+01097   if( m_pViewItem != NULL )
+01098   {
+01099     if( isActive() )
+01100     {
+01101       m_pViewItem->setText( 4, QString( "%1" ).arg( getNumberMails(), 3 ) );
+01102       m_pViewItem->setText( 5, QString( "%1" ).arg( getTotalSize(), 8 ) );
+01103     }
+01104     else
+01105     {
+01106       m_pViewItem->setText( 4, QString( "???" ) );
+01107       m_pViewItem->setText( 5, QString( "???" ) );
+01108     }
+01109   }
+01110 }
+01111 
+01112 void ConfigElem::killPOP3Job( )
+01113 {
+01114   //just try to kill, if it is not idle
+01115   if( state != AccountIdle )
+01116   {
+01117     //kill a running job
+01118     if( pop3Job != NULL )
+01119       pop3Job->kill( true );
+01120 
+01121     //stop timeout timer
+01122     pop3Timer->stop();
+01123 
+01124     //call the appropriate finalize method
+01125     switch( state )
+01126     {
+01127       case AccountDeleting    : slotFinalizeDeletion( NULL ); break;
+01128       case AccountDownloading : slotFinalizeShowMail( NULL ); break;
+01129       case AccountRefreshing  : cancelRefresh(); break;
+01130 
+01131       default : break;
+01132     }
+01133   }
+01134 }
+01135 
+01136 int ConfigElem::showSelectedHeaders( )
+01137 {
+01138   //return, if no mails are selected
+01139   if( !hasSelectedMails() )
+01140     return ConfigElem::continueShowHeaders;
+01141 
+01142   //order the mail list to show the headers of the selected mails
+01143   int ret = m_pshowrecord->showSelectedHeaders( m_strAccount );
+01144 
+01145   return ret == ShowRecord::continueShowHeaders ? ConfigElem::continueShowHeaders : ConfigElem::cancelShowHeaders;
+01146 }
+01147 
+01148 void ConfigElem::printSetup( ) const
+01149 {
+01150   kdDebug() << "Setup of " << m_strAccount << ":" << endl;
+01151   kdDebug() << "Host: " << m_url.host() << endl;
+01152   kdDebug() << "Protocol: " << m_url.protocol() << endl;
+01153   kdDebug() << "Port: " << m_url.port() << endl;
+01154   kdDebug() << "User: " << m_url.user() << endl;
+01155   kdDebug() << "Password: " << m_url.pass() << endl;
+01156 
+01157   switch( PasswordStorage )
+01158   {
+01159     case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE    : kdDebug() << "Password Storage: don't save" << endl; break;
+01160     case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE    : kdDebug() << "Password Storage: save in file" << endl; break;
+01161     case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET : kdDebug() << "Password Storage: use KWallet" << endl; break;
+01162     default                                         : kdDebug() << "Password Storage: invalid value" << endl;
+01163 
+01164   }
+01165 
+01166   kdDebug() << "active: " << m_bActive << endl << endl;
+01167 
+01168 
+01169 }
+01170 
+01171 void ConfigElem::setPasswordStorage( int storage )
+01172 {
+01173   if( storage == CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ||
+01174       storage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ||
+01175       storage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET )
+01176 
+01177     PasswordStorage = storage;
+01178 
+01179   else
+01180 
+01181     PasswordStorage =  DEFAULT_ACCOUNT_PASSWORD_STORAGE;
+01182 }
+01183 
+01184 int ConfigElem::getPasswordStorage( ) const
+01185 {
+01186   return PasswordStorage;
+01187 }
+01188 
+01189 QString ConfigElem::getProtocol( bool upperCase ) const
+01190 {
+01191   if( upperCase )
+01192     return m_url.protocol().upper();
+01193   else
+01194     return m_url.protocol();
+01195 }
+01196 
+01197 unsigned short int ConfigElem::getPort( ) const
+01198 {
+01199   return m_url.port();
+01200 }
+01201 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/configelem_8h-source.html b/doc/html/configelem_8h-source.html new file mode 100644 index 0000000..697d9ce --- /dev/null +++ b/doc/html/configelem_8h-source.html @@ -0,0 +1,363 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configelem.h Source File + + + + + + + +

configelem.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           configelem.h  -  description
+00003                              -------------------
+00004     begin                : Tue May 9 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef CONFIGELEM_H
+00019 #define CONFIGELEM_H
+00020 
+00021 //C headers
+00022 #include <time.h>
+00023 #include <unistd.h>
+00024 #include <stdlib.h>
+00025 #include <stdio.h>
+00026 
+00027 //QT headers
+00028 #include <qstring.h>
+00029 #include <qlistview.h>
+00030 #include <qdom.h>
+00031 #include <qobject.h>
+00032 #include <qtimer.h>
+00033 #include <qregexp.h>
+00034 #include <qdir.h>
+00035 #include <qfile.h>
+00036 #include <qtextstream.h>
+00037 
+00038 //KDE headers
+00039 #include <kurl.h>
+00040 #include <kconfig.h>
+00041 #include <kdebug.h>
+00042 #include <kpassdlg.h>
+00043 #include <kio/job.h>
+00044 #include <kio/global.h>
+00045 #include <kmessagebox.h>
+00046 #include <kapplication.h>
+00047 
+00048 //KShowmail headers
+00049 #include "showrecord.h"
+00050 #include "constants.h"
+00051 #include "types.h"
+00052 #include "configlist.h"
+00053 #include "showmaildialog.h"
+00054 #include "decodeRFC2047.h"
+00055 #include "kshowmailview.h"
+00056 #include "encryption.h"
+00057 #include "kwalletaccess.h"
+00058 #include "headerfilter.h"
+00059 #include "filterlog.h"
+00060 
+00061 
+00062 
+00063 using namespace Constants;
+00064 using namespace Types;
+00065 using namespace Encryption;
+00066 
+00067 //forward class declarations
+00068 class KshowmailView;
+00069 class ConfigList;
+00070 class ShowRecordElem;
+00071 class ShowRecord;
+00072 
+00086 class ConfigElem : public QObject {
+00087 
+00088   Q_OBJECT
+00089 
+00090   public:
+00091 
+00096     static const int continueShowHeaders;
+00097 
+00102     static const int cancelShowHeaders;
+00103 
+00109     ConfigElem();
+00110 
+00115     ConfigElem ( ConfigList* config );
+00116 
+00124     ConfigElem( ConfigElem* pElem );
+00125 
+00134     ConfigElem( ConfigList* config, const QString& account );
+00135 
+00140     ~ConfigElem();
+00141 
+00146     bool isActive() const;
+00147 
+00152     void setActive( bool active );
+00153 
+00158    QString getAccountName() const;
+00159 
+00164    void setAccountName( QString name );
+00165 
+00170    QString getPassword() const;
+00171 
+00177    void setPassword( const QString& password );
+00178 
+00183    bool hasPassword() const;
+00184 
+00189    KURL getURL() const;
+00190 
+00196    void setListViewItem( QListViewItem* item );
+00197 
+00203    QListViewItem* getListViewItem();
+00204 
+00210    bool isSelected() const;
+00211 
+00215    void clearMailList();
+00216 
+00221    void setHost( const QString& host );
+00222 
+00227    QString getHost() const;
+00228 
+00233    void setProtocol( const QString& protocol );
+00234 
+00240    QString getProtocol( bool upperCase = false ) const;
+00241 
+00246    void setTLS( bool tls );
+00247 
+00253    bool getTLS() const;
+00254 
+00259    void setPort( unsigned short int port );
+00260 
+00265    unsigned short int getPort() const;
+00266 
+00271    void setUser( const QString& user );
+00272 
+00277    QString getUser() const;
+00278 
+00284    void setPasswordStorage( int storage );
+00285 
+00291    int getPasswordStorage() const;
+00292 
+00293 
+00301   void saveOptions( QDomDocument& doc, QDomElement& parent );
+00302 
+00307   void readStoredMails( QDomElement& parent );
+00308 
+00313   int count();
+00314 
+00320   void deleteSelectedMails();
+00321 
+00328   void showSelectedMails();
+00329 
+00338   bool assertPassword( bool force = false );
+00339 
+00344   Types::AccountState_Type getState();
+00345 
+00350   QStringList getSelectedSubjects() const;
+00351 
+00358   bool hasSelectedMails();
+00359 
+00368   void refreshMailList( FilterLog* log = NULL );
+00369 
+00374   int getNumberNewMails();
+00375 
+00380   int getNumberMails();
+00381 
+00386   long getTotalSize();
+00387 
+00393   void fillMailListView( KshowmailView* view );
+00394 
+00400   void refreshAccountListItem();
+00401 
+00405   void killPOP3Job();
+00406 
+00413   int showSelectedHeaders();
+00414 
+00418   void printSetup() const;
+00419 
+00424   void reloadFilterSettings();
+00425 
+00426 
+00427   private:
+00428 
+00433     ConfigList* appConfig;
+00434 
+00439     FilterLog* FLog;
+00440 
+00444     Types::AccountState_Type state;
+00445 
+00453     int PasswordStorage;
+00454 
+00458     bool m_bActive;
+00459 
+00463     QString m_strAccount;
+00464 
+00468     QListViewItem* m_pViewItem;
+00469 
+00473     ShowRecord* m_pshowrecord;
+00474 
+00478     KURL m_url;
+00479 
+00484     int secureLoginType;
+00485 
+00489     bool useTLS;
+00490 
+00495     QByteArray mailbody;
+00496 
+00505     MailNumberList_Type MailsToDelete;
+00506 
+00513     MailToDownloadMap_Type MailsToDownload;
+00514 
+00522     MailNumberList_Type MailsToShow;
+00523 
+00531     MailNumberList_Type newMails;
+00532 
+00536     KIO::TransferJob* pop3Job;
+00537 
+00542     QTimer* pop3Timer;
+00543 
+00549     ShowRecord* tempMailList;
+00550 
+00555     QStringList receivedUIDs;
+00556 
+00561     QStringList receivedSizes;
+00562 
+00567     QByteArray receivedHeader;
+00568 
+00572     HeaderFilter headerFilter;
+00573 
+00581     bool filterApplied;
+00582 
+00587     bool deletionPerformedByFilters;
+00588 
+00593     bool refreshPerformedByFilters;
+00594 
+00599     bool downloadActionsInvoked;
+00600 
+00604     int moveCounter;
+00605 
+00609     void init();
+00610 
+00619     void deleteNextMail();
+00620 
+00627     void commitDeletion();
+00628 
+00638     void showNextMail();
+00639 
+00646     void commitDownloading();
+00647 
+00652     void startKIOJob( const QString& path );
+00653 
+00663     unsigned int getTimeoutTime();
+00664 
+00672     void getUIDs();
+00673 
+00681     void getSizes();
+00682 
+00687     void getHeaders();
+00688 
+00699     void getNextHeader();
+00700 
+00707     void copyHeaders();
+00708 
+00720     void applyFilters();
+00721 
+00730     void applyFiltersDeleted();
+00731 
+00736     void cancelRefresh();
+00737 
+00747     void commitRefresh();
+00748 
+00764     void swapMailLists();
+00765 
+00772     void doDownloadActions();
+00773 
+00783     void getNextMailForDownloadActions();
+00784 
+00790     bool isMailDir( const QDir& path );
+00791 
+00798     bool writeToMailBox( const QString& mail, const QString& box );
+00799 
+00800   private slots:
+00801 
+00816     void slotMailDeleted( KIO::Job* job );
+00817 
+00826     void slotFinalizeDeletion( KIO::Job* );
+00827 
+00845     void slotBodyDownloaded( KIO::Job* job );
+00846 
+00862     void slotMailDownloadedForAction( KIO::Job* job );
+00863 
+00872     void slotDataMailBody( KIO::Job*, const QByteArray & datas );
+00873 
+00883     void slotFinalizeShowMail( KIO::Job* );
+00884 
+00892     void slotTimeout();
+00893 
+00902     void slotReceiveUID( KIO::Job*, const QByteArray& data );
+00903 
+00911     void slotUIDsReceived( KIO::Job* job );
+00912 
+00921     void slotReceiveSize( KIO::Job*, const QByteArray& data );
+00922 
+00929     void slotSizesReceived( KIO::Job* job );
+00930 
+00931 
+00937     void slotFinalizeRefresh( KIO::Job* );
+00938 
+00954     void slotHeaderDownloaded( KIO::Job* job );
+00955 
+00964     void slotReceiveHeader( KIO::Job*, const QByteArray& data );
+00965 
+00966 
+00967   signals:
+00968 
+00973     void sigDeleteReady( QString account );
+00974 
+00980     void sigShowBodiesReady( QString account );
+00981 
+00985     void sigConfigChanged();
+00986 
+00990     void sigMessageWindowOpened();
+00991 
+00995     void sigMessageWindowClosed();
+00996 
+01001     void sigRefreshReady( QString account );
+01002 
+01003   protected:
+01004 
+01010     bool isSpam( QByteArray mail ) const;
+01011 
+01016     bool isSpamAssassinRunning() const;
+01017 
+01018 
+01019 
+01020 };
+01021 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/configlist_8cpp-source.html b/doc/html/configlist_8cpp-source.html new file mode 100644 index 0000000..2564682 --- /dev/null +++ b/doc/html/configlist_8cpp-source.html @@ -0,0 +1,1055 @@ + + +kshowmail: kshowmail/configlist.cpp Source File + + + + + + +

configlist.cpp

00001 /***************************************************************************
+00002                           configlist.cpp  -  description
+00003                              -------------------
+00004     begin                : Tue May 9 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007 
+00008     26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00009  ***************************************************************************/
+00010 
+00011 /***************************************************************************
+00012  *                                                                         *
+00013  *   This program is free software; you can redistribute it and/or modify  *
+00014  *   it under the terms of the GNU General Public License as published by  *
+00015  *   the Free Software Foundation; either version 2 of the License, or     *
+00016  *   (at your option) any later version.                                   *
+00017  *                                                                         *
+00018  ***************************************************************************/
+00019 #include <stdio.h>
+00020 #include <stdlib.h>
+00021 
+00022 #include <qfile.h>
+00023 
+00024 #include <kconfig.h>
+00025 #include <ksavefile.h>
+00026 #include <kapplication.h>
+00027 #include <kstandarddirs.h>
+00028 #include <kaudioplayer.h>
+00029 #include <kdebug.h>
+00030 
+00031 #include "configlist.h"
+00032 #include "filter.h"
+00033 
+00034 ConfigList::ConfigList() : QObject()
+00035 {
+00036        setAutoDelete (true);
+00037 
+00038     //assume, no window to show a mail is open at beginning
+00039     ctrOpenMessageWindows = 0;
+00040 
+00041     //set default values
+00042     m_bShowMessage = DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW;
+00043     m_bShowMainWindow = DEFAULT_ACTION_NEW_MAIL_MAINWINDOW;
+00044     m_bBeep = DEFAULT_ACTION_NEW_MAIL_BEEP;
+00045     m_bSound = DEFAULT_ACTION_NEW_MAIL_SOUND;
+00046     m_bCommand = DEFAULT_ACTION_NEW_MAIL_COMMAND;
+00047     m_bMinimize = DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE;
+00048     m_bTerminate = DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE;
+00049 
+00050     m_bConfirmClose = DEFAULT_CONFIRM_CLOSE;
+00051     m_bConfirmDelete = DEFAULT_CONFIRM_DELETE;
+00052     m_bStartMinimized = DEFAULT_START_MINIMIZED;
+00053     m_bCloseMinimizes = DEFAULT_CLOSE_TO_TRAY;
+00054     m_bMinimizeToTray = DEFAULT_MINIMIZE_TO_TRAY;
+00055     m_bShowConnectionErrors = DEFAULT_SHOW_CONNECTION_ERRORS;
+00056     m_bKeepNew = DEFAULT_KEEP_NEW;
+00057     m_nInitTimer = DEFAULT_INITIAL_TIME;
+00058     m_nIntervalTimer = DEFAULT_INTERVAL_TIME;
+00059     m_nPop3Timer = DEFAULT_TIMEOUT_TIME;
+00060 }
+00061 
+00062 int ConfigList::compareItems( QCollection::Item item1, QCollection::Item item2 )
+00063 {
+00064   ConfigElem* p1 = (ConfigElem*)item1;
+00065   ConfigElem* p2 = (ConfigElem*)item2;
+00066 
+00067   return strcmp( p1->getAccountName(), p2->getAccountName() );
+00068 }
+00069 
+00070 QCollection::Item ConfigList::newItem( QCollection::Item item )
+00071 {
+00072   return new ConfigElem( (ConfigElem*)item );
+00073 }
+00074 
+00075 void ConfigList::saveOptions ()
+00076 {
+00077   kdDebug () << "ConfigList::saveOptions" << endl;
+00078 
+00079   //create XML document
+00080   QDomDocument doc( "KShowmail" );
+00081 
+00082   //create root element
+00083   QDomElement accounts = doc.createElement( ROOT_ELEMENT );
+00084 
+00085   //create for every account an element
+00086   //the account saves its mails into this element
+00087   //after that the element will be appended to the root element
+00088   int i = 0;
+00089   ConfigElem* account = NULL;               //current processed account
+00090   QPtrListIterator<ConfigElem> it( *this ); //iterator for the account list
+00091 
+00092   //iterate over all accounts
+00093   while( ( account = it.current() ) != NULL )
+00094   {
+00095     //increment iterator to next account
+00096     ++it;
+00097 
+00098     //save mails
+00099     QDomElement accElem = doc.createElement( QString( ACCOUNT_ELEMENT ) + QString( "%1" ).arg( i++ ) );
+00100     account->saveOptions( doc, accElem ); //account saves the mails into given XML document and the setup into the application config file
+00101     accounts.appendChild( accElem );
+00102 
+00103   }
+00104 
+00105   //append root element to XML document
+00106   doc.appendChild( accounts );
+00107 
+00108   //save XML document
+00109   QCString str = doc.toCString(); //convert XML document to a string
+00110   QString cachefilename = locateLocal( "config", "kshowmail.xml" ); //get file path
+00111   KSaveFile file( cachefilename, 0600 );  //create file
+00112 
+00113   if( file.status() != 0 )
+00114   {
+00115     kdError() << "Couldn't save mail cache. " << strerror( file.status() );
+00116     return;
+00117   }
+00118 
+00119     //write data
+00120   file.file()->writeBlock( str.data(), str.length() );
+00121 
+00122     //close file
+00123   if( !file.close() )
+00124   {
+00125     kdError () << "Couldn't save mail cache. " << strerror(file.status());
+00126     return;
+00127   }
+00128 }
+00129 
+00130 
+00131 void ConfigList::setList (QListView* list)
+00132 {
+00133        QPixmap pix (::locate ("data", "kshowmail/pics/ok.png"));
+00134        list->clear ();
+00135        int nIndex = at ();
+00136        QListViewItem* last = NULL;
+00137        for (ConfigElem* pElem = first(); pElem; pElem = next())
+00138        {
+00139               last = new QListViewItem (list, last, "", pElem->getAccountName(), pElem->getURL().host(), pElem->getURL().user(), "?");
+00140         pElem->setListViewItem( last );
+00141               if (pElem->isActive())
+00142                      pElem->getListViewItem()->setPixmap (0, pix);
+00143        }
+00144 
+00145        if (nIndex >= 0)
+00146        {
+00147               at (nIndex);
+00148 //            list->setCurrentItem (nIndex);
+00149        }
+00150 }
+00151 
+00152 
+00153 bool ConfigList::setItem (const char* item)
+00154 {
+00155        int nPos = at ();
+00156        ConfigElem* pActive = new ConfigElem (this, item);
+00157        bool result = (find (pActive) >= 0);
+00158        delete pActive;
+00159        if (result)
+00160               return true;
+00161        else
+00162        {
+00163               at (nPos);
+00164               return false;
+00165        }
+00166 }
+00167 
+00168 void ConfigList::beep ()
+00169 {
+00170        if (m_bBeep)
+00171               kapp->beep ();
+00172 }
+00173 
+00174 void ConfigList::playSound ()
+00175 {
+00176        if (m_bSound)
+00177        playSound (m_strSoundFile);
+00178 }
+00179 
+00180 void ConfigList::playSound (const char* file)
+00181 {
+00182        KAudioPlayer::play(file);
+00183 }
+00184 
+00185 
+00186 void ConfigList::applyFilters ()
+00187 {
+00188   if (Filter::_status != Filter::off)
+00189   {
+00190     for (ConfigElem* pElem = first(); pElem; pElem = next())
+00191     {
+00192       if (pElem->isActive() )
+00193       {
+00194         pElem->applyFilters ();
+00195       }
+00196     }
+00197   }
+00198 }
+00199 
+00200 int ConfigList::getRefreshTimeInterval( ) const
+00201 {
+00202   return m_nIntervalTimer;
+00203 }
+00204 
+00205 void ConfigList::setRefreshTimeInterval( unsigned int interval )
+00206 {
+00207   m_nIntervalTimer = interval;
+00208 }
+00209 
+00210 bool ConfigList::AutoRefreshOn( ) const
+00211 {
+00212   return ( m_nIntervalTimer > 0 );
+00213 }
+00214 
+00215 bool ConfigList::hasActiveAccounts( )
+00216 {
+00217   bool activeAccountFound = false;    //when a active account was found, this will be set to TRUE
+00218   ConfigElem* currentAccount;         //saved current account
+00219   ConfigElem* Account;                //used by the search
+00220 
+00221   //save the current account
+00222   currentAccount = current();
+00223 
+00224   //get the first account
+00225   Account = first();
+00226 
+00227   //looking for an active account
+00228   while( Account != NULL && !activeAccountFound )
+00229   {
+00230     //have we found one?
+00231     activeAccountFound = Account->isActive();
+00232 
+00233     //get next account
+00234     Account = next();
+00235   }
+00236 
+00237   //set the saved account to current
+00238   if( currentAccount != NULL )
+00239     findRef( currentAccount );
+00240 
+00241   //return the result
+00242   return activeAccountFound;
+00243 }
+00244 
+00245 
+00246 uint ConfigList::getTimeoutTime( ) const
+00247 {
+00248   return m_nPop3Timer;
+00249 }
+00250 
+00251 void ConfigList::setTimeoutTime( uint time )
+00252 {
+00253   if( time < MINIMUM_TIMEOUT_TIME )
+00254     m_nPop3Timer = MINIMUM_TIMEOUT_TIME;
+00255   else
+00256     m_nPop3Timer = time;
+00257 }
+00258 
+00259 ConfigElem* ConfigList::getSelectedAccount( )
+00260 {
+00261   //get the first account in the list
+00262   ConfigElem* account = first();
+00263 
+00264   //return NULL if there are no accounts
+00265   if( account == NULL )
+00266     return NULL;
+00267 
+00268   //return the account, if it is selected
+00269   if( account->isSelected() )
+00270     return account;
+00271 
+00272   //iterate over all accounts
+00273   bool selectedAccountFound = false;  //is TRUE, if a selected account was found
+00274   while( account != NULL && !selectedAccountFound )
+00275   {
+00276     //get next account
+00277     account = next();
+00278 
+00279     //is the account selected?
+00280     if( account != NULL )
+00281       selectedAccountFound = account->isSelected();
+00282     else
+00283       selectedAccountFound = false;
+00284   }
+00285 
+00286   //return the current account if we have found a selected account
+00287   //otherwise return FALSE
+00288   if( selectedAccountFound )
+00289     return account;
+00290   else
+00291     return NULL;
+00292 }
+00293 
+00294 void ConfigList::deleteSelectedMails( )
+00295 {
+00296   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00297   ConfigElem* account;                        //account to process
+00298 
+00299   //clear the map, which contains the names of the accounts,
+00300   //which have gotten an order to delete
+00301   AccountDeletionMap.clear();
+00302 
+00303   //refresh connects
+00304   connectAccounts();
+00305 
+00306   //inserts an item for every account which will get an order to delete
+00307   //its selected mails. The key is the account name and the data is TRUE.
+00308   //it is important to do this in a seperate iteration because this avoids
+00309   //race conditions
+00310   while( ( account = it.current() ) != NULL )
+00311   {
+00312     //insert item
+00313     AccountDeletionMap.insert( account->getAccountName(), true );
+00314 
+00315     //get next account
+00316     ++it;
+00317   }
+00318 
+00319   //order all accounts to delete its selected mail
+00320   it.toFirst();
+00321   while( ( account = it.current() ) != NULL )
+00322   {
+00323     account->deleteSelectedMails();
+00324 
+00325     //get next account
+00326     ++it;
+00327   }
+00328 }
+00329 
+00330 void ConfigList::slotAccountConfigChanged( )
+00331 {
+00332   emit sigConfigChanged();
+00333 }
+00334 
+00335 void ConfigList::slotCheckDeletionState( QString account )
+00336 {
+00337   bool accountDeleting = false;     //set to TRUE if an account is still deleting
+00338   AccountTaskMap_Type::Iterator it; //iterator over the account deletion map
+00339 
+00340   //set the appropriate item in AccountDeletionMap to FALSE
+00341   AccountDeletionMap[ account ] = false;
+00342 
+00343   //iterate over the account deletion map to check, whether all accounts
+00344   //are ready
+00345   for ( it = AccountDeletionMap.begin(); it != AccountDeletionMap.end(); ++it )
+00346   {
+00347     if( *it == true )
+00348       accountDeleting = true;
+00349   }
+00350 
+00351   //emit sigDeleteReady if all accounts are ready
+00352   if( !accountDeleting )
+00353     emit sigDeleteReady();
+00354 }
+00355 
+00356 void ConfigList::connectAccounts( )
+00357 {
+00358   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00359   ConfigElem* account;                        //account to connect
+00360 
+00361   while( ( account = it.current() ) != NULL )
+00362   {
+00363     //disconnect old connections
+00364     account->disconnect();
+00365 
+00366     //connect
+00367     connect( account, SIGNAL( sigConfigChanged() ), this, SLOT( slotAccountConfigChanged() ) );
+00368     connect( account, SIGNAL( sigDeleteReady( QString ) ), this, SLOT( slotCheckDeletionState( QString ) ) );
+00369     connect( account, SIGNAL( sigShowBodiesReady( QString ) ), this, SLOT( slotCheckShowBodiesState( QString ) ) );
+00370     connect( account, SIGNAL( sigMessageWindowOpened() ), this, SLOT( slotMessageWindowOpened() ) );
+00371     connect( account, SIGNAL( sigMessageWindowClosed() ), this, SLOT( slotMessageWindowClosed() ) );
+00372     connect( account, SIGNAL( sigRefreshReady( QString ) ), this, SLOT( slotCheckRefreshState( QString ) ) );
+00373 
+00374     //get next account
+00375     ++it;
+00376   }
+00377 }
+00378 
+00379 void ConfigList::setConfirmDeletion( bool confirm )
+00380 {
+00381   m_bConfirmDelete = confirm;
+00382 }
+00383 
+00384 bool ConfigList::confirmDeletion( )
+00385 {
+00386   return m_bConfirmDelete;
+00387 }
+00388 
+00389 QStringList ConfigList::getSelectedSubjects( ) const
+00390 {
+00391   QStringList subjects;                       //contains all subjects
+00392   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00393   ConfigElem* account;                        //current account
+00394 
+00395   while( ( account = it.current() ) != NULL )
+00396   {
+00397     //get subjects of the current account and append them to the list
+00398     subjects += account->getSelectedSubjects();
+00399 
+00400     //get next account
+00401     ++it;
+00402   }
+00403 
+00404   return subjects;
+00405 }
+00406 
+00407 bool ConfigList::hasSelectedMails( )
+00408 {
+00409   bool foundSelected = false;                 //set to TRUE, when an account with selected mails was found
+00410   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00411   ConfigElem* account;                        //current account
+00412 
+00413   while( ( account = it.current() ) != NULL && !foundSelected )
+00414   {
+00415     foundSelected = account->hasSelectedMails();
+00416 
+00417     //get next account
+00418     ++it;
+00419   }
+00420 
+00421   return foundSelected;
+00422 
+00423 }
+00424 
+00425 void ConfigList::showSelectedMails( )
+00426 {
+00427   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00428   ConfigElem* account;                        //account to process
+00429 
+00430   //clear the map, which contains the names of the accounts,
+00431   //which have gotten an order to show mails
+00432   AccountShowBodiesMap.clear();
+00433 
+00434   //refresh connects
+00435   connectAccounts();
+00436 
+00437   //inserts an item for every account which will get an order to show
+00438   //its selected mails. The key is the account name and the data is TRUE.
+00439   //it is important to do this in a seperate iteration because this avoids
+00440   //race conditions
+00441   while( ( account = it.current() ) != NULL )
+00442   {
+00443     //insert item
+00444     AccountShowBodiesMap.insert( account->getAccountName(), true );
+00445 
+00446     //get next account
+00447     ++it;
+00448   }
+00449 
+00450   //order all accounts to show its selected mail
+00451   it.toFirst();
+00452   while( ( account = it.current() ) != NULL )
+00453   {
+00454     account->showSelectedMails();
+00455 
+00456     //get next account
+00457     ++it;
+00458   }
+00459 
+00460 }
+00461 
+00462 void ConfigList::slotCheckShowBodiesState( QString account )
+00463 {
+00464   bool accountDownloading = false;    //set to TRUE if an account is downloading mail body yet
+00465   AccountTaskMap_Type::Iterator it;   //iterator over the account map
+00466 
+00467   //set the appropriate item in AccountShowBodiesMap to FALSE
+00468   AccountShowBodiesMap[ account ] = false;
+00469 
+00470   //iterate over the account map to check, whether all accounts
+00471   //are ready
+00472   for ( it = AccountShowBodiesMap.begin(); it != AccountShowBodiesMap.end(); ++it )
+00473   {
+00474     if( *it == true )
+00475       accountDownloading = true;
+00476   }
+00477 
+00478   //emit sigShowBodiesReady if all accounts are ready
+00479   //and assume all windows to show the mails are closed
+00480   if( !accountDownloading )
+00481   {
+00482     emit sigShowBodiesReady();
+00483     ctrOpenMessageWindows = 0;
+00484   }
+00485 }
+00486 
+00487 void ConfigList::setAllowHTML( bool allowHTML )
+00488 {
+00489   m_bAllowHTML = allowHTML;
+00490 }
+00491 
+00492 bool ConfigList::allowHTML( ) const
+00493 {
+00494   return m_bAllowHTML;
+00495 }
+00496 
+00497 void ConfigList::slotMessageWindowOpened( )
+00498 {
+00499   //increment the window counter
+00500   ctrOpenMessageWindows++;
+00501 
+00502   //if the counter was incremented from zero
+00503   //(the first window was opened), emit the
+00504   //signal
+00505   if( ctrOpenMessageWindows == 1 )
+00506     emit sigMessageWindowOpened();
+00507 }
+00508 
+00509 void ConfigList::slotMessageWindowClosed( )
+00510 {
+00511   //decrement the window counter
+00512   ctrOpenMessageWindows--;
+00513   if( ctrOpenMessageWindows < 0 )
+00514     ctrOpenMessageWindows = 0;
+00515 
+00516   //if counter is zero (all windows was closed),
+00517   //emit signal
+00518   if( ctrOpenMessageWindows == 0 )
+00519     emit sigAllMessageWindowsClosed();
+00520 }
+00521 
+00522 void ConfigList::refreshMailLists( )
+00523 {
+00524   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00525   ConfigElem* account;                        //account to process
+00526 
+00527   //return, if no accounts available
+00528   if( count() == 0 )
+00529   {
+00530     emit sigRefreshReady();
+00531     return;
+00532   }
+00533 
+00534   //clear the map, which contains the names of the accounts,
+00535   //which have gotten an order to show mails
+00536   AccountRefreshMap.clear();
+00537 
+00538   //refresh connects
+00539   connectAccounts();
+00540 
+00541   //inserts an item for every account which will get an order to refresh
+00542   //its mail list. The key is the account name and the data is TRUE.
+00543   //it is important to do this in a seperate iteration because this avoids
+00544   //race conditions
+00545   while( ( account = it.current() ) != NULL )
+00546   {
+00547     //insert item
+00548     AccountRefreshMap.insert( account->getAccountName(), true );
+00549 
+00550     //get next account
+00551     ++it;
+00552   }
+00553 
+00554   //order all accounts to refresh their mail lists
+00555   it.toFirst();
+00556   while( ( account = it.current() ) != NULL )
+00557   {
+00558     account->refreshMailList();
+00559 
+00560     //get next account
+00561     ++it;
+00562   }
+00563 
+00564 }
+00565 
+00566 void ConfigList::slotCheckRefreshState( QString account )
+00567 {
+00568   bool accountRefreshing = false;    //set to TRUE if an account is still refreshing
+00569   AccountTaskMap_Type::Iterator it;   //iterator over the account map
+00570 
+00571   //set the appropriate item in AccountRefreshMap to FALSE
+00572   AccountRefreshMap[ account ] = false;
+00573 
+00574   //iterate over the account map to check whether all accounts
+00575   //are ready
+00576   for ( it = AccountRefreshMap.begin(); it != AccountRefreshMap.end(); ++it )
+00577   {
+00578     if( *it == true )
+00579       accountRefreshing = true;
+00580   }
+00581 
+00582   //emit sigRefreshReady if all accounts are ready
+00583   if( !accountRefreshing )
+00584   {
+00585     emit sigRefreshReady();
+00586   }
+00587 
+00588 }
+00589 
+00590 int ConfigList::getNumberNewMails( )
+00591 {
+00592   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00593   ConfigElem* account;                        //account to process
+00594   int number = 0;                             //number of new mails
+00595 
+00596   //iterate over all accounts and sum up the number of new mails
+00597   while( ( account = it.current() ) != NULL )
+00598   {
+00599    number += account->getNumberNewMails();
+00600 
+00601     //get next account
+00602     ++it;
+00603   }
+00604 
+00605   return number;
+00606 }
+00607 
+00608 int ConfigList::getNumberMails( )
+00609 {
+00610   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00611   ConfigElem* account;                        //account to process
+00612   int number = 0;                             //number of mails
+00613 
+00614   //iterate over all accounts and sum up the number of mails
+00615   while( ( account = it.current() ) != NULL )
+00616   {
+00617     number += account->getNumberMails();
+00618 
+00619     //get next account
+00620     ++it;
+00621   }
+00622 
+00623   return number;
+00624 }
+00625 
+00626 long ConfigList::getTotalSize( )
+00627 {
+00628   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00629   ConfigElem* account;                        //account to process
+00630   long size = 0;                               //total size of all mails
+00631 
+00632   //iterate over all accounts and sum up the size of all mails
+00633   while( ( account = it.current() ) != NULL )
+00634   {
+00635     size += account->getTotalSize();
+00636 
+00637     //get next account
+00638     ++it;
+00639   }
+00640 
+00641   return size;
+00642 }
+00643 
+00644 void ConfigList::fillMailListView( KshowmailView * view )
+00645 {
+00646   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00647   ConfigElem* account;                        //account to process
+00648 
+00649   //iterate over all accounts and order the active accounts to fill their mails
+00650   //into the list view
+00651   while( ( account = it.current() ) != NULL )
+00652   {
+00653     if( account->isActive() )
+00654       account->fillMailListView( view );
+00655 
+00656     //get next account
+00657     ++it;
+00658   }
+00659 
+00660 }
+00661 
+00662 bool ConfigList::showMainWindowForNewMails( )
+00663 {
+00664   return m_bShowMainWindow;
+00665 }
+00666 
+00667 bool ConfigList::showAlertMessageForNewMails( )
+00668 {
+00669   return m_bShowMessage;
+00670 }
+00671 
+00672 bool ConfigList::quitNoNewMails( )
+00673 {
+00674   return m_bTerminate;
+00675 }
+00676 
+00677 bool ConfigList::minimizeMainWindowNoNewMails( )
+00678 {
+00679   return m_bMinimize;
+00680 }
+00681 
+00682 int ConfigList::getInitTime( )
+00683 {
+00684   return m_nInitTimer;
+00685 }
+00686 
+00687 void ConfigList::setInitTime( int time )
+00688 {
+00689   if( time >= 0 )
+00690     m_nInitTimer = time;
+00691   else
+00692     m_nInitTimer = 0;
+00693 }
+00694 
+00695 bool ConfigList::hasInitTime( )
+00696 {
+00697   return m_nInitTimer > 0;
+00698 }
+00699 
+00700 void ConfigList::refreshAccountList( )
+00701 {
+00702   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00703   ConfigElem* account;                        //account to process
+00704 
+00705   //iterate over all accounts and order the account to refresh its
+00706   //account list view item
+00707   while( ( account = it.current() ) != NULL )
+00708   {
+00709     account->refreshAccountListItem();
+00710 
+00711     //get next account
+00712     ++it;
+00713   }
+00714 
+00715 }
+00716 
+00717 void ConfigList::killPOP3Jobs( )
+00718 {
+00719   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00720   ConfigElem* account;                        //account to process
+00721 
+00722   //iterate over all accounts and order the account to kill
+00723   //a running pop3 job
+00724   while( ( account = it.current() ) != NULL )
+00725   {
+00726     account->killPOP3Job();
+00727 
+00728     //get next account
+00729     ++it;
+00730   }
+00731 }
+00732 
+00733 void ConfigList::showSelectedHeaders( )
+00734 {
+00735   QPtrListIterator<ConfigElem> it( *this );   //to iterate over all accounts
+00736   ConfigElem* account;                        //account to process
+00737   int showNextHeader = ConfigElem::continueShowHeaders; //return value of ConfigElem::showSelectedHeaders
+00738 
+00739   //iterate over all accounts and order the account to show
+00740   //the headers of all selected mails.
+00741   while( ( account = it.current() ) != NULL && showNextHeader == ConfigElem::continueShowHeaders )
+00742   {
+00743     if( account->hasSelectedMails() )
+00744       showNextHeader = account->showSelectedHeaders();
+00745 
+00746     //get next account
+00747     ++it;
+00748   }
+00749 }
+00750 
+00751 void ConfigList::refreshSetup( KListView* view )
+00752 {
+00753   //get application config object (kshowmailrc)
+00754   config = KApplication::kApplication()->config();
+00755 
+00756   //read actions group
+00757   config->setGroup( CONFIG_GROUP_ACTIONS );
+00758 
+00759   m_bShowMessage = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW, DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW );
+00760   m_bShowMainWindow = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_MAINWINDOW, DEFAULT_ACTION_NEW_MAIL_MAINWINDOW );
+00761   m_bBeep = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_BEEP, DEFAULT_ACTION_NEW_MAIL_BEEP );
+00762   m_bSound = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_SOUND, DEFAULT_ACTION_NEW_MAIL_SOUND );
+00763   m_strSoundFile = config->readEntry( CONFIG_ENTRY_NEW_MAIL_SOUNDPATH );
+00764   m_bCommand = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_COMMAND, DEFAULT_ACTION_NEW_MAIL_COMMAND );
+00765   m_strCommandPath = config->readEntry( CONFIG_ENTRY_NEW_MAIL_COMMANDPATH );
+00766   m_bMinimize = config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE, DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE );
+00767   m_bTerminate = config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE, DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE );
+00768 
+00769   //read general group
+00770   config->setGroup( CONFIG_GROUP_GENERAL );
+00771   m_bConfirmClose = config->readBoolEntry( CONFIG_ENTRY_CONFIRM_CLOSE, DEFAULT_CONFIRM_CLOSE );
+00772   m_bConfirmDelete = config->readBoolEntry( CONFIG_ENTRY_CONFIRM_DELETE, DEFAULT_CONFIRM_DELETE );
+00773   m_bStartMinimized = config->readBoolEntry( CONFIG_ENTRY_START_MINIMIZED, DEFAULT_START_MINIMIZED );
+00774   m_bCloseMinimizes = config->readBoolEntry( CONFIG_ENTRY_CLOSE_TO_TRAY, DEFAULT_CLOSE_TO_TRAY );
+00775   m_bMinimizeToTray = config->readBoolEntry( CONFIG_ENTRY_MINIMIZE_TO_TRAY, DEFAULT_MINIMIZE_TO_TRAY );
+00776   m_bShowConnectionErrors = config->readBoolEntry( CONFIG_ENTRY_SHOW_CONNECTION_ERRORS, DEFAULT_SHOW_CONNECTION_ERRORS );
+00777   m_bKeepNew = config->readBoolEntry( CONFIG_ENTRY_KEEP_NEW, DEFAULT_KEEP_NEW );
+00778 
+00779   m_nInitTimer = config->readNumEntry( CONFIG_ENTRY_INITIAL_TIME, DEFAULT_INITIAL_TIME );
+00780   m_nIntervalTimer = config->readNumEntry( CONFIG_ENTRY_INTERVAL_TIME, DEFAULT_INTERVAL_TIME);
+00781   m_nPop3Timer = config->readNumEntry( CONFIG_ENTRY_TIMEOUT_TIME, DEFAULT_TIMEOUT_TIME );
+00782 
+00783   //read display group
+00784   config->setGroup( CONFIG_GROUP_VIEW );
+00785   m_bAllowHTML = config->readBoolEntry( CONFIG_ENTRY_VIEW_USE_HTML, DEFAULT_VIEW_USE_HTML );
+00786 
+00787   //read account configuration and setup accounts
+00788   //---------------------------------------------
+00789 
+00790   //get account names from the config file
+00791   config->setGroup( CONFIG_GROUP_ACCOUNTS );
+00792   QStringList accounts = config->readListEntry( CONFIG_ENTRY_ACCOUNTS_LIST, QStringList() );
+00793 
+00794   //remove deleted accounts from the account list
+00795   //accounts are deleted, if the are in ConfigList yet, but not in the list of the config file (accounts)
+00796   ConfigElem* accountDel = NULL;               //current processed account
+00797   QPtrListIterator<ConfigElem> iter( *this ); //iterator for the account list (ConfigList)
+00798 
+00799     //iterate over all accounts (ConfigList)
+00800   while( ( accountDel = iter.current() ) != NULL )
+00801   {
+00802     //increment iterator to get next account
+00803     ++iter;
+00804 
+00805     //search for the current account in the account list of the config file
+00806     QStringList::Iterator foundAccount = accounts.find( accountDel->getAccountName() );
+00807 
+00808     //remove account from ConfigList, if it is not in the list of the config file
+00809     if( foundAccount == accounts.end() )
+00810       remove( accountDel );
+00811   }
+00812 
+00813   //add or edit accounts
+00814   ConfigElem* acc;
+00815     //iterate over all items of the account list of the config file
+00816   for( QStringList::Iterator it = accounts.begin(); it != accounts.end(); ++it )
+00817   {
+00818     //create a new account, if it is not in the list yet (ConfigList)
+00819     //or get the account
+00820     if( !hasAccount( *it ) )
+00821     {
+00822       //create new account
+00823       acc = new ConfigElem( this, *it );
+00824       inSort( acc );
+00825 
+00826       //the pointer list inserts a copy of the new account object
+00827       //we have to delete the original
+00828       delete acc;
+00829     }
+00830 
+00831     //get account from ConfigList
+00832     acc = getAccount( *it );
+00833 
+00834     //get the setup of the account from the config file and setup the account
+00835     config->setGroup( *it );
+00836 
+00837     acc->setHost( config->readEntry( CONFIG_ENTRY_ACCOUNT_SERVER, DEFAULT_ACCOUNT_SERVER ) );
+00838     acc->setProtocol( config->readEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, DEFAULT_ACCOUNT_PROTOCOL ).lower() );
+00839     acc->setPort( config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PORT, DEFAULT_ACCOUNT_PORT_POP3 ) );
+00840     acc->setUser( config->readEntry( CONFIG_ENTRY_ACCOUNT_USER, DEFAULT_ACCOUNT_USER ) );
+00841     acc->setActive( config->readBoolEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, DEFAULT_ACCOUNT_ACTIVE ) );
+00842     int StorageType = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, DEFAULT_ACCOUNT_PASSWORD_STORAGE );
+00843 
+00844     switch( StorageType )
+00845     {
+00846       case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE:
+00847         acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE );
+00848         acc->setPassword( QString::null );
+00849         break;
+00850 
+00851       case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE:
+00852         acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE );
+00853         acc->setPassword( Encryption::decrypt( config->readEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, DEFAULT_ACCOUNT_PASSWORD ) ) );
+00854         break;
+00855 
+00856       case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET:
+00857         acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET );
+00858         acc->setPassword( KWalletAccess::getPassword( *it ) );
+00859         break;
+00860 
+00861       default:
+00862         acc->setPasswordStorage( DEFAULT_ACCOUNT_PASSWORD_STORAGE );
+00863         acc->setPassword( QString::null );
+00864     }
+00865 
+00866   }
+00867 
+00868   //connect the signals of the accounts with ConfigList
+00869   connectAccounts();
+00870 
+00871   //refresh account list view
+00872   setList( view );
+00873 }
+00874 
+00875 void ConfigList::executeNewMailCommand( )
+00876 {
+00877   if( m_bCommand )
+00878   {
+00879     if( m_strCommandPath != QString::null && m_strCommandPath != "" )
+00880     {
+00881       KShellProcess proc;    //process handler to execute the binary
+00882 
+00883       proc << m_strCommandPath;
+00884 
+00885       proc.start( KShellProcess::DontCare );
+00886     }
+00887   }
+00888 }
+00889 
+00890 bool ConfigList::keepNew( )
+00891 {
+00892   return m_bKeepNew;
+00893 }
+00894 
+00895 bool ConfigList::confirmClose( ) const
+00896 {
+00897   return m_bConfirmClose;
+00898 }
+00899 
+00900 bool ConfigList::startMinimized( ) const
+00901 {
+00902   return m_bStartMinimized;
+00903 }
+00904 
+00905 bool ConfigList::closeToTray( ) const
+00906 {
+00907   return m_bCloseMinimizes;
+00908 }
+00909 
+00910 bool ConfigList::minimizesToTray( ) const
+00911 {
+00912   return m_bMinimizeToTray;
+00913 }
+00914 
+00915 bool ConfigList::showConnectionErrors( ) const
+00916 {
+00917   return m_bShowConnectionErrors;
+00918 }
+00919 
+00920 bool ConfigList::hasAccount( const QString & name ) const
+00921 {
+00922   bool found = false;                       //TRUE if we have found the given account
+00923   ConfigElem* account;                      //account from which we want to get its name
+00924   QPtrListIterator<ConfigElem> it( *this ); //iterator for the account list
+00925 
+00926   //iterate over all accounts
+00927   while( ( account = it.current() ) != NULL && !found )
+00928   {
+00929     //increment iterator to next account
+00930     ++it;
+00931 
+00932     //if current account is the searched one set found to TRUE
+00933     if( account->getAccountName() == name )
+00934       found = true;
+00935   }
+00936 
+00937   return found;
+00938 }
+00939 
+00940 ConfigElem * ConfigList::getAccount( const QString & name ) const
+00941 {
+00942   bool found = false;                       //TRUE if we have found the given account
+00943   ConfigElem* account = NULL;               //account from which we want to get its name
+00944   QPtrListIterator<ConfigElem> it( *this ); //iterator for the account list
+00945   ConfigElem* returnValue = NULL;
+00946 
+00947   //iterate over all accounts
+00948   while( ( account = it.current() ) != NULL && !found )
+00949   {
+00950     //increment iterator to next account
+00951     ++it;
+00952 
+00953     //if current account is the searched one set found to TRUE
+00954     if( account->getAccountName() == name )
+00955     {
+00956       found = true;
+00957       returnValue = account;
+00958     }
+00959   }
+00960 
+00961   return returnValue;
+00962 }
+00963 
+00964 void ConfigList::printSetup( )
+00965 {
+00966   ConfigElem* account = NULL;               //account from which we want to print the setup
+00967   QPtrListIterator<ConfigElem> it( *this ); //iterator for the account list
+00968 
+00969   //iterate over all accounts
+00970   while( ( account = it.current() ) != NULL )
+00971   {
+00972     //increment iterator to next account
+00973     ++it;
+00974 
+00975     //print setup
+00976     account->printSetup();
+00977   }
+00978 }
+00979 
+00980 void ConfigList::readStoredMails( )
+00981 {
+00982   //open file
+00983   QString MailFileName = locateLocal( "config", MAIL_FILE );
+00984   QFile file( MailFileName );
+00985   bool fileOpen = file.open( IO_ReadOnly );
+00986 
+00987   //return, if the file could not be opened
+00988   if( !fileOpen )
+00989   {
+00990     kdError() << "ConfigList::readStoredMails: File " << MailFileName << " could not be opened." << endl;
+00991     return;
+00992   }
+00993 
+00994   //create DOM document with the content read from the file
+00995   QDomDocument doc( MAIL_FILE_DOCTYPE );
+00996   QString* errorMsg = new QString();
+00997 
+00998   bool success = doc.setContent( &file );
+00999   if( !success )
+01000   {
+01001     kdError() << "ConfigList::readStoredMails: Invalid content in " << MAIL_FILE << ". " << *errorMsg << endl;
+01002   }
+01003 
+01004   //get the root element
+01005   QDomElement accounts = doc.namedItem ( ROOT_ELEMENT ).toElement();
+01006 
+01007   //get the first account element
+01008   QDomNode accNode = accounts.firstChild();
+01009 
+01010   //get all account elements
+01011   while( !accNode.isNull() )
+01012   {
+01013     //convert account node to DOM element
+01014     QDomElement accElem = accNode.toElement();
+01015 
+01016     //get the account name
+01017     QString accName = accElem.attribute( ATTRIBUTE_ACCOUNT_NAME );
+01018 
+01019     //get the proper account object
+01020     ConfigElem* account = getAccount( accName );
+01021 
+01022     //order the account to read its stored mails
+01023     account->readStoredMails( accElem );
+01024 
+01025     //get next account node
+01026     accNode = accNode.nextSibling();
+01027   }
+01028 
+01029   //close file
+01030   file.close();
+01031 }
+01032 
+01033 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/configlist_8h-source.html b/doc/html/configlist_8h-source.html new file mode 100644 index 0000000..56a1f27 --- /dev/null +++ b/doc/html/configlist_8h-source.html @@ -0,0 +1,283 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configlist.h Source File + + + + + + + +

configlist.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           configlist.h  -  description
+00003                              -------------------
+00004     begin                : Tue May 9 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006                            (C) 2007 by Ulrich Weigelt
+00007     email                : eggert.ehmke@berlin.de
+00008                            ulrich.weigelt@gmx.de
+00009 
+00010     26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00011  ***************************************************************************/
+00012 
+00013 /***************************************************************************
+00014  *                                                                         *
+00015  *   This program is free software; you can redistribute it and/or modify  *
+00016  *   it under the terms of the GNU General Public License as published by  *
+00017  *   the Free Software Foundation; either version 2 of the License, or     *
+00018  *   (at your option) any later version.                                   *
+00019  *                                                                         *
+00020  ***************************************************************************/
+00021 
+00022 #ifndef CONFIGLIST_H
+00023 #define CONFIGLIST_H
+00024 
+00025 //Qt header
+00026 #include <qptrlist.h>
+00027 #include <qlistview.h>
+00028 #include <qobject.h>
+00029 
+00030 //KDE headers
+00031 #include <kcombobox.h>
+00032 #include <kprocess.h>
+00033 #include <kdebug.h>
+00034 
+00035 //KShowmail headers
+00036 #include "configelem.h"
+00037 #include "constants.h"
+00038 #include "kshowmailview.h"
+00039 #include "types.h"
+00040 #include "encryption.h"
+00041 #include "kwalletaccess.h"
+00042 #include "filteritem.h"
+00043 #include "headerfilter.h"
+00044 #include "filterlog.h"
+00045 
+00046 using namespace Constants;
+00047 using namespace Types;
+00048 using namespace Encryption;
+00049 
+00050 class ConfigElem;
+00051 class KshowmailView;
+00052 
+00059 class ConfigList : public QObject, public QPtrList<ConfigElem>
+00060 {
+00061 
+00062   Q_OBJECT
+00063 
+00064   public:
+00065 
+00069     ConfigList ();
+00070 
+00074     virtual ~ConfigList () {};
+00075 
+00081     void refreshSetup( KListView* view );
+00082 
+00087     int getRefreshTimeInterval() const;
+00088 
+00093     void setRefreshTimeInterval( unsigned int interval );
+00094 
+00099     bool AutoRefreshOn() const;
+00100 
+00105     void setConfirmDeletion( bool confirm );
+00106 
+00112     bool confirmDeletion();
+00113 
+00119     bool confirmClose() const;
+00120 
+00126     bool startMinimized() const;
+00127 
+00133     bool closeToTray() const;
+00134 
+00140     bool minimizesToTray() const;
+00141 
+00147     bool showConnectionErrors() const;
+00148 
+00154     void setAllowHTML( bool allowHTML );
+00155 
+00162     bool allowHTML() const;
+00163 
+00169     bool hasActiveAccounts();
+00170 
+00175     uint getTimeoutTime() const;
+00176 
+00183     void setTimeoutTime( uint time );
+00184 
+00191     ConfigElem* getSelectedAccount();
+00192 
+00198     void deleteSelectedMails();
+00199 
+00209     void connectAccounts();
+00210 
+00215     QStringList getSelectedSubjects() const;
+00216 
+00223     bool hasSelectedMails();
+00224 
+00231     void showSelectedMails();
+00232 
+00240     void refreshMailLists( FilterLog* log = NULL );
+00241 
+00246     int getNumberNewMails();
+00247 
+00252     int getNumberMails();
+00253 
+00258     long getTotalSize();
+00259 
+00265     void fillMailListView( KshowmailView* view );
+00266 
+00273     bool showMainWindowForNewMails();
+00274 
+00281     bool showAlertMessageForNewMails();
+00282 
+00289     bool quitNoNewMails();
+00290 
+00297     bool minimizeMainWindowNoNewMails();
+00298 
+00303     int getInitTime();
+00304 
+00309     void setInitTime( int time );
+00310 
+00316     bool hasInitTime();
+00317 
+00321     void refreshAccountList();
+00322 
+00326     void killPOP3Jobs();
+00327 
+00331     void showSelectedHeaders();
+00332 
+00337     void executeNewMailCommand();
+00338 
+00344     bool keepNew();
+00345 
+00349     void printSetup();
+00350 
+00356     void saveOptions();
+00357 
+00363     void readStoredMails();
+00364 
+00369      FilterAction_Type getSpamAction();
+00370 
+00375      QString getSpamMailbox();
+00376 
+00377 
+00378         bool setItem (const char* item);
+00379         void setList (QListView* list);
+00380         void beep ();
+00381         void playSound ();
+00382         void playSound (const char* file);
+00383 
+00384 
+00385   private:
+00386 
+00390     KConfig* config;
+00391 
+00395     int m_nIntervalTimer;
+00396 
+00400     uint m_nPop3Timer;
+00401 
+00413     AccountTaskMap_Type AccountDeletionMap;
+00414 
+00426     AccountTaskMap_Type AccountShowBodiesMap;
+00427 
+00439     AccountTaskMap_Type AccountRefreshMap;
+00440 
+00445     bool m_bConfirmDelete;
+00446 
+00453     bool m_bAllowHTML;
+00454 
+00461     int ctrOpenMessageWindows;
+00462 
+00468     int m_nInitTimer;
+00469 
+00473     bool m_bShowMessage;
+00474 
+00478     bool m_bShowMainWindow;
+00479 
+00483     bool m_bBeep;
+00484 
+00488     bool m_bSound;
+00489 
+00493     QString m_strSoundFile;
+00494 
+00498     bool m_bCommand;
+00499 
+00503     QString m_strCommandPath;
+00504 
+00508     bool m_bTerminate;
+00509 
+00513     bool m_bMinimize;
+00514 
+00518     bool m_bShowConnectionErrors;
+00519 
+00523     bool m_bConfirmClose;
+00524 
+00528     bool m_bStartMinimized;
+00529 
+00533     bool m_bCloseMinimizes;
+00534 
+00538     bool m_bMinimizeToTray;
+00539 
+00543     bool m_bKeepNew;
+00544 
+00548      QString spamMailbox;
+00549 
+00553       FilterAction_Type spamAction;
+00554 
+00555 
+00556   protected:
+00557 
+00565     virtual QCollection::Item newItem( QCollection::Item item );
+00566 
+00575     virtual int compareItems( QCollection::Item item1, QCollection::Item item2 );
+00576 
+00583     bool hasAccount( const QString& name ) const;
+00584 
+00590     ConfigElem* getAccount( const QString& name ) const;
+00591 
+00592   protected slots:
+00593 
+00598     void slotAccountConfigChanged();
+00599 
+00609     void slotCheckDeletionState( QString account );
+00610 
+00620     void slotCheckShowBodiesState( QString account );
+00621 
+00631     void slotMessageWindowOpened();
+00632 
+00642     void slotMessageWindowClosed();
+00643 
+00653     void slotCheckRefreshState( QString account );
+00654 
+00655   signals:
+00656 
+00661     void sigConfigChanged();
+00662 
+00666     void sigDeleteReady();
+00667 
+00671     void sigShowBodiesReady();
+00672 
+00678     void sigMessageWindowOpened();
+00679 
+00685     void sigAllMessageWindowsClosed();
+00686 
+00690     void sigRefreshReady();
+00691 };
+00692 
+00693 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/constants_8h-source.html b/doc/html/constants_8h-source.html new file mode 100644 index 0000000..f7b174c --- /dev/null +++ b/doc/html/constants_8h-source.html @@ -0,0 +1,367 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/constants.h Source File + + + + + + + +

constants.h

Go to the documentation of this file.
00001 //
+00002 // C++ Interface: constants
+00003 //
+00004 // Description:
+00005 // Containts all constants.
+00006 //
+00007 //
+00008 // Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2007
+00009 //
+00010 // Copyright: See COPYING file that comes with this distribution
+00011 //
+00012 //
+00013 
+00014 #ifndef CONSTANTS_H
+00015 #define CONSTANTS_H
+00016 
+00020 namespace Constants
+00021 {
+00025   //option for show config dialog at start
+00026   #define CMDLINE_CONFIG        "configure"
+00027   #define CMDLINE_CONFIG_SHORT  "c"
+00028   //option for looking for new mails at start
+00029   #define CMDLINE_REFRESH       "refresh"
+00030   #define CMDLINE_REFRESH_SHORT "r"
+00031 
+00035   //general defaults
+00036   #define DEFAULT_CONFIRM_CLOSE           false
+00037   #define DEFAULT_CONFIRM_DELETE          true
+00038   #define DEFAULT_START_MINIMIZED         false
+00039   #define DEFAULT_CLOSE_TO_TRAY           true
+00040   #define DEFAULT_MINIMIZE_TO_TRAY        true
+00041   #define DEFAULT_SHOW_CONNECTION_ERRORS  true
+00042   #define DEFAULT_KEEP_NEW                false
+00043 
+00044   #define DEFAULT_INITIAL_TIME    0
+00045   #define DEFAULT_INTERVAL_TIME   0
+00046   #define MINIMUM_TIMEOUT_TIME    5
+00047   #define DEFAULT_TIMEOUT_TIME    30
+00048 
+00049   //default actions
+00050   #define DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW   true
+00051   #define DEFAULT_ACTION_NEW_MAIL_MAINWINDOW    false
+00052   #define DEFAULT_ACTION_NEW_MAIL_BEEP          false
+00053   #define DEFAULT_ACTION_NEW_MAIL_SOUND         false
+00054   #define DEFAULT_ACTION_NEW_MAIL_COMMAND       false
+00055   #define DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE   false
+00056   #define DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE  false
+00057 
+00058   //default display options
+00059   #define DEFAULT_DISPLAY_ACCOUNT_ACTIVE    true
+00060   #define DEFAULT_DISPLAY_ACCOUNT_ACCOUNT   true
+00061   #define DEFAULT_DISPLAY_ACCOUNT_SERVER    true
+00062   #define DEFAULT_DISPLAY_ACCOUNT_USER      true
+00063   #define DEFAULT_DISPLAY_ACCOUNT_MESSAGES  true
+00064   #define DEFAULT_DISPLAY_ACCOUNT_SIZE      true
+00065   #define DEFAULT_DISPLAY_MESSAGE_NUMBER    true
+00066   #define DEFAULT_DISPLAY_MESSAGE_ACCOUNT   true
+00067   #define DEFAULT_DISPLAY_MESSAGE_FROM      true
+00068   #define DEFAULT_DISPLAY_MESSAGE_TO        true
+00069   #define DEFAULT_DISPLAY_MESSAGE_SUBJECT   true
+00070   #define DEFAULT_DISPLAY_MESSAGE_DATE      true
+00071   #define DEFAULT_DISPLAY_MESSAGE_SIZE      true
+00072   #define DEFAULT_DISPLAY_MESSAGE_CONTENT   true
+00073   #define DEFAULT_DISPLAY_MESSAGE_STATE     true
+00074 
+00075   //default view options
+00076   #define DEFAULT_VIEW_USE_HTML      false
+00077 
+00078   //default column widthes
+00079   #define DEFAULT_WIDTH_ACCOUNT_ACTIVE    50
+00080   #define DEFAULT_WIDTH_ACCOUNT_ACCOUNT   100
+00081   #define DEFAULT_WIDTH_ACCOUNT_SERVER    100
+00082   #define DEFAULT_WIDTH_ACCOUNT_USER      100
+00083   #define DEFAULT_WIDTH_ACCOUNT_MESSAGES  80
+00084   #define DEFAULT_WIDTH_ACCOUNT_SIZE      80
+00085   #define DEFAULT_WIDTH_MESSAGE_NUMBER    50
+00086   #define DEFAULT_WIDTH_MESSAGE_ACCOUNT   100
+00087   #define DEFAULT_WIDTH_MESSAGE_FROM      200
+00088   #define DEFAULT_WIDTH_MESSAGE_TO        200
+00089   #define DEFAULT_WIDTH_MESSAGE_SUBJECT   350
+00090   #define DEFAULT_WIDTH_MESSAGE_DATE      100
+00091   #define DEFAULT_WIDTH_MESSAGE_SIZE      80
+00092   #define DEFAULT_WIDTH_MESSAGE_CONTENT   80
+00093   #define DEFAULT_WIDTH_MESSAGE_STATE     50
+00094 
+00095   //account defaults
+00096   #define DEFAULT_ACCOUNT_NAME ""
+00097   #define DEFAULT_ACCOUNT_SERVER ""
+00098   #define DEFAULT_ACCOUNT_PROTOCOL "POP3"
+00099   #define DEFAULT_ACCOUNT_PORT_POP3 110
+00100   #define DEFAULT_ACCOUNT_PORT_POP3SSL 995
+00101   #define DEFAULT_ACCOUNT_USER ""
+00102   #define DEFAULT_ACCOUNT_PASSWORD ""
+00103   #define DEFAULT_ACCOUNT_PASSWORD_STORAGE  1
+00104     //1: don't save, 2: save in file, 3: use KWallet
+00105   #define DEFAULT_ACCOUNT_ACTIVE true
+00106   #define DEFAULT_ACCOUNT_SECTRANSFER 1
+00107     //1: no secure transfer, 2: SSL, 3: TLS
+00108 
+00109   //filter defaults
+00110   #define DEFAULT_FILTER_ACTIVE false
+00111   #define DEFAULT_FILTER_OTHERS_ACTION  1
+00112     //1: Pass, 2: Delete, 3: Mark, 4: Move to Mailbox, 5: Spamcheck, 6: Ignore
+00113   #define DEFAULT_FILTER_BLACKLIST_ACTION 1
+00114     //1: Delete, 2: Mark
+00115   #define DEFAULT_FILTER_NAME "New Filter"
+00116   #define DEFAULT_FILTER_CRITERIA_LINKAGE 1
+00117     //1: Match all (AND); 2: Match any (OR)
+00118   #define DEFAULT_FILTER_CRITERIA_SOURCE 1
+00119     //1: From, 2: To, 3: Size (Bytes), 4: Subject, 5: Header, 6: Account
+00120   #define DEFAULT_FILTER_CRITERIA_COND_TEXT 1
+00121     //1: contains, 2: doesn't contains, 3: equals, 4: doesn't equal, 5: matches regular expression, 6: doesn't match regular expression
+00122   #define DEFAULT_FILTER_CRITERIA_COND_NUM 3
+00123     //1: is equal to, 2: is not equal to, 3: is greater than, 4: is greater than or equal to, 5: is less than, 6: is less than or equal to
+00124   #define DEFAULT_FILTER_CRITERIA_SIZE 20000
+00125   #define DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE false
+00126   #define DEFAULT_FILTER_ACTION  1
+00127     //1: Pass, 2: Delete, 3: Mark, 4: Move to Mailbox, 5: Spamcheck, 6: Ignore
+00128   #define DEFAULT_FILTER_ACTION_MOVE_MAILBOX ""
+00129 
+00130   //Spam check defaults
+00131   #define DEFAULT_SPAMCHECK_ACTION 3
+00132     //2: Delete, 3: Mark, 4: Move to Mailbox
+00133   #define DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ""
+00134 
+00135 
+00136   //Log Defaults
+00137   #define DEFAULT_LOG_LOG_DELETED_MAILS       true
+00138   #define DEFAULT_LOG_LOG_MOVED_MAILS         true
+00139     //the log entires will be deleted after some days (constant value is "days") or at app exit (value is "exit")
+00140   #define DEFAULT_LOG_REMOVE_DELETED_MAILS    "days"
+00141   #define DEFAULT_LOG_REMOVE_MOVED_MAILS      "exit"
+00142     //number of days the entries will be stored
+00143   #define DEFAULT_LOG_HOLDDAYS_DELETED_MAILS  7
+00144   #define DEFAULT_LOG_HOLDDAYS_MOVED_MAILS    7
+00145 
+00149   #define MAIL_FILE               "kshowmail.xml"
+00150   #define MAIL_FILE_DOCTYPE       "KShowmail"
+00151   #define ROOT_ELEMENT            "accounts"
+00152   #define ACCOUNT_ELEMENT         "account"
+00153   #define ATTRIBUTE_ACCOUNT_NAME  "account"
+00154   #define ATTRIBUTE_MAIL_UID      "uidl"
+00155   #define ATTRIBUTE_MAIL_SIZE     "size"
+00156   #define ATTRIBUTE_MAIL_NUMBER   "number"
+00157   #define ITEM_MAIL_HEADER        "header"
+00158   #define ITEM_MESSAGE            "message"
+00159 
+00163   #define LOG_FILE          "kshowmaillog.xml"
+00164   #define LOG_DOCTYPE       "KShowmailLog"
+00165   #define LOG_ROOT_ELEMENT  "DeletedMails"
+00166   #define LOG_ENTRY_ELEMENT "LogEntry"
+00167   #define LOG_ENTRY_ATTRIBUTE_DATETIME "DateTime"
+00168   #define LOG_ENTRY_ATTRIBUTE_SENDER "Sender"
+00169   #define LOG_ENTRY_ATTRIBUTE_ACCOUNT "Account"
+00170   #define LOG_ENTRY_ATTRIBUTE_SUBJECT "Subject"
+00171 
+00175   //Size of the view, which shows the mail text
+00176   #define WIDTH_VIEW_MAILBODY         500
+00177   #define HEIGHT_VIEW_MAILBODY        400
+00178 
+00179   //Size of the view, which shows the mail header
+00180   #define WIDTH_VIEW_MAILHEADER   500
+00181   #define HEIGHT_VIEW_MAILHEADER  400
+00182 
+00183   //Size of the text comparative value line of the filter criteria widget
+00184   #define WIDTH_FILTER_TEXT_VALUE_LINE  300
+00185 
+00189   #define CONFIG_GROUP_GENERAL                  "General"
+00190   #define CONFIG_ENTRY_CONFIRM_CLOSE            "confirmClose"
+00191   #define CONFIG_ENTRY_CONFIRM_DELETE           "confirmDelete"
+00192   #define CONFIG_ENTRY_START_MINIMIZED          "startMinimized"
+00193   #define CONFIG_ENTRY_CLOSE_TO_TRAY            "closeToTray"
+00194   #define CONFIG_ENTRY_MINIMIZE_TO_TRAY         "minimizeToTray"
+00195   #define CONFIG_ENTRY_SHOW_CONNECTION_ERRORS   "showConnectionErrors"
+00196   #define CONFIG_ENTRY_KEEP_NEW                 "keepMailsNew"
+00197   #define CONFIG_ENTRY_INITIAL_TIME             "InitialTime"
+00198   #define CONFIG_ENTRY_INTERVAL_TIME            "IntervalTime"
+00199   #define CONFIG_ENTRY_TIMEOUT_TIME             "TimeoutTime"
+00200 
+00201   #define CONFIG_GROUP_ACTIONS                "Actions"
+00202   #define CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW   "showAlertMessageIfNewMail"
+00203   #define CONFIG_ENTRY_NEW_MAIL_MAINWINDOW    "showMainWindowIfNewMail"
+00204   #define CONFIG_ENTRY_NEW_MAIL_BEEP          "beepIfNewMail"
+00205   #define CONFIG_ENTRY_NEW_MAIL_SOUND         "playSoundIfNewMail"
+00206   #define CONFIG_ENTRY_NEW_MAIL_SOUNDPATH     "PathToSoundFile"
+00207   #define CONFIG_ENTRY_NEW_MAIL_COMMAND       "executeCommandIfNewMail"
+00208   #define CONFIG_ENTRY_NEW_MAIL_COMMANDPATH   "Command"
+00209   #define CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE  "exitIfNoNewMails"
+00210   #define CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE   "minimizeMainWindowIfNoNewMails"
+00211 
+00212   #define CONFIG_GROUP_VIEW                "View"
+00213   #define CONFIG_ENTRY_VIEW_USE_HTML       "useHTML"
+00214 
+00215   #define CONFIG_GROUP_ACCOUNT_LIST               "LayoutAccountList"
+00216   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE     "showAccountListActiveColumn"
+00217   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT    "showAccountListAccountColumn"
+00218   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER     "showAccountListServerColumn"
+00219   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_USER       "showAccountListUserColumn"
+00220   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES   "showAccountListMessagesColumn"
+00221   #define CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE       "showAccountListSizeColumn"
+00222   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE   "oldWidthAccountListActiveColumn"
+00223   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT  "oldWidthAccountListAccountColumn"
+00224   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER   "oldWidthAccountListServerColumn"
+00225   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER     "oldWidthAccountListUserColumn"
+00226   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES "oldWidthAccountListMessagesColumn"
+00227   #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE     "oldWidthAccountListSizeColumn"
+00228 
+00229 
+00230   #define CONFIG_GROUP_MESSAGE_LIST               "LayoutMessageList"
+00231   #define CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER     "showMessageListNumberColumn"
+00232   #define CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT    "showMessageListAccountColumn"
+00233   #define CONFIG_ENTRY_DISPLAY_MESSAGE_FROM       "showMessageListFromColumn"
+00234   #define CONFIG_ENTRY_DISPLAY_MESSAGE_TO         "showMessageListToColumn"
+00235   #define CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT    "showMessageListSubjectColumn"
+00236   #define CONFIG_ENTRY_DISPLAY_MESSAGE_DATE       "showMessageListDateColumn"
+00237   #define CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE       "showMessageListSizeColumn"
+00238   #define CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT    "showMessageListContentColumn"
+00239   #define CONFIG_ENTRY_DISPLAY_MESSAGE_STATE      "showMessageListStateColumn"
+00240   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER   "oldWidthMessageListNumberColumn"
+00241   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT  "oldWidthMessageListAccountColumn"
+00242   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM     "oldWidthMessageListFromColumn"
+00243   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO       "oldWidthMessageListToColumn"
+00244   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT  "oldWidthMessageListSubjectColumn"
+00245   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE     "oldWidthMessageListDateColumn"
+00246   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE     "oldWidthMessageListSizeColumn"
+00247   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT  "oldWidthMessageListContentColumn"
+00248   #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE    "oldWidthMessageListStateColumn"
+00249 
+00250   #define CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE     1
+00251   #define CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE     2
+00252   #define CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET  3
+00253   #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE       1
+00254   #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL        2
+00255   #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS        3
+00256 
+00257   #define CONFIG_GROUP_ACCOUNTS      "Accounts"
+00258   #define CONFIG_ENTRY_ACCOUNTS_LIST "NamesList"
+00259 
+00260   #define CONFIG_ENTRY_ACCOUNT_NAME             "Name"
+00261   #define CONFIG_ENTRY_ACCOUNT_SERVER           "Server"
+00262   #define CONFIG_ENTRY_ACCOUNT_PROTOCOL         "Protocol"
+00263   #define CONFIG_ENTRY_ACCOUNT_PORT             "Port"
+00264   #define CONFIG_ENTRY_ACCOUNT_USER             "User"
+00265   #define CONFIG_ENTRY_ACCOUNT_PASSWORD         "Password"
+00266   #define CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE "PasswordStorage"
+00267   #define CONFIG_ENTRY_ACCOUNT_ACTIVE           "Active"
+00268   #define CONFIG_ENTRY_ACCOUNT_SECTRANSFER      "SecureTransfer"
+00269 
+00270 
+00271   //general filter
+00272   #define CONFIG_GROUP_FILTER "Filter"
+00273 
+00274   #define CONFIG_ENTRY_FILTER_ACTIVE  "Active"
+00275 
+00276   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS        1
+00277   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE      2
+00278   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK        3
+00279   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE        4
+00280   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK   5
+00281   #define CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE      6
+00282 
+00283   #define CONFIG_ENTRY_FILTER_OTHERS_ACTION   "ActionForOthers"
+00284   #define CONFIG_ENTRY_FILTER_OTHERS_MAILBOX  "MailboxForOthers"
+00285 
+00286   #define CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE  1
+00287   #define CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK    2
+00288 
+00289   #define CONFIG_ENTRY_FILTER_BLACKLIST_ACTION  "ActionBlacklist"
+00290   #define CONFIG_ENTRY_FILTER_BLACKLIST         "Blacklist"
+00291   #define CONFIG_ENTRY_FILTER_WHITELIST         "Whitelist"
+00292   #define CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS "NumberFilters"
+00293 
+00294   //single filter
+00295   #define CONFIG_ENTRY_FILTER_NAME "Name"
+00296   #define CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE "CriteriaLinkage"
+00297   #define CONFIG_ENTRY_FILTER_CRITERIA_NUMBER "CriteriaNumber"
+00298   #define CONFIG_ENTRY_FILTER_CRITERIA_SOURCE "CriteriaSource"
+00299   #define CONFIG_ENTRY_FILTER_CRITERIA_CONDITION "CriteriaCondition"
+00300   #define CONFIG_ENTRY_FILTER_CRITERIA_VALUE "CriteriaValue"
+00301   #define CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE "CriteriaCaseSensitive"
+00302   #define CONFIG_ENTRY_FILTER_ACTION "Action"
+00303   #define CONFIG_ENTRY_FILTER_MOVE_MAILBOX "Mailbox"
+00304 
+00305   #define CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL 1
+00306   #define CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY 2
+00307 
+00308   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM    1
+00309   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO      2
+00310   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE    3
+00311   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT 4
+00312   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER  5
+00313   #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT 6
+00314 
+00315   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS     1
+00316   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS 2
+00317   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS       3
+00318   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS   4
+00319   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR      5
+00320   #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR  6
+00321 
+00322   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL         1
+00323   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL     2
+00324   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER       3
+00325   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL 4
+00326   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS          5
+00327   #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL    6
+00328 
+00329   #define CONFIG_VALUE_FILTER_ACTION_PASS        1
+00330   #define CONFIG_VALUE_FILTER_ACTION_DELETE      2
+00331   #define CONFIG_VALUE_FILTER_ACTION_MARK        3
+00332   #define CONFIG_VALUE_FILTER_ACTION_MOVE        4
+00333   #define CONFIG_VALUE_FILTER_ACTION_SPAMCHECK   5
+00334   #define CONFIG_VALUE_FILTER_ACTION_IGNORE      6
+00335 
+00336   //Spamcheck
+00337   #define CONFIG_GROUP_SPAMCHECK "Spamcheck"
+00338 
+00339   #define CONFIG_ENTRY_SPAMCHECK_ACTION "Action"
+00340   #define CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX "Mailbox"
+00341 
+00342   #define CONFIG_VALUE_SPAMCHECK_ACTION_DELETE      2
+00343   #define CONFIG_VALUE_SPAMCHECK_ACTION_MARK        3
+00344   #define CONFIG_VALUE_SPAMCHECK_ACTION_MOVE        4
+00345 
+00346   //Log
+00347   #define CONFIG_GROUP_LOG                        "Log"
+00348   #define CONFIG_ENTRY_LOG_LOG_DELETED_MAILS      "LogDeletedMails"
+00349   #define CONFIG_ENTRY_LOG_LOG_MOVED_MAILS        "LogMovedMails"
+00350   #define CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS   "RemoveEventOfDeletedMails"
+00351   #define CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS     "RemoveEvendOfMovedMails"
+00352   #define CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS "HoldDaysOfDeletedMails"
+00353   #define CONFIG_ENTRY_LOG_HOLDDAYS_MOVED_MAILS   "HoldDaysOfMovedMails"
+00354 
+00355   #define CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT     "exit"
+00356   #define CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS  "days"
+00357 
+00358   //Misc
+00359   #define NAME_SPAMASSASSIN_DAEMON    "spamd"
+00360 }
+00361 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/decodeRFC2047_8cpp-source.html b/doc/html/decodeRFC2047_8cpp-source.html new file mode 100644 index 0000000..50d2f7b --- /dev/null +++ b/doc/html/decodeRFC2047_8cpp-source.html @@ -0,0 +1,204 @@ + + +kshowmail: kshowmail/decodeRFC2047.cpp Source File + + + + + + +

decodeRFC2047.cpp

00001 /***************************************************************************
+00002                           decodeRFC2047.cpp  -  description
+00003                              -------------------
+00004     begin                : Mon Jan 28 2002
+00005     copyright            : (C) 2002 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 
+00019 #include "decodeRFC2047.h"
+00020 
+00021 /*
+00022  * These functions have been adapted from the KMail program
+00023  */
+00024 
+00025 QCString decodeQuotedPrintable(const QCString& aStr)
+00026 {
+00027   QCString bStr = aStr;
+00028   if (aStr.isNull())
+00029     bStr = "";
+00030 
+00031   DwString dwsrc(bStr.data());
+00032   DwString dwdest;
+00033 
+00034   DwDecodeQuotedPrintable(dwsrc, dwdest);
+00035   return dwdest.c_str();
+00036 }
+00037 
+00038 QCString decodeBase64(const QCString& aStr)
+00039 {
+00040   QCString bStr = aStr;
+00041   if (aStr.isNull())
+00042     bStr = "";
+00043   while (bStr.length() < 16) bStr += "=";
+00044 
+00045   DwString dwsrc(bStr.data(), bStr.length());
+00046   DwString dwdest;
+00047   QCString result;
+00048 
+00049   DwDecodeBase64(dwsrc, dwdest);
+00050   result = dwdest.c_str();
+00051   return result;
+00052 }
+00053 
+00054 QTextCodec* codecForName(const QCString& _str)
+00055 {
+00056   if (_str.isEmpty()) return NULL;
+00057   if (_str.lower() == "shift_jis" || _str.lower() == "shift-jis")
+00058     return QTextCodec::codecForName("sjis");
+00059   return QTextCodec::codecForName(_str.lower().replace(
+00060     QRegExp("windows"), "cp") );
+00061 }
+00062 
+00063 QString Codecs::decodeRFC2047(const QCString& aStr)
+00064 {
+00065   QString result;
+00066   QCString charset;
+00067   char *pos, *beg, *end, *mid;
+00068   QCString str, cstr, LWSP_buffer;
+00069   char encoding, ch;
+00070   bool valid, lastWasEncodedWord=FALSE;
+00071   const int maxLen=200;
+00072   int i;
+00073 
+00074   if (aStr.find("=?") < 0)
+00075     return QString::fromLocal8Bit(aStr).replace(QRegExp("\n[\t ]")," ");
+00076 
+00077   for (pos=aStr.data(); *pos; pos++)
+00078   {
+00079     // line unfolding
+00080     if ( pos[0] == '\r' && pos[1] == '\n' ) {
+00081       pos++;
+00082       continue;
+00083     }
+00084     if ( pos[0] == '\n' )
+00085       continue;
+00086     // collect LWSP after encoded-words,
+00087     // because we might need to throw it out
+00088     // (when the next word is an encoded-word)
+00089     if ( lastWasEncodedWord && ( pos[0] == ' ' || pos[0] == '\t' ) )
+00090     {
+00091       LWSP_buffer += pos[0];
+00092       continue;
+00093     }
+00094     // verbatimly copy normal text
+00095     if (pos[0]!='=' || pos[1]!='?')
+00096     {
+00097       result += LWSP_buffer + pos[0];
+00098       LWSP_buffer = 0;
+00099       lastWasEncodedWord = FALSE;
+00100       continue;
+00101     }
+00102     // found possible encoded-word
+00103     beg = pos+2;
+00104     end = beg;
+00105     valid = TRUE;
+00106     // parse charset name
+00107     charset = "";
+00108     for (i=2,pos+=2; i<maxLen && (*pos!='?'&&(*pos==' '||ispunct(*pos)||isalnum(*pos))); i++)
+00109     {
+00110       charset += *pos;
+00111       pos++;
+00112     }
+00113     if (*pos!='?' || i<4 || i>=maxLen) valid = FALSE;
+00114     else
+00115     {
+00116       // get encoding and check delimiting question marks
+00117       encoding = toupper(pos[1]);
+00118       if (pos[2]!='?' || (encoding!='Q' && encoding!='B'))
+00119                             valid = FALSE;
+00120       pos+=3;
+00121       i+=3;
+00122     }
+00123     if (valid)
+00124     {
+00125       mid = pos;
+00126       // search for end of encoded part
+00127       while (i<maxLen && *pos && !(*pos=='?' && *(pos+1)=='='))
+00128       {
+00129                             i++;
+00130                             pos++;
+00131       }
+00132       end = pos+2;//end now points to the first char after the encoded string
+00133       if (i>=maxLen || !*pos)
+00134        valid = FALSE;
+00135     }
+00136     if (valid)
+00137     {
+00138       // valid encoding: decode and throw away separating LWSP
+00139       ch = *pos;
+00140       *pos = '\0';
+00141       str = QCString(mid).left((int)(mid - pos - 1));
+00142       if (encoding == 'Q')
+00143       {
+00144                             // decode quoted printable text
+00145                             for (i=str.length()-1; i>=0; i--)
+00146                      if (str[i]=='_')
+00147                             str[i]=' ';
+00148                             cstr = decodeQuotedPrintable(str);
+00149       }
+00150       else
+00151       {
+00152                             // decode base64 text
+00153                             cstr = decodeBase64(str);
+00154       }
+00155       QTextCodec *codec = codecForName(charset);
+00156       if (!codec)
+00157        codec = codecForName(KGlobal::locale()->encoding());
+00158       if (codec)
+00159        result += codec->toUnicode(cstr);
+00160       else
+00161        result += QString::fromLocal8Bit(cstr);
+00162       lastWasEncodedWord = TRUE;
+00163 
+00164       *pos = ch;
+00165       pos = end -1;
+00166     }
+00167     else
+00168     {
+00169       // invalid encoding, keep separating LWSP.
+00170       //result += "=?";
+00171       //pos = beg -1; // because pos gets increased shortly afterwards
+00172       pos = beg - 2;
+00173       result += LWSP_buffer;
+00174       result += *pos++;
+00175       result += *pos;
+00176       lastWasEncodedWord = FALSE;
+00177     }
+00178     LWSP_buffer = 0;
+00179   }
+00180   return result;
+00181 }
+00182 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/decodeRFC2047_8h-source.html b/doc/html/decodeRFC2047_8h-source.html new file mode 100644 index 0000000..e45ca0f --- /dev/null +++ b/doc/html/decodeRFC2047_8h-source.html @@ -0,0 +1,69 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/decodeRFC2047.h Source File + + + + + + + +

decodeRFC2047.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           decodeRFC2047.h  -  description
+00003                              -------------------
+00004     begin                : Mon Jan 28 2002
+00005     copyright            : (C) 2002 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 #ifndef DECODE_RFC2047_H
+00018 #define DECODE_RFC2047_H
+00019 
+00020 #include <ctype.h>
+00021 #include <stdlib.h>
+00022 
+00023 //Qt header
+00024 #include <qtextcodec.h>
+00025 #include <qregexp.h>
+00026 #include <qstring.h>
+00027 #include <qcstring.h>
+00028 
+00029 //KDE header
+00030 #include <klocale.h>
+00031 #include <kglobal.h>
+00032 #include <mimelib/mimepp.h>
+00033 
+00034 
+00038 namespace Codecs
+00039 {
+00040 
+00047   QString decodeRFC2047( const QCString& aStr );
+00048 
+00049 }
+00050 
+00051 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/dir_656923b733374505e0e2f68ecb68d952.html b/doc/html/dir_656923b733374505e0e2f68ecb68d952.html new file mode 100644 index 0000000..5754588 --- /dev/null +++ b/doc/html/dir_656923b733374505e0e2f68ecb68d952.html @@ -0,0 +1,145 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/ Directory Reference + + + + + + +

kshowmail Directory Reference

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directories

directory  kcmconfigs

Files

file  alertdialog.cpp
file  alertdialog.h [code]
file  AlertDlg.cpp
file  AlertDlg.h [code]
file  configelem.cpp
file  configelem.h [code]
file  configlist.cpp
file  configlist.h [code]
file  constants.h [code]
file  decodeRFC2047.cpp
file  decodeRFC2047.h [code]
file  encryption.cpp
file  encryption.h [code]
file  filteritem.cpp
file  filteritem.h [code]
file  filteritemcriteria.cpp
file  filteritemcriteria.h [code]
file  filterlog.cpp
file  filterlog.h [code]
file  filterlogentry.cpp
file  filterlogentry.h [code]
file  filterlogview.cpp
file  filterlogview.h [code]
file  filterlogviewdeleteditem.cpp
file  filterlogviewdeleteditem.h [code]
file  filterlogviewmoveditem.cpp
file  filterlogviewmoveditem.h [code]
file  headerfilter.cpp
file  headerfilter.h [code]
file  kshowmail.cpp
file  kshowmail.h [code]
file  kshowmaildoc.cpp
file  kshowmaildoc.h [code]
file  kshowmaildock.cpp
file  kshowmaildock.h [code]
file  kshowmailfeedback.cpp
file  kshowmailview.cpp
file  kshowmailview.h [code]
file  kwalletaccess.cpp
file  kwalletaccess.h [code]
file  main.cpp
file  senderlistfilter.cpp
file  senderlistfilter.h [code]
file  serverdialog.cpp
file  serverdialog.h [code]
file  showheaderdialog.cpp
file  showheaderdialog.h [code]
file  showlistviewitem.cpp
file  showlistviewitem.h [code]
file  showmaildialog.cpp
file  showmaildialog.h [code]
file  showrecord.cpp
file  showrecord.h [code]
file  showrecordelem.cpp
file  showrecordelem.h [code]
file  types.h [code]
file  uniqueapp.cpp
file  uniqueapp.h [code]
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/dirs.html b/doc/html/dirs.html new file mode 100644 index 0000000..568b198 --- /dev/null +++ b/doc/html/dirs.html @@ -0,0 +1,41 @@ + + +kshowmail.kdevelop: Directory Hierarchy + + + + + +

kshowmail.kdevelop Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically: +
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css new file mode 100644 index 0000000..c7db1a8 --- /dev/null +++ b/doc/html/doxygen.css @@ -0,0 +1,358 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +.directory { font-size: 9pt; font-weight: bold; } +.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } +.directory > h3 { margin-top: 0; } +.directory p { margin: 0px; white-space: nowrap; } +.directory div { display: none; margin: 0px; } +.directory img { vertical-align: -30%; } diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 GIT binary patch literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} literal 0 HcmV?d00001 diff --git a/doc/html/editdialog_8cpp-source.html b/doc/html/editdialog_8cpp-source.html new file mode 100644 index 0000000..0b643ba --- /dev/null +++ b/doc/html/editdialog_8cpp-source.html @@ -0,0 +1,74 @@ + + +kshowmail: kshowmail/editdialog.cpp Source File + + + + + + +

editdialog.cpp

00001 /***************************************************************************
+00002                           editdialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qlayout.h>
+00019 #include <qmultilineedit.h>
+00020 #include <qlabel.h>
+00021 #include <qlineedit.h>
+00022 #include <ktextbrowser.h>
+00023 #include "editdialog.h"
+00024 
+00025 EditDialog::EditDialog(QWidget *parent, const char *name, const char* content, bool html):
+00026   EditDlg(parent,name,true), _row(0)
+00027 {
+00028   setCaption (name);
+00029   if (!html)
+00030     m_Edit->setTextFormat (Qt::PlainText);
+00031   m_Edit->setText (content);
+00032 }
+00033 
+00034 void EditDialog::addWidget (const QString& lbl, const QString& value)
+00035 {
+00036   QLabel* label = new QLabel (lbl, this);
+00037   QLineEdit* edit = new QLineEdit (this);
+00038   edit->setReadOnly (true);
+00039   edit->setText (value);
+00040   headerlayout->addMultiCellWidget (label, _row, _row, 0, 0);
+00041   headerlayout->addMultiCellWidget (edit, _row++, _row, 1, 1);
+00042 }
+00043 
+00044 EditDialog::~EditDialog()
+00045 {}
+00046 
+00047 void EditDialog::slotReplyClicked ()
+00048 {
+00049   // the value 10 is returned from exec
+00050   // works, but signal/slot would be nice
+00051   done (10);
+00052 }
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/editdialog_8h-source.html b/doc/html/editdialog_8h-source.html new file mode 100644 index 0000000..a1ff5b0 --- /dev/null +++ b/doc/html/editdialog_8h-source.html @@ -0,0 +1,58 @@ + + +kshowmail: kshowmail/editdialog.h Source File + + + + + + +

editdialog.h

00001 /***************************************************************************
+00002                           editdialog.h  -  description
+00003                              -------------------
+00004     begin                : Wed Oct 31 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef EDITDIALOG_H
+00019 #define EDITDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "EditDlg.h"
+00023 
+00028 class EditDialog : public EditDlg  {
+00029    Q_OBJECT
+00030 public: 
+00031        EditDialog(QWidget *parent, const char *name, const char* content, bool html);
+00032        ~EditDialog();
+00033   void addWidget (const QString& label, const QString& value);
+00034   public slots:
+00035   virtual void slotReplyClicked ();
+00036 private:
+00037   int _row;
+00038 };
+00039 
+00040 #endif
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/editdialog_8moc_8cpp-source.html b/doc/html/editdialog_8moc_8cpp-source.html new file mode 100644 index 0000000..558715e --- /dev/null +++ b/doc/html/editdialog_8moc_8cpp-source.html @@ -0,0 +1,123 @@ + + +kshowmail: kshowmail/editdialog.moc.cpp Source File + + + + + + +

editdialog.moc.cpp

00001 /****************************************************************************
+00002 ** EditDialog meta object code from reading C++ file 'editdialog.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: editdialog_8moc_8cpp-source.html,v 1.8 2007/05/16 20:12:00 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "editdialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *EditDialog::className() const
+00023 {
+00024     return "EditDialog";
+00025 }
+00026 
+00027 QMetaObject *EditDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_EditDialog( "EditDialog", &EditDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString EditDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "EditDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString EditDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "EditDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* EditDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = EditDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotReplyClicked", 0, 0 };
+00056     static const QMetaData slot_tbl[] = {
+00057        { "slotReplyClicked()", &slot_0, QMetaData::Public }
+00058     };
+00059     metaObj = QMetaObject::new_metaobject(
+00060        "EditDialog", parentObject,
+00061        slot_tbl, 1,
+00062        0, 0,
+00063 #ifndef QT_NO_PROPERTIES
+00064        0, 0,
+00065        0, 0,
+00066 #endif // QT_NO_PROPERTIES
+00067        0, 0 );
+00068     cleanUp_EditDialog.setMetaObject( metaObj );
+00069     return metaObj;
+00070 }
+00071 
+00072 void* EditDialog::qt_cast( const char* clname )
+00073 {
+00074     if ( !qstrcmp( clname, "EditDialog" ) )
+00075        return this;
+00076     return EditDlg::qt_cast( clname );
+00077 }
+00078 
+00079 bool EditDialog::qt_invoke( int _id, QUObject* _o )
+00080 {
+00081     switch ( _id - staticMetaObject()->slotOffset() ) {
+00082     case 0: slotReplyClicked(); break;
+00083     default:
+00084        return EditDlg::qt_invoke( _id, _o );
+00085     }
+00086     return TRUE;
+00087 }
+00088 
+00089 bool EditDialog::qt_emit( int _id, QUObject* _o )
+00090 {
+00091     return EditDlg::qt_emit(_id,_o);
+00092 }
+00093 #ifndef QT_NO_PROPERTIES
+00094 
+00095 bool EditDialog::qt_property( int id, int f, QVariant* v)
+00096 {
+00097     return EditDlg::qt_property( id, f, v);
+00098 }
+00099 
+00100 bool EditDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00101 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:18 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/files.html b/doc/html/files.html new file mode 100644 index 0000000..7df35ef --- /dev/null +++ b/doc/html/files.html @@ -0,0 +1,120 @@ + + +kshowmail.kdevelop: File Index + + + + + + +

kshowmail.kdevelop File List

Here is a list of all files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Daten/Documents/programmieren/kshowmail/kshowmail/config.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/alertdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/alertdialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/AlertDlg.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/AlertDlg.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configelem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configelem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configlist.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/configlist.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/constants.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/decodeRFC2047.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/decodeRFC2047.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/encryption.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/encryption.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filteritem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filteritem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filteritemcriteria.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filteritemcriteria.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogentry.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogentry.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogview.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogview.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogviewdeleteditem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogviewdeleteditem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogviewmoveditem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/filterlogviewmoveditem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/headerfilter.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/headerfilter.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmail.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmail.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildoc.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildoc.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildock.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildock.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmailfeedback.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmailview.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmailview.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kwalletaccess.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kwalletaccess.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/main.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/senderlistfilter.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/senderlistfilter.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/serverdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/serverdialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showheaderdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showheaderdialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showlistviewitem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showlistviewitem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showmaildialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showmaildialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecord.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecord.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecordelem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecordelem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/types.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/uniqueapp.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/uniqueapp.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/accountsetupdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/accountsetupdialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/accountsetupitem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/accountsetupitem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configaccounts.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configaccounts.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configactions.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configactions.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configdisplay.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configdisplay.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configfilter.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configfilter.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configgeneral.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configgeneral.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configlog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configlog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configspamcheck.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/configspamcheck.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/encryption.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/encryption.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtercriteriawidget.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtercriteriawidget.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtersetupdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtersetupdialog.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtersetupitem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/filtersetupitem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/kwalletaccess.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/kwalletaccess.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/mailboxwizard.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/mailboxwizard.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/mailboxwizardlistitem.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/mailboxwizardlistitem.h [code]
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/senderlistdialog.cpp
Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kcmconfigs/senderlistdialog.h [code]
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filter_8cpp-source.html b/doc/html/filter_8cpp-source.html new file mode 100644 index 0000000..7c24bc6 --- /dev/null +++ b/doc/html/filter_8cpp-source.html @@ -0,0 +1,76 @@ + + +kshowmail: kshowmail/filter.cpp Source File + + + + + + +

filter.cpp

00001 /***************************************************************************
+00002                           filter.cpp  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "filter.h"
+00019 
+00020 FilterList Filter::_filter;
+00021 Filter::filterStatus Filter::_status = Filter::off;
+00022 
+00023 Filter::Filter()
+00024 {
+00025 }
+00026 
+00027 Filter::~Filter()
+00028 {
+00029 }
+00030 
+00031 FilterElem* Filter::matches (ShowRecordElem* pElem)
+00032 {
+00033   for (FilterElem* pFilter = _filter.first(); pFilter; pFilter = _filter.next())
+00034   {
+00035     if (pFilter->matches (pElem))
+00036       return pFilter;
+00037   }
+00038   return NULL;
+00039 }
+00040 
+00041 void Filter::readOptions (KConfig* config)
+00042 {
+00043   config->setGroup ("filter_general");
+00044   _status = (Filter::filterStatus)config->readNumEntry("status", 0);
+00045   _filter.readOptions(config);
+00046 }
+00047 
+00048 void Filter::saveOptions (KConfig* config)
+00049 {
+00050   config->setGroup ("filter_general");
+00051   config->writeEntry ("status", _status);
+00052   _filter.saveOptions(config);
+00053   config->sync();
+00054 }
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filter_8h-source.html b/doc/html/filter_8h-source.html new file mode 100644 index 0000000..cb1ed84 --- /dev/null +++ b/doc/html/filter_8h-source.html @@ -0,0 +1,66 @@ + + +kshowmail: kshowmail/filter.h Source File + + + + + + +

filter.h

00001 /***************************************************************************
+00002                           filter.h  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef FILTER_H
+00019 #define FILTER_H
+00020 
+00021 
+00022 #include <kconfig.h>
+00023 #include "filterlist.h"
+00024 #include "filterelem.h"
+00025 #include "showrecordelem.h"
+00026 
+00030 class ShowRecordElem;
+00031 class FilterElem;
+00032 class FilterList;
+00033 
+00034 class Filter {
+00035 private:
+00036        Filter();
+00037        ~Filter();
+00038 public:
+00039   enum filterStatus {off, on, automatic};
+00040   static FilterElem* matches (ShowRecordElem*);
+00041   static FilterList _filter;
+00042   static filterStatus _status;
+00043        static void readOptions (KConfig* config);
+00044        static void saveOptions (KConfig* config);
+00045 };
+00046 
+00047 #endif
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterdialog_8cpp-source.html b/doc/html/filterdialog_8cpp-source.html new file mode 100644 index 0000000..daf1e0a --- /dev/null +++ b/doc/html/filterdialog_8cpp-source.html @@ -0,0 +1,165 @@ + + +kshowmail: kshowmail/filterdialog.cpp Source File + + + + + + +

filterdialog.cpp

00001 /***************************************************************************
+00002                           filterdialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qradiobutton.h>
+00019 #include <qcombobox.h>
+00020 #include <klocale.h>
+00021 #include <kmessagebox.h>
+00022 #include <kdebug.h>
+00023  
+00024 #include "filterdialog.h"
+00025 #include "filterentrydialog.h"
+00026 
+00027 FilterDialog::FilterDialog(QWidget *parent, const char *name ) :
+00028   FilterDlg(parent,name)
+00029 {
+00030   switch (Filter::_status)
+00031   {
+00032     case Filter::off:
+00033       _radioOff->setChecked(true);
+00034       break;
+00035     case Filter::on:
+00036       _radioOn->setChecked(true);
+00037       break;
+00038     case Filter::automatic:
+00039       _radioAuto->setChecked(true);
+00040       break;
+00041   }
+00042   _filters = Filter::_filter;
+00043   _filters.setCombo(_comboFilter, 0);
+00044 }
+00045 
+00046 FilterDialog::~FilterDialog()
+00047 {
+00048 }
+00049 
+00050 void FilterDialog::slotFilterActivated (int index)
+00051 {
+00052   _filters.at (index);
+00053 }
+00054 
+00055 void FilterDialog::slotAdd ()
+00056 {
+00057        FilterElem* entry = new FilterElem ();
+00058        FilterEntryDialog dlg (this, "New filter", entry);
+00059        if (dlg.exec () == QDialog::Accepted)
+00060        {
+00061               _filters.inSort (entry);
+00062               int pos = _filters.at ();
+00063     _filters.setCombo(_comboFilter, pos);
+00064   }
+00065        else
+00066               delete entry;
+00067 }
+00068 
+00069 void FilterDialog::slotEdit ()
+00070 {
+00071        if (_filters.current ())
+00072        {
+00073               FilterEntryDialog dlg (this, "Edit command", _filters.current ());
+00074               if (dlg.exec () == QDialog::Accepted)
+00075               {
+00076                      // the command name may have changed. Update the combo box.
+00077       _filters.sort();
+00078       int pos = _filters.at ();
+00079       _filters.setCombo(_comboFilter, pos);
+00080               }
+00081        }
+00082 }
+00083 
+00084 void FilterDialog::slotCopy ()
+00085 {
+00086        if (_filters.current ())
+00087        {
+00088               FilterElem* entry = new FilterElem (*_filters.current ());
+00089               FilterEntryDialog dlg (this, "Copy command", entry);
+00090               if (dlg.exec () == QDialog::Accepted)
+00091               {
+00092                      _filters.inSort (entry);
+00093                      int pos = _filters.at ();
+00094       _filters.setCombo(_comboFilter, pos);
+00095               }
+00096               else
+00097                      delete entry;
+00098        }
+00099 }
+00100 
+00101 void FilterDialog::slotDelete ()
+00102 {
+00103        if (_filters.current())
+00104        {
+00105               if (KMessageBox::warningYesNo (this, i18n("Filter %1 will be deleted.\n"
+00106                                               "Are you sure ?").arg(_filters.current()->toString())) == KMessageBox::Yes)
+00107               {
+00108                      int pos = _filters.at ();
+00109                      _filters.remove (pos);
+00110       _filters.setCombo(_comboFilter, pos);
+00111               }
+00112        }
+00113 }
+00114 
+00115 void FilterDialog::slotOk ()
+00116 {
+00117   if (_radioOff->isChecked())
+00118     Filter::_status = Filter::off;
+00119   else if (_radioOn->isChecked())
+00120     Filter::_status = Filter::on;
+00121   else if (_radioAuto->isChecked())
+00122     Filter::_status = Filter::automatic;
+00123   else
+00124     Filter::_status = Filter::off;
+00125   
+00126   Filter::_filter = _filters;
+00127   accept ();
+00128 }
+00129 
+00130 void FilterDialog::slotAutomaticActivated ()
+00131 {
+00132   if (_radioAuto->isChecked())
+00133   {
+00134     if (KMessageBox::warningContinueCancel (this, i18n("Automatic filters can cause loss of important mails.\n"
+00135                                                        "Please test your filters.\n"
+00136                                                        "Are you sure ?"),
+00137                                                        QString::null,
+00138                                                        KStdGuiItem::cont(),
+00139                                                        "autofilteraskagain") == KMessageBox::Cancel)
+00140       _radioOn->setChecked (true);
+00141   }
+00142 }
+00143 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterdialog_8h-source.html b/doc/html/filterdialog_8h-source.html new file mode 100644 index 0000000..fae4c33 --- /dev/null +++ b/doc/html/filterdialog_8h-source.html @@ -0,0 +1,66 @@ + + +kshowmail: kshowmail/filterdialog.h Source File + + + + + + +

filterdialog.h

00001 /***************************************************************************
+00002                           filterdialog.h  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef FILTERDIALOG_H
+00019 #define FILTERDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "filter.h"
+00023 #include "FilterDlg.h"
+00024 #include "filterlist.h"
+00025 #include "filterelem.h"
+00026 
+00031 class FilterDialog : public FilterDlg  {
+00032    Q_OBJECT
+00033 public: 
+00034        FilterDialog(QWidget *parent=0, const char *name=0);
+00035        ~FilterDialog();
+00036 public slots:
+00037   virtual void slotAdd ();
+00038   virtual void slotEdit ();
+00039   virtual void slotCopy();
+00040   virtual void slotDelete ();
+00041   virtual void slotOk ();
+00042   virtual void slotFilterActivated (int);
+00043   virtual void slotAutomaticActivated ();
+00044 private:
+00045   FilterList _filters;
+00046 };
+00047 
+00048 #endif
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterdialog_8moc_8cpp-source.html b/doc/html/filterdialog_8moc_8cpp-source.html new file mode 100644 index 0000000..7b8487f --- /dev/null +++ b/doc/html/filterdialog_8moc_8cpp-source.html @@ -0,0 +1,144 @@ + + +kshowmail: kshowmail/filterdialog.moc.cpp Source File + + + + + + +

filterdialog.moc.cpp

00001 /****************************************************************************
+00002 ** FilterDialog meta object code from reading C++ file 'filterdialog.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:09:04 2007
+00005 **      by: The Qt MOC ($Id: filterdialog_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:50 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "filterdialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *FilterDialog::className() const
+00023 {
+00024     return "FilterDialog";
+00025 }
+00026 
+00027 QMetaObject *FilterDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_FilterDialog( "FilterDialog", &FilterDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString FilterDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "FilterDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString FilterDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "FilterDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* FilterDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = FilterDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotAdd", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotEdit", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotCopy", 0, 0 };
+00058     static const QUMethod slot_3 = {"slotDelete", 0, 0 };
+00059     static const QUMethod slot_4 = {"slotOk", 0, 0 };
+00060     static const QUParameter param_slot_5[] = {
+00061        { 0, &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_5 = {"slotFilterActivated", 1, param_slot_5 };
+00064     static const QUMethod slot_6 = {"slotAutomaticActivated", 0, 0 };
+00065     static const QMetaData slot_tbl[] = {
+00066        { "slotAdd()", &slot_0, QMetaData::Public },
+00067        { "slotEdit()", &slot_1, QMetaData::Public },
+00068        { "slotCopy()", &slot_2, QMetaData::Public },
+00069        { "slotDelete()", &slot_3, QMetaData::Public },
+00070        { "slotOk()", &slot_4, QMetaData::Public },
+00071        { "slotFilterActivated(int)", &slot_5, QMetaData::Public },
+00072        { "slotAutomaticActivated()", &slot_6, QMetaData::Public }
+00073     };
+00074     metaObj = QMetaObject::new_metaobject(
+00075        "FilterDialog", parentObject,
+00076        slot_tbl, 7,
+00077        0, 0,
+00078 #ifndef QT_NO_PROPERTIES
+00079        0, 0,
+00080        0, 0,
+00081 #endif // QT_NO_PROPERTIES
+00082        0, 0 );
+00083     cleanUp_FilterDialog.setMetaObject( metaObj );
+00084     return metaObj;
+00085 }
+00086 
+00087 void* FilterDialog::qt_cast( const char* clname )
+00088 {
+00089     if ( !qstrcmp( clname, "FilterDialog" ) )
+00090        return this;
+00091     return FilterDlg::qt_cast( clname );
+00092 }
+00093 
+00094 bool FilterDialog::qt_invoke( int _id, QUObject* _o )
+00095 {
+00096     switch ( _id - staticMetaObject()->slotOffset() ) {
+00097     case 0: slotAdd(); break;
+00098     case 1: slotEdit(); break;
+00099     case 2: slotCopy(); break;
+00100     case 3: slotDelete(); break;
+00101     case 4: slotOk(); break;
+00102     case 5: slotFilterActivated((int)static_QUType_int.get(_o+1)); break;
+00103     case 6: slotAutomaticActivated(); break;
+00104     default:
+00105        return FilterDlg::qt_invoke( _id, _o );
+00106     }
+00107     return TRUE;
+00108 }
+00109 
+00110 bool FilterDialog::qt_emit( int _id, QUObject* _o )
+00111 {
+00112     return FilterDlg::qt_emit(_id,_o);
+00113 }
+00114 #ifndef QT_NO_PROPERTIES
+00115 
+00116 bool FilterDialog::qt_property( int id, int f, QVariant* v)
+00117 {
+00118     return FilterDlg::qt_property( id, f, v);
+00119 }
+00120 
+00121 bool FilterDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00122 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterelem_8cpp-source.html b/doc/html/filterelem_8cpp-source.html new file mode 100644 index 0000000..f1d16f9 --- /dev/null +++ b/doc/html/filterelem_8cpp-source.html @@ -0,0 +1,324 @@ + + +kshowmail: kshowmail/filterelem.cpp Source File + + + + + + +

filterelem.cpp

00001 /***************************************************************************
+00002                           filterelem.cpp  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qregexp.h>
+00019 #include <klocale.h>
+00020 #include <kdebug.h>
+00021 #include "filterelem.h"
+00022 
+00023 FilterRecord::FilterRecord ():
+00024   _type (from), _expression (contains), _CaseSensitive (false), _RegExp (false)
+00025 {}
+00026 
+00027 FilterRecord::FilterRecord (filterType type, expressionType expression, const QString& match, bool caseSensitive, bool regExp):
+00028   _type (type),
+00029   _expression (expression),
+00030   _match (match),
+00031   _CaseSensitive (caseSensitive),
+00032   _RegExp (regExp)
+00033 {}
+00034 
+00035 QString FilterRecord::toString () const
+00036 {
+00037   QString name;
+00038   switch (_type)
+00039   {
+00040     case from:
+00041       name += i18n ("From");
+00042       break;
+00043     case subject:
+00044       name += i18n ("Subject");
+00045       break;
+00046     case header:
+00047       name += i18n ("Header");
+00048       break;
+00049     case size:
+00050       name += i18n ("Size");
+00051       break;
+00052     case to:
+00053       name += i18n ("To");
+00054       break;
+00055   }
+00056   name += " ";
+00057   switch (_expression)
+00058   {
+00059     case contains:
+00060       name += i18n ("Contains");
+00061       break;
+00062     case contains_not:
+00063       name += i18n ("Doesn't contain");
+00064       break;
+00065     case equals:
+00066       name += i18n ("Equals");
+00067       break;
+00068     case equals_not:
+00069       name += i18n ("Doesn't equal");
+00070       break;
+00071     case greater:
+00072       name += i18n ("Greater");
+00073       break;
+00074     case less:
+00075       name += i18n ("Less");
+00076       break;
+00077   }
+00078   name += " ";
+00079   name += _match;
+00080   return name;
+00081 }
+00082 
+00083 FilterElem::FilterElem():
+00084   _secondCondition (noSecondCondition),
+00085   _counter (0)
+00086 {
+00087 }
+00088 
+00089 FilterElem::FilterElem (const FilterRecord& record):
+00090   _filter1 (record), _secondCondition (noSecondCondition), _counter (0)
+00091 {
+00092 }
+00093 
+00094 FilterElem::FilterElem (const FilterElem& elem):
+00095   _filter1 (elem._filter1),
+00096   _filter2 (elem._filter2),
+00097   _secondCondition (elem._secondCondition),
+00098   _counter (elem._counter)
+00099 {
+00100 }
+00101 
+00102 FilterElem::~FilterElem()
+00103 {
+00104 }
+00105 
+00106 void FilterElem::setSecondCondition (secondCondition scnd, const FilterRecord& filter)
+00107 {
+00108   _secondCondition = scnd;
+00109   _filter2 = filter;
+00110 }
+00111 
+00112 QString FilterElem::toString () const
+00113 {
+00114   QString name;
+00115   name.sprintf ("%06d_", _counter);
+00116   name += _filter1.toString();
+00117   if (_secondCondition != FilterElem::noSecondCondition)
+00118   {
+00119     name += " ";
+00120     switch (_secondCondition)
+00121     {
+00122       case condAnd:
+00123         name += i18n ("And");
+00124         break;
+00125       case condOr:
+00126         name += i18n ("Or");
+00127         break;
+00128       default:
+00129         break;
+00130     }
+00131     name += " " + _filter2.toString();
+00132   }
+00133   return name;
+00134 }
+00135 
+00136 bool FilterRecord::matches (ShowRecordElem* pElem)
+00137 {
+00138   QString text;
+00139   int msgsize = 0;
+00140   switch (_type)
+00141   {
+00142     case subject:
+00143       text = pElem->subject();
+00144       break;
+00145     case from:
+00146       text = pElem->from();
+00147       break;
+00148     case to:
+00149       text = pElem->to();
+00150       break;
+00151     case header:
+00152       text = pElem->header();
+00153       break;
+00154     case size:
+00155       {
+00156         msgsize = pElem->size();
+00157         int value = _match.toInt();
+00158         switch (_expression)
+00159         {
+00160           case equals:
+00161             return (msgsize == value);
+00162             break;
+00163           case equals_not:
+00164             return (msgsize != value);
+00165             break;
+00166           case greater:
+00167             return (msgsize > value);
+00168             break;
+00169           case less:
+00170             return (msgsize < value);
+00171             break;
+00172           default:
+00173             // contains does not make sense for size
+00174             return false;
+00175         }
+00176         return false;
+00177       }
+00178       break;
+00179     default:
+00180       return false;
+00181   }
+00182 
+00183   switch (_expression)
+00184   {
+00185     case contains:
+00186       if (_RegExp)
+00187       {
+00188         return (QRegExp (_match, _CaseSensitive).search(text) >= 0);
+00189       }
+00190       else
+00191       {
+00192         return (text.contains (_match, _CaseSensitive) > 0);
+00193       }
+00194       break;
+00195     case contains_not:
+00196       if (_RegExp)
+00197       {
+00198         return (QRegExp (_match, _CaseSensitive).search(text) < 0);
+00199       }
+00200       else
+00201       {
+00202         return (text.contains (_match, _CaseSensitive) == 0);
+00203       }
+00204       break;
+00205     case equals:
+00206       if (_RegExp)
+00207       {
+00208         return (QRegExp (_match, _CaseSensitive).exactMatch (text));
+00209       }
+00210       else
+00211       {
+00212         if (_CaseSensitive)
+00213         {
+00214           return (text == _match);
+00215         }
+00216         else
+00217         {
+00218           return (text.upper() == _match.upper());
+00219         }
+00220       }
+00221       break;
+00222     case equals_not:
+00223       if (_RegExp)
+00224       {
+00225         return !(QRegExp (_match, _CaseSensitive).exactMatch (text));
+00226       }
+00227       else
+00228       {
+00229         if (_CaseSensitive)
+00230         {
+00231           return (text != _match);
+00232         }
+00233         else
+00234         {
+00235           return (text.upper() != _match.upper());
+00236         }
+00237       }
+00238       break;
+00239     case greater:
+00240       if (_CaseSensitive)
+00241       {
+00242         return (text > _match);
+00243       }
+00244       else
+00245       {
+00246         return (text.upper() > _match.upper());
+00247       }
+00248       break;
+00249     case less:
+00250       if (_CaseSensitive)
+00251       {
+00252         return (text < _match);
+00253       }
+00254       else
+00255       {
+00256         return (text.upper() < _match.upper());
+00257       }
+00258       break;
+00259     default:
+00260       return false;
+00261   }
+00262 
+00263   return false;
+00264 }
+00265 
+00266 bool FilterElem::matches (ShowRecordElem* pElem)
+00267 {
+00268   bool result = _filter1.matches (pElem);
+00269   switch (_secondCondition)
+00270   {
+00271     case noSecondCondition:
+00272       return result;
+00273       break;
+00274     case condAnd:
+00275       if (result)
+00276         return _filter2.matches (pElem);
+00277       else
+00278         return false;
+00279       break;
+00280     case condOr:
+00281       if (result)
+00282         return true;
+00283       else
+00284         return _filter2.matches (pElem);
+00285   }
+00286   return false;
+00287 }
+00288 
+00289 unsigned int FilterElem::getCounter( )
+00290 {
+00291   return _counter;
+00292 }
+00293 
+00294 void FilterElem::incCounter( )
+00295 {
+00296   _counter++;
+00297 }
+00298 
+00299 void FilterElem::setCounter( unsigned int number )
+00300 {
+00301   _counter = number;
+00302 }
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterelem_8h-source.html b/doc/html/filterelem_8h-source.html new file mode 100644 index 0000000..c38a116 --- /dev/null +++ b/doc/html/filterelem_8h-source.html @@ -0,0 +1,97 @@ + + +kshowmail: kshowmail/filterelem.h Source File + + + + + + +

filterelem.h

00001 /***************************************************************************
+00002                           filterelem.h  -  description
+00003                              -------------------
+00004     begin                : Die Sep 23 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef FILTERELEM_H
+00019 #define FILTERELEM_H
+00020 
+00021 #include "showrecordelem.h"
+00022 
+00027 class ShowRecordElem;
+00028 
+00029 class FilterRecord
+00030 {
+00031   public:
+00032   // this sequence must not be changed. See FilterEntryDlg.ui
+00033   enum filterType {from, subject, header, size, to};
+00034   enum expressionType {contains, contains_not, equals, equals_not, greater, less};
+00035 
+00036   FilterRecord ();
+00037   FilterRecord (filterType type, expressionType expression, const QString& match, bool CaseSensitive, bool regExp);
+00038   bool matches (ShowRecordElem*);
+00039   QString toString () const;
+00040 
+00041   filterType _type;
+00042   expressionType _expression;
+00043   QString _match;
+00044   bool _CaseSensitive;
+00045   bool _RegExp;
+00046 };
+00047 
+00048 class FilterElem {
+00049 public:
+00050   // this sequence must not be changed. See FilterEntryDlg.ui
+00051   enum secondCondition {noSecondCondition, condAnd, condOr};
+00052 
+00053        FilterElem();
+00054   FilterElem (const FilterRecord&);
+00055   FilterElem (const FilterElem&);
+00056   void setSecondCondition (secondCondition scnd, const FilterRecord&);
+00057 
+00058   ~FilterElem();
+00059   QString toString () const;
+00060 
+00061   FilterRecord _filter1;
+00062   FilterRecord _filter2;
+00063 
+00064   secondCondition _secondCondition;
+00065 
+00066   bool matches (ShowRecordElem*);
+00067 
+00072   unsigned int getCounter();
+00073 
+00078   void setCounter( unsigned int number );
+00079 
+00083   void incCounter();
+00084 
+00085   private:
+00086 
+00090     unsigned int _counter;
+00091 };
+00092 
+00093 #endif
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterentrydialog_8cpp-source.html b/doc/html/filterentrydialog_8cpp-source.html new file mode 100644 index 0000000..bf3a7ce --- /dev/null +++ b/doc/html/filterentrydialog_8cpp-source.html @@ -0,0 +1,272 @@ + + +kshowmail: kshowmail/filterentrydialog.cpp Source File + + + + + + +

filterentrydialog.cpp

00001 /***************************************************************************
+00002                           filterentrydialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Mit Sep 24 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qvalidator.h>
+00019 #include <qlineedit.h>
+00020 #include <qcombobox.h>
+00021 #include <qcheckbox.h>
+00022 #include <qgroupbox.h>
+00023 #include <qspinbox.h>
+00024 #include <qpushbutton.h>
+00025 
+00026 #include <kdebug.h>
+00027 #include <klocale.h>
+00028 #include <kmessagebox.h>
+00029 #include <kregexpeditorinterface.h>
+00030 #include <kparts/part.h>
+00031 #include <kparts/componentfactory.h>
+00032 
+00033 #include "filterelem.h"
+00034 #include "filterentrydialog.h"
+00035 
+00036 FilterEntryDialog::FilterEntryDialog(QWidget *parent, const char *name, FilterElem* elem ) :
+00037 FilterEntryDlg(parent,name), _elem (elem)
+00038 {
+00039   _editName->setText (elem->toString());
+00040 
+00041   _comboItem1->setCurrentItem (elem->_filter1._type);
+00042   _comboExpression1->setCurrentItem (elem->_filter1._expression);
+00043   _editMatch1->setText (elem->_filter1._match);
+00044   _checkCaseSensitive1->setChecked (elem->_filter1._CaseSensitive);
+00045   _checkRegExp1->setChecked (elem->_filter1._RegExp);
+00046 
+00047   _comboSecondCondition->setCurrentItem (elem->_secondCondition);
+00048 
+00049   _comboItem2->setCurrentItem (elem->_filter2._type);
+00050   _comboExpression2->setCurrentItem (elem->_filter2._expression);
+00051   _editMatch2->setText (elem->_filter2._match);
+00052   _checkCaseSensitive2->setChecked (elem->_filter2._CaseSensitive);
+00053   _checkRegExp2->setChecked (elem->_filter2._RegExp);
+00054   _spinCounter->setValue (elem->getCounter() );
+00055 
+00056   slotItem1Selected (elem->_filter1._type);
+00057   slotItem2Selected (elem->_filter2._type);
+00058   slotSecondCondition (_elem->_secondCondition);
+00059 
+00060   if (KTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty())
+00061   {
+00062     _buttonEditRegExp1->hide();
+00063     _buttonEditRegExp2->hide();
+00064   }
+00065   else
+00066   {
+00067     _buttonEditRegExp1->setEnabled (elem->_filter1._RegExp);
+00068     _buttonEditRegExp2->setEnabled (elem->_filter2._RegExp);
+00069   }
+00070 }
+00071 
+00072 FilterEntryDialog::~FilterEntryDialog()
+00073 {
+00074 }
+00075 
+00076 void FilterEntryDialog::slotOk ()
+00077 {
+00078   if (_editMatch1->text().isEmpty() ||
+00079      (((FilterElem::secondCondition)_comboSecondCondition->currentItem() != FilterElem::noSecondCondition) &&
+00080       _editMatch2->text().isEmpty()))
+00081   {
+00082     KMessageBox::sorry (this, i18n("Your conditions contain empty match strings.\n"
+00083                                    "This will not work."));
+00084     return;
+00085   }
+00086 
+00087   if (_elem->_filter1._RegExp)
+00088   {
+00089     QRegExp exp (_elem->_filter1._match);
+00090     if (!exp.isValid())
+00091     {
+00092       KMessageBox::sorry (this, i18n ("Condition") + ":\n" + exp.errorString());
+00093       return;
+00094     }
+00095   }
+00096   if (_elem->_secondCondition && _elem->_filter2._RegExp)
+00097   {
+00098     QRegExp exp (_elem->_filter2._match);
+00099     if (!exp.isValid())
+00100     {
+00101       KMessageBox::sorry (this, i18n ("second Condition") + ":\n" + exp.errorString());
+00102       return;
+00103     }
+00104   }
+00105 
+00106   _elem->_filter1._CaseSensitive = _checkCaseSensitive1->isChecked();
+00107   _elem->_filter2._CaseSensitive = _checkCaseSensitive2->isChecked();
+00108   _elem->_filter1._RegExp = _checkRegExp1->isChecked();
+00109   _elem->_filter2._RegExp = _checkRegExp2->isChecked();
+00110 
+00111   accept ();
+00112 }
+00113 
+00114 void FilterEntryDialog::slotItem1Selected (int type)
+00115 {
+00116   if (type == FilterRecord::size)
+00117   {
+00118     int dummy;
+00119     QString match (_editMatch1->text());
+00120     QIntValidator* validator = new QIntValidator (_editMatch1);
+00121     if (validator->validate (match, dummy) == QValidator::Invalid)
+00122       _editMatch1->clear();
+00123     _editMatch1->setValidator (validator);
+00124     _checkCaseSensitive1->setEnabled (false);
+00125   }
+00126   else
+00127   {
+00128     _editMatch1->setValidator (NULL);
+00129     _checkCaseSensitive1->setEnabled (true);
+00130   }
+00131 
+00132   _elem->_filter1._type = (FilterRecord::filterType)type;
+00133   _editName->setText (_elem->toString());
+00134 }
+00135 
+00136 void FilterEntryDialog::slotItem2Selected (int type)
+00137 {
+00138   if (type == FilterRecord::size)
+00139   {
+00140     int dummy;
+00141     QString match (_editMatch2->text());
+00142     QIntValidator* validator = new QIntValidator (_editMatch2);
+00143     if (validator->validate (match, dummy) == QValidator::Invalid)
+00144       _editMatch2->clear();
+00145     _editMatch2->setValidator (validator);
+00146     _checkCaseSensitive2->setEnabled (false);
+00147   }
+00148   else
+00149   {
+00150     _editMatch2->setValidator (NULL);
+00151     _checkCaseSensitive2->setEnabled (true);
+00152   }
+00153 
+00154   _elem->_filter2._type = (FilterRecord::filterType)type;
+00155   _editName->setText (_elem->toString());
+00156 }
+00157 
+00158 void FilterEntryDialog::slotSecondCondition (int condition)
+00159 {
+00160   if (condition == FilterElem::noSecondCondition)
+00161     _groupBox2->setEnabled(false);
+00162   else
+00163     _groupBox2->setEnabled(true);
+00164 
+00165   _elem->_secondCondition = (FilterElem::secondCondition)condition;
+00166   _editName->setText (_elem->toString());
+00167 }
+00168 
+00169 void FilterEntryDialog::slotCondition1Selected(int cond)
+00170 {
+00171   _elem->_filter1._expression = (FilterRecord::expressionType)cond;
+00172   _editName->setText (_elem->toString());
+00173 }
+00174 
+00175 void FilterEntryDialog::slotCondition2Selected(int cond)
+00176 {
+00177   _elem->_filter2._expression = (FilterRecord::expressionType)cond;
+00178   _editName->setText (_elem->toString());
+00179 }
+00180 
+00181 void FilterEntryDialog::slotMatch1Changed(const QString& match)
+00182 {
+00183   _elem->_filter1._match = match;
+00184   _editName->setText (_elem->toString());
+00185 }
+00186 
+00187 void FilterEntryDialog::slotMatch2Changed(const QString& match)
+00188 {
+00189   _elem->_filter2._match = match;
+00190   _editName->setText (_elem->toString());
+00191 }
+00192 
+00193 void FilterEntryDialog::slotResetCounter()
+00194 {
+00195   _spinCounter->setValue(0);
+00196 }
+00197 
+00198 void FilterEntryDialog::slotCounterChanged (int val)
+00199 {
+00200   _elem->setCounter( val );
+00201   _editName->setText (_elem->toString());
+00202 }
+00203 
+00204 void FilterEntryDialog::slotEditRegExp1()
+00205 {
+00206   QDialog *editorDialog = KParts::ComponentFactory::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor" );
+00207   if ( editorDialog )
+00208   {
+00209     // kdeutils was installed, so the dialog was found fetch the editor interface
+00210     KRegExpEditorInterface *editor = static_cast<KRegExpEditorInterface *>( editorDialog->qt_cast( "KRegExpEditorInterface" ) );
+00211     Q_ASSERT( editor ); // This should not fail!
+00212 
+00213     // now use the editor.
+00214     editor->setRegExp(_editMatch1->text());
+00215 
+00216     // Finally exec the dialog
+00217     if (editorDialog->exec() == QDialog::Accepted)
+00218       _editMatch1->setText (editor->regExp());
+00219   }
+00220 }
+00221 
+00222 void FilterEntryDialog::slotEditRegExp2()
+00223 {
+00224   QDialog *editorDialog = KParts::ComponentFactory::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor" );
+00225   if ( editorDialog )
+00226   {
+00227     // kdeutils was installed, so the dialog was found fetch the editor interface
+00228     KRegExpEditorInterface *editor = static_cast<KRegExpEditorInterface *>( editorDialog->qt_cast( "KRegExpEditorInterface" ) );
+00229     Q_ASSERT( editor ); // This should not fail!
+00230 
+00231     // now use the editor.
+00232     editor->setRegExp(_editMatch2->text());
+00233 
+00234     // Finally exec the dialog
+00235     if (editorDialog->exec() == QDialog::Accepted)
+00236       _editMatch2->setText (editor->regExp());
+00237   }
+00238 }
+00239 
+00240 void FilterEntryDialog::slotToggleRegExp1 (bool on)
+00241 {
+00242   _buttonEditRegExp1->setEnabled (on);
+00243 }
+00244 
+00245 void FilterEntryDialog::slotToggleRegExp2 (bool on)
+00246 {
+00247   _buttonEditRegExp2->setEnabled (on);
+00248 }
+00249 
+00250 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterentrydialog_8h-source.html b/doc/html/filterentrydialog_8h-source.html new file mode 100644 index 0000000..542ac05 --- /dev/null +++ b/doc/html/filterentrydialog_8h-source.html @@ -0,0 +1,72 @@ + + +kshowmail: kshowmail/filterentrydialog.h Source File + + + + + + +

filterentrydialog.h

00001 /***************************************************************************
+00002                           filterentrydialog.h  -  description
+00003                              -------------------
+00004     begin                : Mit Sep 24 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef FILTERENTRYDIALOG_H
+00019 #define FILTERENTRYDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "filterelem.h"
+00023 #include "FilterEntryDlg.h"
+00024 
+00029 class FilterEntryDialog : public FilterEntryDlg  {
+00030    Q_OBJECT
+00031 public: 
+00032        FilterEntryDialog(QWidget *parent, const char *name, FilterElem* elem);
+00033        ~FilterEntryDialog();
+00034 public slots:
+00035   virtual void slotOk ();
+00036   virtual void slotItem1Selected (int);
+00037   virtual void slotItem2Selected (int);
+00038   virtual void slotSecondCondition (int);
+00039   virtual void slotCondition1Selected(int);
+00040   virtual void slotCondition2Selected(int);
+00041   virtual void slotMatch1Changed(const QString&);
+00042   virtual void slotMatch2Changed(const QString&);
+00043   virtual void slotResetCounter();
+00044   virtual void slotCounterChanged(int);
+00045   virtual void slotEditRegExp1();
+00046   virtual void slotEditRegExp2();
+00047   virtual void slotToggleRegExp1(bool);
+00048   virtual void slotToggleRegExp2(bool);
+00049 
+00050 private:
+00051   FilterElem* _elem;
+00052 };
+00053 
+00054 #endif
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterentrydialog_8moc_8cpp-source.html b/doc/html/filterentrydialog_8moc_8cpp-source.html new file mode 100644 index 0000000..630ecca --- /dev/null +++ b/doc/html/filterentrydialog_8moc_8cpp-source.html @@ -0,0 +1,192 @@ + + +kshowmail: kshowmail/filterentrydialog.moc.cpp Source File + + + + + + +

filterentrydialog.moc.cpp

00001 /****************************************************************************
+00002 ** FilterEntryDialog meta object code from reading C++ file 'filterentrydialog.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:09:01 2007
+00005 **      by: The Qt MOC ($Id: filterentrydialog_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:50 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "filterentrydialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *FilterEntryDialog::className() const
+00023 {
+00024     return "FilterEntryDialog";
+00025 }
+00026 
+00027 QMetaObject *FilterEntryDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_FilterEntryDialog( "FilterEntryDialog", &FilterEntryDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString FilterEntryDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "FilterEntryDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString FilterEntryDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "FilterEntryDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* FilterEntryDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = FilterEntryDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotOk", 0, 0 };
+00056     static const QUParameter param_slot_1[] = {
+00057        { 0, &static_QUType_int, 0, QUParameter::In }
+00058     };
+00059     static const QUMethod slot_1 = {"slotItem1Selected", 1, param_slot_1 };
+00060     static const QUParameter param_slot_2[] = {
+00061        { 0, &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_2 = {"slotItem2Selected", 1, param_slot_2 };
+00064     static const QUParameter param_slot_3[] = {
+00065        { 0, &static_QUType_int, 0, QUParameter::In }
+00066     };
+00067     static const QUMethod slot_3 = {"slotSecondCondition", 1, param_slot_3 };
+00068     static const QUParameter param_slot_4[] = {
+00069        { 0, &static_QUType_int, 0, QUParameter::In }
+00070     };
+00071     static const QUMethod slot_4 = {"slotCondition1Selected", 1, param_slot_4 };
+00072     static const QUParameter param_slot_5[] = {
+00073        { 0, &static_QUType_int, 0, QUParameter::In }
+00074     };
+00075     static const QUMethod slot_5 = {"slotCondition2Selected", 1, param_slot_5 };
+00076     static const QUParameter param_slot_6[] = {
+00077        { 0, &static_QUType_QString, 0, QUParameter::In }
+00078     };
+00079     static const QUMethod slot_6 = {"slotMatch1Changed", 1, param_slot_6 };
+00080     static const QUParameter param_slot_7[] = {
+00081        { 0, &static_QUType_QString, 0, QUParameter::In }
+00082     };
+00083     static const QUMethod slot_7 = {"slotMatch2Changed", 1, param_slot_7 };
+00084     static const QUMethod slot_8 = {"slotResetCounter", 0, 0 };
+00085     static const QUParameter param_slot_9[] = {
+00086        { 0, &static_QUType_int, 0, QUParameter::In }
+00087     };
+00088     static const QUMethod slot_9 = {"slotCounterChanged", 1, param_slot_9 };
+00089     static const QUMethod slot_10 = {"slotEditRegExp1", 0, 0 };
+00090     static const QUMethod slot_11 = {"slotEditRegExp2", 0, 0 };
+00091     static const QUParameter param_slot_12[] = {
+00092        { 0, &static_QUType_bool, 0, QUParameter::In }
+00093     };
+00094     static const QUMethod slot_12 = {"slotToggleRegExp1", 1, param_slot_12 };
+00095     static const QUParameter param_slot_13[] = {
+00096        { 0, &static_QUType_bool, 0, QUParameter::In }
+00097     };
+00098     static const QUMethod slot_13 = {"slotToggleRegExp2", 1, param_slot_13 };
+00099     static const QMetaData slot_tbl[] = {
+00100        { "slotOk()", &slot_0, QMetaData::Public },
+00101        { "slotItem1Selected(int)", &slot_1, QMetaData::Public },
+00102        { "slotItem2Selected(int)", &slot_2, QMetaData::Public },
+00103        { "slotSecondCondition(int)", &slot_3, QMetaData::Public },
+00104        { "slotCondition1Selected(int)", &slot_4, QMetaData::Public },
+00105        { "slotCondition2Selected(int)", &slot_5, QMetaData::Public },
+00106        { "slotMatch1Changed(const QString&)", &slot_6, QMetaData::Public },
+00107        { "slotMatch2Changed(const QString&)", &slot_7, QMetaData::Public },
+00108        { "slotResetCounter()", &slot_8, QMetaData::Public },
+00109        { "slotCounterChanged(int)", &slot_9, QMetaData::Public },
+00110        { "slotEditRegExp1()", &slot_10, QMetaData::Public },
+00111        { "slotEditRegExp2()", &slot_11, QMetaData::Public },
+00112        { "slotToggleRegExp1(bool)", &slot_12, QMetaData::Public },
+00113        { "slotToggleRegExp2(bool)", &slot_13, QMetaData::Public }
+00114     };
+00115     metaObj = QMetaObject::new_metaobject(
+00116        "FilterEntryDialog", parentObject,
+00117        slot_tbl, 14,
+00118        0, 0,
+00119 #ifndef QT_NO_PROPERTIES
+00120        0, 0,
+00121        0, 0,
+00122 #endif // QT_NO_PROPERTIES
+00123        0, 0 );
+00124     cleanUp_FilterEntryDialog.setMetaObject( metaObj );
+00125     return metaObj;
+00126 }
+00127 
+00128 void* FilterEntryDialog::qt_cast( const char* clname )
+00129 {
+00130     if ( !qstrcmp( clname, "FilterEntryDialog" ) )
+00131        return this;
+00132     return FilterEntryDlg::qt_cast( clname );
+00133 }
+00134 
+00135 bool FilterEntryDialog::qt_invoke( int _id, QUObject* _o )
+00136 {
+00137     switch ( _id - staticMetaObject()->slotOffset() ) {
+00138     case 0: slotOk(); break;
+00139     case 1: slotItem1Selected((int)static_QUType_int.get(_o+1)); break;
+00140     case 2: slotItem2Selected((int)static_QUType_int.get(_o+1)); break;
+00141     case 3: slotSecondCondition((int)static_QUType_int.get(_o+1)); break;
+00142     case 4: slotCondition1Selected((int)static_QUType_int.get(_o+1)); break;
+00143     case 5: slotCondition2Selected((int)static_QUType_int.get(_o+1)); break;
+00144     case 6: slotMatch1Changed((const QString&)static_QUType_QString.get(_o+1)); break;
+00145     case 7: slotMatch2Changed((const QString&)static_QUType_QString.get(_o+1)); break;
+00146     case 8: slotResetCounter(); break;
+00147     case 9: slotCounterChanged((int)static_QUType_int.get(_o+1)); break;
+00148     case 10: slotEditRegExp1(); break;
+00149     case 11: slotEditRegExp2(); break;
+00150     case 12: slotToggleRegExp1((bool)static_QUType_bool.get(_o+1)); break;
+00151     case 13: slotToggleRegExp2((bool)static_QUType_bool.get(_o+1)); break;
+00152     default:
+00153        return FilterEntryDlg::qt_invoke( _id, _o );
+00154     }
+00155     return TRUE;
+00156 }
+00157 
+00158 bool FilterEntryDialog::qt_emit( int _id, QUObject* _o )
+00159 {
+00160     return FilterEntryDlg::qt_emit(_id,_o);
+00161 }
+00162 #ifndef QT_NO_PROPERTIES
+00163 
+00164 bool FilterEntryDialog::qt_property( int id, int f, QVariant* v)
+00165 {
+00166     return FilterEntryDlg::qt_property( id, f, v);
+00167 }
+00168 
+00169 bool FilterEntryDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00170 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterlist_8cpp-source.html b/doc/html/filterlist_8cpp-source.html new file mode 100644 index 0000000..9f3a679 --- /dev/null +++ b/doc/html/filterlist_8cpp-source.html @@ -0,0 +1,187 @@ + + +kshowmail: kshowmail/filterlist.cpp Source File + + + + + + +

filterlist.cpp

00001 /***************************************************************************
+00002                           filterlist.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Sep 25 2003
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <kdebug.h>
+00019 #include "filterlist.h"
+00020 
+00021 FilterList::FilterList()
+00022 {
+00023        setAutoDelete (true);
+00024 }
+00025 
+00026 FilterList::~FilterList()
+00027 {
+00028 }
+00029 
+00030 void FilterList::setCombo (QComboBox* combo, int nIndex)
+00031 {
+00032        combo->clear ();
+00033        for (FilterElem* pElem = first(); pElem; pElem = next())
+00034        {
+00035               combo->insertItem (pElem->toString());
+00036        }
+00037        if (nIndex >= 0)
+00038        {
+00039               at (nIndex);
+00040               combo->setCurrentItem (nIndex);
+00041        }
+00042 }
+00043 
+00044 FilterList& FilterList::operator = (FilterList& list)
+00045 {
+00046        clear ();
+00047        int nIndex = list.at ();
+00048        for (FilterElem* item = list.first (); item; item = list.next ())
+00049        {
+00050               inSort (new FilterElem (*item));
+00051        }
+00052        at (nIndex);
+00053        return *this;
+00054 }
+00055 
+00056 QCollection::Item FilterList::newItem (QCollection::Item d)
+00057 {
+00058        return new FilterElem (*(FilterElem*)d);
+00059 }
+00060 
+00061 int FilterList::compareItems (QCollection::Item item1, QCollection::Item item2 )
+00062 {
+00063        FilterElem* entry1 = (FilterElem*) item1;
+00064        FilterElem* entry2 = (FilterElem*) item2;
+00065 
+00066   // we sort the high counters first !
+00067   if (entry1->getCounter() < entry2->getCounter())
+00068     return 1;
+00069   else if (entry1->getCounter() == entry2->getCounter())
+00070   {
+00071     // for equal counters, we sort alphabetical
+00072     if (entry1->toString() > entry2->toString())
+00073                 return 1;
+00074          else if (entry1->toString() == entry2->toString())
+00075                 return 0;
+00076     else
+00077       return -1;
+00078   }
+00079        else return -1;
+00080 }
+00081 
+00082 void FilterList::readOptions (KConfig* config)
+00083 {
+00084        bool goon = true;
+00085        int i = 0;
+00086        while (goon)
+00087        {
+00088        config->setGroup (QString("filter%1").arg(i));
+00089               QString name (config->readEntry ("name"));
+00090               if (!name.isEmpty ())
+00091               {
+00092       unsigned int counter = config->readNumEntry ("counter");
+00093       FilterRecord::filterType type = (FilterRecord::filterType)config->readNumEntry ("type1");
+00094                      FilterRecord::expressionType expr = (FilterRecord::expressionType)config->readNumEntry ("expression1");
+00095       QString match = config->readEntry ("match1");
+00096       bool caseSensitive = (bool)config->readNumEntry ("casesensitive1", 0);
+00097       bool regExp = (bool)config->readNumEntry ("regexp1", 0);
+00098 
+00099       FilterElem* filter = new FilterElem (FilterRecord(type, expr, match, caseSensitive, regExp));
+00100       filter->setCounter( counter );
+00101 
+00102       FilterElem::secondCondition secondCondition = (FilterElem::secondCondition)config->readNumEntry ("secondcondition");
+00103       type = (FilterRecord::filterType)config->readNumEntry ("type2");
+00104                      expr = (FilterRecord::expressionType)config->readNumEntry ("expression2");
+00105       match = config->readEntry ("match2");
+00106       caseSensitive = (bool)config->readNumEntry ("casesensitive2", 0);
+00107       regExp = (bool)config->readNumEntry ("regexp2", 0);
+00108 
+00109       filter->setSecondCondition(secondCondition, FilterRecord (type, expr, match, caseSensitive, regExp));
+00110 
+00111       inSort (filter);
+00112                      i++;
+00113               }
+00114               else
+00115                      goon = false;
+00116        }
+00117        if (i > 0)
+00118               at (0);
+00119   sort ();
+00120 }
+00121 
+00122 void FilterList::saveOptions (KConfig* config)
+00123 {
+00124   //at first we remove all filter setups from the config
+00125   int filterNumber = 0;     //number of deleted filter
+00126   bool ready = false;       //TRUE - all filters are deleted
+00127 
+00128   while( !ready ) //loop until the last filter setup was removed (ready == true)
+00129   {
+00130     //do we have a setup with the current number (filterNumber) ?
+00131     if( config->hasGroup( QString( CONFIG_GROUP_FILTER ) + QString( "%1" ).arg( filterNumber ) ) )
+00132     {
+00133       //remove group
+00134       config->deleteGroup( QString( CONFIG_GROUP_FILTER ) + QString( "%1" ).arg( filterNumber ) );
+00135 
+00136       //process next filter
+00137       filterNumber++;
+00138     }
+00139     else
+00140       ready = true;
+00141   }
+00142 
+00143   //now we write the configured filters into the config
+00144        kdDebug () << "FilterList::saveOptions" << endl;
+00145        for (unsigned int i = 0; i < count (); i++)
+00146        {
+00147        config->setGroup (QString ("filter%1").arg(i));
+00148               config->writeEntry ("name", at(i)->toString());
+00149     config->writeEntry ("counter", at(i)->getCounter() );
+00150 
+00151     config->writeEntry ("type1", at(i)->_filter1._type);
+00152               config->writeEntry ("expression1", at(i)->_filter1._expression);
+00153               config->writeEntry ("match1", at(i)->_filter1._match);
+00154     config->writeEntry ("casesensitive1", at(i)->_filter1._CaseSensitive);
+00155     config->writeEntry ("regexp1", at(i)->_filter1._RegExp);
+00156 
+00157     config->writeEntry ("secondcondition", at(i)->_secondCondition);
+00158 
+00159     config->writeEntry ("type2", at(i)->_filter2._type);
+00160               config->writeEntry ("expression2", at(i)->_filter2._expression);
+00161               config->writeEntry ("match2", at(i)->_filter2._match);
+00162     config->writeEntry ("casesensitive2", at(i)->_filter2._CaseSensitive);
+00163     config->writeEntry ("regexp2", at(i)->_filter2._RegExp);
+00164        }
+00165 }
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/filterlist_8h-source.html b/doc/html/filterlist_8h-source.html new file mode 100644 index 0000000..576d7bf --- /dev/null +++ b/doc/html/filterlist_8h-source.html @@ -0,0 +1,74 @@ + + +kshowmail: kshowmail/filterlist.h Source File + + + + + + +

filterlist.h

00001 /***************************************************************************
+00002                           filterlist.h  -  description
+00003                              -------------------
+00004     begin                : Wed Sep 25 2003
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef FILTERLIST_H
+00019 #define FILTERLIST_H
+00020 
+00021 //Qt headers
+00022 #include <qptrlist.h>
+00023 #include <qcombobox.h>
+00024 
+00025 //KDE headers
+00026 #include <kconfig.h>
+00027 
+00028 //KShowmail headers
+00029 #include "filterelem.h"
+00030 #include "constants.h"
+00031 
+00035 class FilterElem;
+00036 
+00037 class FilterList : public QPtrList<FilterElem>
+00038 {
+00039   public:
+00040 
+00041     FilterList ();
+00042     virtual ~FilterList();
+00043     FilterList& operator = (FilterList& right);
+00044     void setCombo (QComboBox* combo, int nIndex);
+00045     void readOptions (KConfig* config);
+00046 
+00051   void saveOptions (KConfig* config);
+00052 
+00053   protected:
+00054 
+00055     virtual int compareItems (QCollection::Item item1, QCollection::Item item2);
+00056     virtual QCollection::Item newItem (QCollection::Item d);
+00057 };
+00058 
+00059 #endif
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions.html b/doc/html/functions.html new file mode 100644 index 0000000..25b17b1 --- /dev/null +++ b/doc/html/functions.html @@ -0,0 +1,107 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- _ -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x61.html b/doc/html/functions_0x61.html new file mode 100644 index 0000000..643919d --- /dev/null +++ b/doc/html/functions_0x61.html @@ -0,0 +1,136 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- a -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html new file mode 100644 index 0000000..4812c96 --- /dev/null +++ b/doc/html/functions_0x62.html @@ -0,0 +1,130 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- b -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html new file mode 100644 index 0000000..bf354fe --- /dev/null +++ b/doc/html/functions_0x63.html @@ -0,0 +1,285 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- c -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html new file mode 100644 index 0000000..04133c2 --- /dev/null +++ b/doc/html/functions_0x64.html @@ -0,0 +1,115 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- d -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html new file mode 100644 index 0000000..79c86ee --- /dev/null +++ b/doc/html/functions_0x65.html @@ -0,0 +1,79 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- e -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html new file mode 100644 index 0000000..169c87c --- /dev/null +++ b/doc/html/functions_0x66.html @@ -0,0 +1,116 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- f -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html new file mode 100644 index 0000000..f3c2152 --- /dev/null +++ b/doc/html/functions_0x67.html @@ -0,0 +1,225 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- g -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x68.html b/doc/html/functions_0x68.html new file mode 100644 index 0000000..629da22 --- /dev/null +++ b/doc/html/functions_0x68.html @@ -0,0 +1,91 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- h -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html new file mode 100644 index 0000000..89cf6ec --- /dev/null +++ b/doc/html/functions_0x69.html @@ -0,0 +1,110 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- i -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x6b.html b/doc/html/functions_0x6b.html new file mode 100644 index 0000000..35ca82f --- /dev/null +++ b/doc/html/functions_0x6b.html @@ -0,0 +1,92 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- k -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html new file mode 100644 index 0000000..bbc1cbd --- /dev/null +++ b/doc/html/functions_0x6c.html @@ -0,0 +1,126 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- l -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html new file mode 100644 index 0000000..58b727d --- /dev/null +++ b/doc/html/functions_0x6d.html @@ -0,0 +1,215 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- m -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html new file mode 100644 index 0000000..d2680a6 --- /dev/null +++ b/doc/html/functions_0x6e.html @@ -0,0 +1,108 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- n -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html new file mode 100644 index 0000000..72dab42 --- /dev/null +++ b/doc/html/functions_0x6f.html @@ -0,0 +1,85 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- o -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html new file mode 100644 index 0000000..9fff095 --- /dev/null +++ b/doc/html/functions_0x70.html @@ -0,0 +1,97 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- p -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x71.html b/doc/html/functions_0x71.html new file mode 100644 index 0000000..0a2baeb --- /dev/null +++ b/doc/html/functions_0x71.html @@ -0,0 +1,81 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- q -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html new file mode 100644 index 0000000..270c5e1 --- /dev/null +++ b/doc/html/functions_0x72.html @@ -0,0 +1,103 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- r -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html new file mode 100644 index 0000000..5ac62b9 --- /dev/null +++ b/doc/html/functions_0x73.html @@ -0,0 +1,525 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- s -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html new file mode 100644 index 0000000..ffba8af --- /dev/null +++ b/doc/html/functions_0x74.html @@ -0,0 +1,126 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- t -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html new file mode 100644 index 0000000..52420b1 --- /dev/null +++ b/doc/html/functions_0x75.html @@ -0,0 +1,82 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- u -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html new file mode 100644 index 0000000..7da72a7 --- /dev/null +++ b/doc/html/functions_0x76.html @@ -0,0 +1,73 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- v -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_0x7e.html b/doc/html/functions_0x7e.html new file mode 100644 index 0000000..aed2cc2 --- /dev/null +++ b/doc/html/functions_0x7e.html @@ -0,0 +1,147 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all class members with links to the classes they belong to: +

+

- ~ -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html new file mode 100644 index 0000000..3ee4014 --- /dev/null +++ b/doc/html/functions_enum.html @@ -0,0 +1,55 @@ + + +kshowmail.kdevelop: Class Members - Enumerations + + + + + + + +  +

+

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html new file mode 100644 index 0000000..aae4c5a --- /dev/null +++ b/doc/html/functions_func.html @@ -0,0 +1,109 @@ + + +kshowmail.kdevelop: Class Members - Functions + + + + + + + +
+ +
+ +

+  +

+

- a -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html new file mode 100644 index 0000000..85eb8ee --- /dev/null +++ b/doc/html/functions_rela.html @@ -0,0 +1,47 @@ + + +kshowmail.kdevelop: Class Members - Related Functions + + + + + + + +  +

+

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 0000000..4f8dea2 --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,86 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- _ -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x61.html b/doc/html/functions_vars_0x61.html new file mode 100644 index 0000000..027bdb0 --- /dev/null +++ b/doc/html/functions_vars_0x61.html @@ -0,0 +1,94 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- a -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x62.html b/doc/html/functions_vars_0x62.html new file mode 100644 index 0000000..16430a1 --- /dev/null +++ b/doc/html/functions_vars_0x62.html @@ -0,0 +1,123 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- b -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x63.html b/doc/html/functions_vars_0x63.html new file mode 100644 index 0000000..cad8c07 --- /dev/null +++ b/doc/html/functions_vars_0x63.html @@ -0,0 +1,192 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- c -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x64.html b/doc/html/functions_vars_0x64.html new file mode 100644 index 0000000..3b25e8b --- /dev/null +++ b/doc/html/functions_vars_0x64.html @@ -0,0 +1,83 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- d -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x65.html b/doc/html/functions_vars_0x65.html new file mode 100644 index 0000000..8786e67 --- /dev/null +++ b/doc/html/functions_vars_0x65.html @@ -0,0 +1,70 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- e -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x66.html b/doc/html/functions_vars_0x66.html new file mode 100644 index 0000000..5fa8c93 --- /dev/null +++ b/doc/html/functions_vars_0x66.html @@ -0,0 +1,82 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- f -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x67.html b/doc/html/functions_vars_0x67.html new file mode 100644 index 0000000..5a51a01 --- /dev/null +++ b/doc/html/functions_vars_0x67.html @@ -0,0 +1,90 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- g -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x68.html b/doc/html/functions_vars_0x68.html new file mode 100644 index 0000000..a9b7176 --- /dev/null +++ b/doc/html/functions_vars_0x68.html @@ -0,0 +1,70 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- h -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x69.html b/doc/html/functions_vars_0x69.html new file mode 100644 index 0000000..ac629fa --- /dev/null +++ b/doc/html/functions_vars_0x69.html @@ -0,0 +1,70 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- i -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x6b.html b/doc/html/functions_vars_0x6b.html new file mode 100644 index 0000000..6678cd8 --- /dev/null +++ b/doc/html/functions_vars_0x6b.html @@ -0,0 +1,70 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- k -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x6c.html b/doc/html/functions_vars_0x6c.html new file mode 100644 index 0000000..4d45a74 --- /dev/null +++ b/doc/html/functions_vars_0x6c.html @@ -0,0 +1,98 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- l -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x6d.html b/doc/html/functions_vars_0x6d.html new file mode 100644 index 0000000..06d49ce --- /dev/null +++ b/doc/html/functions_vars_0x6d.html @@ -0,0 +1,204 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- m -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x6f.html b/doc/html/functions_vars_0x6f.html new file mode 100644 index 0000000..9bcd48c --- /dev/null +++ b/doc/html/functions_vars_0x6f.html @@ -0,0 +1,67 @@ + + +kshowmail: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- o -

+
Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x70.html b/doc/html/functions_vars_0x70.html new file mode 100644 index 0000000..94558da --- /dev/null +++ b/doc/html/functions_vars_0x70.html @@ -0,0 +1,80 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- p -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x71.html b/doc/html/functions_vars_0x71.html new file mode 100644 index 0000000..2fb3b16 --- /dev/null +++ b/doc/html/functions_vars_0x71.html @@ -0,0 +1,72 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- q -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x73.html b/doc/html/functions_vars_0x73.html new file mode 100644 index 0000000..17aa13a --- /dev/null +++ b/doc/html/functions_vars_0x73.html @@ -0,0 +1,108 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- s -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/functions_vars_0x74.html b/doc/html/functions_vars_0x74.html new file mode 100644 index 0000000..cbf711a --- /dev/null +++ b/doc/html/functions_vars_0x74.html @@ -0,0 +1,105 @@ + + +kshowmail.kdevelop: Class Members - Variables + + + + + + + +
+ +
+ +

+  +

+

- t -

+
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html new file mode 100644 index 0000000..43c60a5 --- /dev/null +++ b/doc/html/hierarchy.html @@ -0,0 +1,72 @@ + + +kshowmail.kdevelop: Hierarchical Index + + + + + + +

kshowmail.kdevelop Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..09d5e23 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,22 @@ + + +kshowmail.kdevelop: Main Page + + + + + +

kshowmail.kdevelop Documentation

+

+

3.3


Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kfeedback_8cpp-source.html b/doc/html/kfeedback_8cpp-source.html new file mode 100644 index 0000000..32b9007 --- /dev/null +++ b/doc/html/kfeedback_8cpp-source.html @@ -0,0 +1,515 @@ + + +kshowmail: kshowmail/kfeedback.cpp Source File + + + + + + +

kfeedback.cpp

00001 
+00002 /*
+00003  *   File name:      kfeedback.cpp
+00004  *   Summary: User feedback form
+00005  *   License: LGPL - See file COPYING.LIB for details.
+00006  *   Author:  Stefan Hundhammer <sh@suse.de>
+00007  *   modified by Eggert Ehmke <eggert.ehmke@berlin.de>
+00008  *
+00009  *   Updated: 2002-02-24
+00010  *
+00011  *   $Id: kfeedback_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $
+00012  *
+00013  */
+00014 
+00015 
+00016 #include <qheader.h>
+00017 #include <qlayout.h>
+00018 #include <qlabel.h>
+00019 #include <qmultilineedit.h>
+00020 #include <qhbox.h>
+00021 
+00022 #include <kglobal.h>
+00023 #include <kapplication.h>
+00024 #include <klocale.h>
+00025 #include <kdebug.h>
+00026 #include <kaboutdata.h>
+00027 #include <kiconloader.h>
+00028 #include <kurl.h>
+00029 #include <kdeversion.h>
+00030 
+00031 #include "kfeedback.h"
+00032 
+00033 
+00034 KFeedbackDialog::KFeedbackDialog( const QString & feedbackMailAddress, const QString & helpTopic )
+00035      : KDialogBase( Plain, i18n( "Feedback" ), Apply | ( helpTopic.isEmpty() ? Cancel : Cancel | Help ), Apply )
+00036 {
+00037     QVBoxLayout * layout = new QVBoxLayout( plainPage(), 0, spacingHint() );
+00038     // setButtonApplyText( i18n( "&Mail this..." ) ); deprecated
+00039     setButtonApply(KGuiItem (i18n( "&Mail this..." )));
+00040 
+00041     if ( ! helpTopic.isEmpty() )
+00042        setHelp( helpTopic );
+00043 
+00044     _form = new KFeedbackForm( feedbackMailAddress, plainPage() );
+00045     CHECK_PTR( _form );
+00046 
+00047     layout->addWidget( _form );
+00048     checkSendButton();
+00049 
+00050     connect( this,  SIGNAL( applyClicked() ),
+00051             _form, SLOT  ( sendMail()  ) );
+00052 
+00053     connect( _form, SIGNAL( mailSent()    ),
+00054             this,  SLOT  ( hide()  ) );
+00055 
+00056     connect( _form, SIGNAL( mailSent()    ),
+00057             this,  SIGNAL( mailSent()  ) );
+00058 
+00059     connect( _form, SIGNAL( checkComplete()   ),
+00060             this,  SLOT  ( checkSendButton() ) );
+00061 }
+00062 
+00063 
+00064 KFeedbackDialog::~KFeedbackDialog()
+00065 {
+00066     // NOP
+00067 }
+00068 
+00069 
+00070 void
+00071 KFeedbackDialog::checkSendButton()
+00072 {
+00073     enableButtonApply( _form->readyToSend() );
+00074 }
+00075 
+00076 
+00077 
+00078 
+00079 
+00080 KFeedbackForm::KFeedbackForm( const QString &    feedbackMailAddress,
+00081                            QWidget *             parent )
+00082     : QVBox( parent )
+00083     , _feedbackMailAddress( feedbackMailAddress )
+00084 {
+00085     //
+00086     // Explanation above the question list
+00087     //
+00088 
+00089     QLabel * label = new QLabel( i18n( "<p><b>Please tell us your opinion about this program.</b></p>"
+00090                                    "<p>You will be able to review everything in your mailer "
+00091                                    "before any mail is sent.<br>"
+00092                                    "Nothing will be sent behind your back.</p>"
+00093                                    ), this );
+00094     //
+00095     // Question list
+00096     //
+00097 
+00098     _questionList = new KFeedbackQuestionList( this );
+00099     CHECK_PTR( _questionList );
+00100 
+00101     connect( _questionList, SIGNAL( checkComplete()     ),
+00102             this,        SLOT  ( slotCheckComplete() ) );
+00103 
+00104 
+00105     //
+00106     // Explanation below the question list
+00107     //
+00108 
+00109     QHBox * hbox = new QHBox( this );
+00110     CHECK_PTR( hbox );
+00111 
+00112     QSizePolicy pol( QSizePolicy::Fixed, QSizePolicy::Fixed ); // hor / vert
+00113 
+00114     label = new QLabel( i18n( "Questions marked with " ), hbox );
+00115     CHECK_PTR( label );
+00116     label->setSizePolicy( pol );
+00117 
+00118     label = new QLabel( hbox );
+00119     CHECK_PTR( label );
+00120     label->setPixmap( KGlobal::iconLoader()->loadIcon( "edit", KIcon::Small ) );
+00121     label->setSizePolicy( pol );
+00122 
+00123     label = new QLabel( i18n( " must be answered before a mail can be sent.") , hbox );
+00124     CHECK_PTR( label );
+00125     label->setSizePolicy( pol );
+00126 
+00127     new QWidget( hbox );    // Fill any leftover space to the right.
+00128 
+00129 
+00130     //
+00131     // Free-text comment field
+00132     //
+00133 
+00134     label = new QLabel( "\n" + i18n( "&Additional comments:" ), this );      CHECK_PTR( label );
+00135     _comment = new QMultiLineEdit( this );                            CHECK_PTR( _comment );
+00136 
+00137     label->setBuddy( _comment );
+00138 #if (QT_VERSION < 300)
+00139     _comment->setFixedVisibleLines( 5 );
+00140 #endif
+00141     _comment->setWordWrap( QMultiLineEdit::FixedColumnWidth );
+00142     _comment->setWrapColumnOrWidth( 70 );
+00143 }
+00144 
+00145 
+00146 KFeedbackForm::~KFeedbackForm()
+00147 {
+00148     // NOP
+00149 }
+00150 
+00151 
+00152 void
+00153 KFeedbackForm::sendMail()
+00154 {
+00155     //
+00156     // Build mail subject
+00157     //
+00158 
+00159     QString subject;
+00160 
+00161     const KAboutData * aboutData = KGlobal::instance()->aboutData();
+00162 
+00163     if ( aboutData )
+00164       subject = aboutData->programName() + "-" + aboutData->version();
+00165     else
+00166       subject = kapp->name();
+00167 
+00168     subject += " user feedback";
+00169 
+00170 
+00171     //
+00172     // Build mail body
+00173     //
+00174 
+00175     QString body = subject + "\n\n"
+00176        + formatComment()
+00177        + _questionList->result();
+00178 
+00179 
+00180     //
+00181     // Build "mailto:" URL from all this
+00182     //
+00183 
+00184     KURL mail;
+00185     mail.setProtocol( "mailto" );
+00186     mail.setPath( _feedbackMailAddress );
+00187     mail.setQuery( "?subject="     + KURL::encode_string( subject ) +
+00188                  "&body="   + KURL::encode_string( body ) );
+00189 
+00190     // TODO: Check for maximum command line length.
+00191     //
+00192     // The hard part with this is how to get this from all that 'autoconf'
+00193     // stuff into 'config.h' or some other include file without hardcoding
+00194     // anything - this is too system dependent.
+00195 
+00196 
+00197     //
+00198     // Actually send mail
+00199     //
+00200 
+00201     kapp->invokeMailer( mail );
+00202 
+00203     emit mailSent();
+00204 }
+00205 
+00206 
+00207 void
+00208 KFeedbackForm::slotCheckComplete()
+00209 {
+00210     emit checkComplete();
+00211 }
+00212 
+00213 
+00214 QString
+00215 KFeedbackForm::formatComment()
+00216 {
+00217     QString result = _comment->text();
+00218 
+00219     if ( ! result.isEmpty() )
+00220     {
+00221        result = "<comment>\n" + result + "\n</comment>\n\n";
+00222     }
+00223 
+00224     return result;
+00225 }
+00226 
+00227 
+00228 bool
+00229 KFeedbackForm::readyToSend()
+00230 {
+00231     return _questionList->isComplete();
+00232 }
+00233 
+00234 
+00235 
+00236 
+00237 
+00238 
+00239 KFeedbackQuestionList::KFeedbackQuestionList( QWidget *parent )
+00240     : QListView( parent )
+00241 {
+00242     addColumn( "" );
+00243     header()->hide();
+00244 }
+00245 
+00246 
+00247 KFeedbackQuestionList::~KFeedbackQuestionList()
+00248 {
+00249     // NOP
+00250 }
+00251 
+00252 
+00253 bool
+00254 KFeedbackQuestionList::isComplete()
+00255 {
+00256     KFeedbackQuestion * question = firstQuestion();
+00257 
+00258     while ( question )
+00259     {
+00260        if ( question->isRequired() && ! question->isAnswered() )
+00261            return false;
+00262 
+00263        question = question->nextQuestion();
+00264     }
+00265 
+00266     return true;
+00267 }
+00268 
+00269 
+00270 QString KFeedbackQuestionList::result()
+00271 {
+00272     QString res;
+00273     KFeedbackQuestion * question = firstQuestion();
+00274 
+00275     while ( question )
+00276     {
+00277       res += question->result();
+00278 
+00279       question = question->nextQuestion();
+00280     }
+00281     res += "Compiled on KDE version: ";
+00282     res += KDE_VERSION_STRING;
+00283 
+00284     return res;
+00285 }
+00286 
+00287 
+00288 KFeedbackQuestion* KFeedbackQuestionList::addQuestion( const QString &       text,
+00289                                 const QString &  id,
+00290                                 bool             exclusiveAnswer,
+00291                                 bool             required )
+00292 {
+00293     KFeedbackQuestion * question = new KFeedbackQuestion( this, text, id,
+00294                                                    exclusiveAnswer,
+00295                                                    required );
+00296     CHECK_PTR( question );
+00297 
+00298     return question;
+00299 }
+00300 
+00301 
+00302 void
+00303 KFeedbackQuestionList::addYesNoQuestion( const QString &       text,
+00304                                     const QString &     id,
+00305                                     bool                required )
+00306 {
+00307 
+00308     KFeedbackQuestion * question = new KFeedbackQuestion( this, text, id,
+00309                                                    true,       // exclusive
+00310                                                    required );
+00311     CHECK_PTR( question );
+00312     question->addAnswer( i18n( "yes" ), "yes" );
+00313     question->addAnswer( i18n( "no"  ), "no"  );
+00314 }
+00315 
+00316 
+00317 void
+00318 KFeedbackQuestionList::questionAnswered()
+00319 {
+00320     emit checkComplete();
+00321 }
+00322 
+00323 void
+00324 KFeedbackQuestionList::questionAdded( KFeedbackQuestion * question)
+00325 {
+00326     if ( question->isRequired() )
+00327        emit checkComplete();
+00328 }
+00329 
+00330 
+00331 
+00332 
+00333 
+00334 static int nextNo = 0;
+00335 
+00336 KFeedbackQuestion::KFeedbackQuestion( KFeedbackQuestionList *  parent,
+00337                                   const QString &              text,
+00338                                   const QString &              id,
+00339                                   bool                  exclusiveAnswer,
+00340                                   bool                  required,
+00341                                   bool                  open   )
+00342     : QCheckListItem( parent, text )
+00343     , _id( id )
+00344     , _exclusiveAnswer( exclusiveAnswer )
+00345     , _required( required )
+00346 {
+00347     if ( required )
+00348     {
+00349        setPixmap( 0, KGlobal::iconLoader()->loadIcon( "edit", KIcon::Small ) );
+00350     }
+00351 
+00352     setOpen( open );
+00353     _no = nextNo++;
+00354 
+00355     parent->questionAdded( this );
+00356 }
+00357 
+00358 
+00359 void
+00360 KFeedbackQuestion::addAnswer( const QString & text,
+00361                            const QString & id   )
+00362 {
+00363     new KFeedbackAnswer( this, text, id, _exclusiveAnswer );
+00364 }
+00365 
+00366 
+00367 bool
+00368 KFeedbackQuestion::isAnswered()
+00369 {
+00370     if ( ! _exclusiveAnswer )
+00371     {
+00377        return true;
+00378     }
+00379 
+00380 
+00387     KFeedbackAnswer *answer = firstAnswer();
+00388 
+00389     while ( answer )
+00390     {
+00391        if ( answer->isChecked() )
+00392            return true;
+00393 
+00394        answer = answer->nextAnswer();
+00395     }
+00396 
+00397     return false;
+00398 }
+00399 
+00400 
+00401 QString
+00402 KFeedbackQuestion::result()
+00403 {
+00404     QString res;
+00405     int answers = 0;
+00406 
+00407     KFeedbackAnswer *answer = firstAnswer();
+00408 
+00409     while ( answer )
+00410     {
+00411        if ( answer->isChecked() )
+00412        {
+00413            res += _id + "=\"" + answer->id() + "\"\n";
+00414            answers++;
+00415        }
+00416 
+00417        answer = answer->nextAnswer();
+00418     }
+00419 
+00420     if ( answers > 1 )
+00421     {
+00422        res = "\n" + res + "\n";
+00423     }
+00424 
+00425     return res;
+00426 }
+00427 
+00428 
+00429 QString
+00430 KFeedbackQuestion::text()
+00431 {
+00432     return QCheckListItem::text(0);
+00433 }
+00434 
+00435 
+00436 QString
+00437 KFeedbackQuestion::key( int, bool ) const
+00438 {
+00439     QString no;
+00440     no.sprintf( "%08d", _no );
+00441 
+00442     return no;
+00443 }
+00444 
+00445 
+00446 KFeedbackQuestionList *
+00447 KFeedbackQuestion::questionList() const
+00448 {
+00449     return dynamic_cast<KFeedbackQuestionList *>( listView() );
+00450 }
+00451 
+00452 
+00453 
+00454 
+00455 
+00456 
+00457 
+00458 KFeedbackAnswer::KFeedbackAnswer( KFeedbackQuestion *   parent,
+00459                               const QString &    text,
+00460                               const QString &    id,
+00461                               bool               exclusive )
+00462     : QCheckListItem( parent,
+00463                     text,
+00464                     exclusive
+00465                     ? QCheckListItem::RadioButton
+00466                     : QCheckListItem::CheckBox )
+00467     , _id( id )
+00468 {
+00469     _no = nextNo++;
+00470 }
+00471 
+00472 
+00473 QString
+00474 KFeedbackAnswer::text()
+00475 {
+00476     return QCheckListItem::text(0);
+00477 }
+00478 
+00479 
+00480 QString
+00481 KFeedbackAnswer::key( int, bool ) const
+00482 {
+00483     QString no;
+00484     no.sprintf( "%08d", _no );
+00485 
+00486     return no;
+00487 }
+00488 
+00489 
+00490 void
+00491 KFeedbackAnswer::stateChange( bool newState )
+00492 {
+00493     if ( newState && question()->isRequired() )
+00494     {
+00495        KFeedbackQuestionList * list = question()->questionList();
+00496 
+00497        if ( list )
+00498            list->questionAnswered();
+00499     }
+00500 }
+00501 
+00502 
+00503 
+00504 // EOF
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kfeedback_8h-source.html b/doc/html/kfeedback_8h-source.html new file mode 100644 index 0000000..c33797e --- /dev/null +++ b/doc/html/kfeedback_8h-source.html @@ -0,0 +1,257 @@ + + +kshowmail: kshowmail/kfeedback.h Source File + + + + + + +

kfeedback.h

00001 /*
+00002  *   File name:      kfeedback.h
+00003  *   Summary: User feedback form and mailing utilities
+00004  *   License: LGPL - See file COPYING.LIB for details.
+00005  *   Author:  Stefan Hundhammer <sh@suse.de>
+00006  *
+00007  *   Updated: 2002-02-24
+00008  *
+00009  *   $Id: kfeedback_8h-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $
+00010  *
+00011  */
+00012 
+00013 
+00014 #ifndef KFeedback_h
+00015 #define KFeedback_h
+00016 
+00017 #ifdef HAVE_CONFIG_H
+00018 #include <config.h>
+00019 #endif
+00020 
+00021 #include <qlistview.h>
+00022 #include <qvbox.h>
+00023 #include <kdialogbase.h>
+00024 
+00025 
+00026 #ifndef NOT_USED
+00027 #    define NOT_USED(PARAM) ( (void) (PARAM) )
+00028 #endif
+00029 
+00030 
+00031 class KFeedbackForm;
+00032 class KFeedbackQuestionList;
+00033 class KFeedbackQuestion;
+00034 class KFeedbackAnswer;
+00035 class QMultiLineEdit;
+00036 
+00037 
+00042 class KFeedbackDialog: public KDialogBase
+00043 {
+00044     Q_OBJECT
+00045 
+00046 public:
+00047 
+00051     KFeedbackDialog( const QString & feedbackMailAddress,
+00052                    const QString & helpTopic = QString::null );
+00053 
+00054 
+00058     virtual ~KFeedbackDialog();
+00059 
+00060 
+00064     KFeedbackForm *form() { return _form; }
+00065 
+00066 
+00067 public slots:
+00068 
+00073     void checkSendButton();
+00074 
+00075 
+00076 signals:
+00083     void mailSent();
+00084 
+00085 
+00086 protected:
+00087 
+00088     KFeedbackForm *  _form;
+00089 };
+00090 
+00091 
+00098 class KFeedbackForm: public QVBox
+00099 {
+00100     Q_OBJECT
+00101 
+00102 public:
+00106     KFeedbackForm( const QString & feedbackMailAddress,
+00107                  QWidget *         parent );
+00108 
+00112     virtual ~KFeedbackForm();
+00113 
+00114 
+00115 public slots:
+00116 
+00128      virtual void sendMail();
+00129 
+00130 
+00131 public:
+00132 
+00137     virtual bool readyToSend();
+00138 
+00142     KFeedbackQuestionList * questionList() { return _questionList; }
+00143 
+00144 
+00145 signals:
+00152     void mailSent();
+00153 
+00159     void checkComplete();
+00160 
+00161 
+00162 protected slots:
+00166     void slotCheckComplete();
+00167 
+00168 
+00169 protected:
+00170 
+00174     QString formatComment();
+00175 
+00176 
+00177     QString                 _feedbackMailAddress;
+00178     KFeedbackQuestionList * _questionList;
+00179     QMultiLineEdit *        _comment;
+00180 };
+00181 
+00182 
+00183 
+00187 class KFeedbackQuestionList: public QListView
+00188 {
+00189     Q_OBJECT
+00190 
+00191 public:
+00192 
+00196     KFeedbackQuestionList( QWidget *parent );
+00197 
+00201     virtual ~KFeedbackQuestionList();
+00202 
+00207     virtual bool isComplete();
+00208 
+00212     QString result();
+00213 
+00231     KFeedbackQuestion * addQuestion( const QString &    text,
+00232                                  const QString & id,
+00233                                  bool            exclusiveAnswer      = true,
+00234                                  bool            required      = false );
+00235 
+00239     void addYesNoQuestion( const QString &       text,
+00240                         const QString &   id,
+00241                         bool              required = false );
+00242 
+00247     KFeedbackQuestion * firstQuestion() const
+00248        { return (KFeedbackQuestion *) QListView::firstChild(); }
+00249 
+00255     void questionAnswered();
+00256 
+00262     void questionAdded( KFeedbackQuestion * question );
+00263 
+00264 signals:
+00268     void checkComplete();
+00269 };
+00270 
+00271 
+00275 class KFeedbackQuestion: public QCheckListItem
+00276 {
+00277 public:
+00278 
+00300     KFeedbackQuestion( KFeedbackQuestionList *   parent,
+00301                      const QString &             text,
+00302                      const QString &             id,
+00303                      bool                 exclusiveAnswer      = true,
+00304                      bool                 required      = false,
+00305                      bool                 open          = true );
+00306 
+00313     void addAnswer( const QString & text,
+00314                   const QString & id   );
+00315 
+00319     bool isRequired() { return _required; }
+00320 
+00324     bool isAnswered();
+00325 
+00334     QString result();
+00335 
+00339     QString id() { return _id; }
+00340 
+00344     QString text();
+00345 
+00349     bool exclusiveAnswer() { return _exclusiveAnswer; }
+00350 
+00351 
+00357     virtual QString key( int column, bool ascending ) const;
+00358 
+00362     KFeedbackQuestion * nextQuestion() const
+00363        { return (KFeedbackQuestion *) QListViewItem::nextSibling(); }
+00364 
+00369     KFeedbackAnswer * firstAnswer() const
+00370        { return (KFeedbackAnswer *) QListViewItem::firstChild(); }
+00371 
+00376     KFeedbackQuestionList * questionList() const;
+00377 
+00378 
+00379 protected:
+00380 
+00381     QString   _id;
+00382     bool      _exclusiveAnswer;
+00383     bool      _required;
+00384     int              _no;
+00385 };
+00386 
+00387 
+00388 class KFeedbackAnswer: public QCheckListItem
+00389 {
+00390 public:
+00397     KFeedbackAnswer( KFeedbackQuestion *  parent,
+00398                    const QString &        text,
+00399                    const QString &        id,
+00400                    bool                   exclusive = true );
+00401 
+00405     QString id() { return _id; }
+00406 
+00410     QString text();
+00411 
+00415     bool isExclusive() { return _exclusive; }
+00416 
+00420     bool isChecked() { return QCheckListItem::isOn(); }
+00421 
+00425     KFeedbackAnswer * nextAnswer() const
+00426        { return (KFeedbackAnswer *) QListViewItem::nextSibling(); }
+00427 
+00431     KFeedbackQuestion * question() const
+00432        { return (KFeedbackQuestion *) QListViewItem::parent(); }
+00433 
+00439     virtual QString key( int column, bool ascending ) const;
+00440 
+00441 
+00449     virtual void stateChange( bool newState );
+00450 
+00451 protected:
+00452 
+00453     QString   _id;
+00454     bool      _exclusive;
+00455     int              _no;
+00456 };
+00457 
+00458 
+00459 
+00460 #endif // KFeedback_h
+00461 
+00462 
+00463 // EOF
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kfeedback_8moc_8cpp-source.html b/doc/html/kfeedback_8moc_8cpp-source.html new file mode 100644 index 0000000..044b36f --- /dev/null +++ b/doc/html/kfeedback_8moc_8cpp-source.html @@ -0,0 +1,335 @@ + + +kshowmail: kshowmail/kfeedback.moc.cpp Source File + + + + + + +

kfeedback.moc.cpp

00001 /****************************************************************************
+00002 ** KFeedbackDialog meta object code from reading C++ file 'kfeedback.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:09:00 2007
+00005 **      by: The Qt MOC ($Id: kfeedback_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "kfeedback.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *KFeedbackDialog::className() const
+00023 {
+00024     return "KFeedbackDialog";
+00025 }
+00026 
+00027 QMetaObject *KFeedbackDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_KFeedbackDialog( "KFeedbackDialog", &KFeedbackDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString KFeedbackDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "KFeedbackDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString KFeedbackDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "KFeedbackDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* KFeedbackDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = KDialogBase::staticMetaObject();
+00055     static const QUMethod slot_0 = {"checkSendButton", 0, 0 };
+00056     static const QMetaData slot_tbl[] = {
+00057        { "checkSendButton()", &slot_0, QMetaData::Public }
+00058     };
+00059     static const QUMethod signal_0 = {"mailSent", 0, 0 };
+00060     static const QMetaData signal_tbl[] = {
+00061        { "mailSent()", &signal_0, QMetaData::Public }
+00062     };
+00063     metaObj = QMetaObject::new_metaobject(
+00064        "KFeedbackDialog", parentObject,
+00065        slot_tbl, 1,
+00066        signal_tbl, 1,
+00067 #ifndef QT_NO_PROPERTIES
+00068        0, 0,
+00069        0, 0,
+00070 #endif // QT_NO_PROPERTIES
+00071        0, 0 );
+00072     cleanUp_KFeedbackDialog.setMetaObject( metaObj );
+00073     return metaObj;
+00074 }
+00075 
+00076 void* KFeedbackDialog::qt_cast( const char* clname )
+00077 {
+00078     if ( !qstrcmp( clname, "KFeedbackDialog" ) )
+00079        return this;
+00080     return KDialogBase::qt_cast( clname );
+00081 }
+00082 
+00083 // SIGNAL mailSent
+00084 void KFeedbackDialog::mailSent()
+00085 {
+00086     activate_signal( staticMetaObject()->signalOffset() + 0 );
+00087 }
+00088 
+00089 bool KFeedbackDialog::qt_invoke( int _id, QUObject* _o )
+00090 {
+00091     switch ( _id - staticMetaObject()->slotOffset() ) {
+00092     case 0: checkSendButton(); break;
+00093     default:
+00094        return KDialogBase::qt_invoke( _id, _o );
+00095     }
+00096     return TRUE;
+00097 }
+00098 
+00099 bool KFeedbackDialog::qt_emit( int _id, QUObject* _o )
+00100 {
+00101     switch ( _id - staticMetaObject()->signalOffset() ) {
+00102     case 0: mailSent(); break;
+00103     default:
+00104        return KDialogBase::qt_emit(_id,_o);
+00105     }
+00106     return TRUE;
+00107 }
+00108 #ifndef QT_NO_PROPERTIES
+00109 
+00110 bool KFeedbackDialog::qt_property( int id, int f, QVariant* v)
+00111 {
+00112     return KDialogBase::qt_property( id, f, v);
+00113 }
+00114 
+00115 bool KFeedbackDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00116 #endif // QT_NO_PROPERTIES
+00117 
+00118 
+00119 const char *KFeedbackForm::className() const
+00120 {
+00121     return "KFeedbackForm";
+00122 }
+00123 
+00124 QMetaObject *KFeedbackForm::metaObj = 0;
+00125 static QMetaObjectCleanUp cleanUp_KFeedbackForm( "KFeedbackForm", &KFeedbackForm::staticMetaObject );
+00126 
+00127 #ifndef QT_NO_TRANSLATION
+00128 QString KFeedbackForm::tr( const char *s, const char *c )
+00129 {
+00130     if ( qApp )
+00131        return qApp->translate( "KFeedbackForm", s, c, QApplication::DefaultCodec );
+00132     else
+00133        return QString::fromLatin1( s );
+00134 }
+00135 #ifndef QT_NO_TRANSLATION_UTF8
+00136 QString KFeedbackForm::trUtf8( const char *s, const char *c )
+00137 {
+00138     if ( qApp )
+00139        return qApp->translate( "KFeedbackForm", s, c, QApplication::UnicodeUTF8 );
+00140     else
+00141        return QString::fromUtf8( s );
+00142 }
+00143 #endif // QT_NO_TRANSLATION_UTF8
+00144 
+00145 #endif // QT_NO_TRANSLATION
+00146 
+00147 QMetaObject* KFeedbackForm::staticMetaObject()
+00148 {
+00149     if ( metaObj )
+00150        return metaObj;
+00151     QMetaObject* parentObject = QVBox::staticMetaObject();
+00152     static const QUMethod slot_0 = {"sendMail", 0, 0 };
+00153     static const QUMethod slot_1 = {"slotCheckComplete", 0, 0 };
+00154     static const QMetaData slot_tbl[] = {
+00155        { "sendMail()", &slot_0, QMetaData::Public },
+00156        { "slotCheckComplete()", &slot_1, QMetaData::Protected }
+00157     };
+00158     static const QUMethod signal_0 = {"mailSent", 0, 0 };
+00159     static const QUMethod signal_1 = {"checkComplete", 0, 0 };
+00160     static const QMetaData signal_tbl[] = {
+00161        { "mailSent()", &signal_0, QMetaData::Public },
+00162        { "checkComplete()", &signal_1, QMetaData::Public }
+00163     };
+00164     metaObj = QMetaObject::new_metaobject(
+00165        "KFeedbackForm", parentObject,
+00166        slot_tbl, 2,
+00167        signal_tbl, 2,
+00168 #ifndef QT_NO_PROPERTIES
+00169        0, 0,
+00170        0, 0,
+00171 #endif // QT_NO_PROPERTIES
+00172        0, 0 );
+00173     cleanUp_KFeedbackForm.setMetaObject( metaObj );
+00174     return metaObj;
+00175 }
+00176 
+00177 void* KFeedbackForm::qt_cast( const char* clname )
+00178 {
+00179     if ( !qstrcmp( clname, "KFeedbackForm" ) )
+00180        return this;
+00181     return QVBox::qt_cast( clname );
+00182 }
+00183 
+00184 // SIGNAL mailSent
+00185 void KFeedbackForm::mailSent()
+00186 {
+00187     activate_signal( staticMetaObject()->signalOffset() + 0 );
+00188 }
+00189 
+00190 // SIGNAL checkComplete
+00191 void KFeedbackForm::checkComplete()
+00192 {
+00193     activate_signal( staticMetaObject()->signalOffset() + 1 );
+00194 }
+00195 
+00196 bool KFeedbackForm::qt_invoke( int _id, QUObject* _o )
+00197 {
+00198     switch ( _id - staticMetaObject()->slotOffset() ) {
+00199     case 0: sendMail(); break;
+00200     case 1: slotCheckComplete(); break;
+00201     default:
+00202        return QVBox::qt_invoke( _id, _o );
+00203     }
+00204     return TRUE;
+00205 }
+00206 
+00207 bool KFeedbackForm::qt_emit( int _id, QUObject* _o )
+00208 {
+00209     switch ( _id - staticMetaObject()->signalOffset() ) {
+00210     case 0: mailSent(); break;
+00211     case 1: checkComplete(); break;
+00212     default:
+00213        return QVBox::qt_emit(_id,_o);
+00214     }
+00215     return TRUE;
+00216 }
+00217 #ifndef QT_NO_PROPERTIES
+00218 
+00219 bool KFeedbackForm::qt_property( int id, int f, QVariant* v)
+00220 {
+00221     return QVBox::qt_property( id, f, v);
+00222 }
+00223 
+00224 bool KFeedbackForm::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00225 #endif // QT_NO_PROPERTIES
+00226 
+00227 
+00228 const char *KFeedbackQuestionList::className() const
+00229 {
+00230     return "KFeedbackQuestionList";
+00231 }
+00232 
+00233 QMetaObject *KFeedbackQuestionList::metaObj = 0;
+00234 static QMetaObjectCleanUp cleanUp_KFeedbackQuestionList( "KFeedbackQuestionList", &KFeedbackQuestionList::staticMetaObject );
+00235 
+00236 #ifndef QT_NO_TRANSLATION
+00237 QString KFeedbackQuestionList::tr( const char *s, const char *c )
+00238 {
+00239     if ( qApp )
+00240        return qApp->translate( "KFeedbackQuestionList", s, c, QApplication::DefaultCodec );
+00241     else
+00242        return QString::fromLatin1( s );
+00243 }
+00244 #ifndef QT_NO_TRANSLATION_UTF8
+00245 QString KFeedbackQuestionList::trUtf8( const char *s, const char *c )
+00246 {
+00247     if ( qApp )
+00248        return qApp->translate( "KFeedbackQuestionList", s, c, QApplication::UnicodeUTF8 );
+00249     else
+00250        return QString::fromUtf8( s );
+00251 }
+00252 #endif // QT_NO_TRANSLATION_UTF8
+00253 
+00254 #endif // QT_NO_TRANSLATION
+00255 
+00256 QMetaObject* KFeedbackQuestionList::staticMetaObject()
+00257 {
+00258     if ( metaObj )
+00259        return metaObj;
+00260     QMetaObject* parentObject = QListView::staticMetaObject();
+00261     static const QUMethod signal_0 = {"checkComplete", 0, 0 };
+00262     static const QMetaData signal_tbl[] = {
+00263        { "checkComplete()", &signal_0, QMetaData::Public }
+00264     };
+00265     metaObj = QMetaObject::new_metaobject(
+00266        "KFeedbackQuestionList", parentObject,
+00267        0, 0,
+00268        signal_tbl, 1,
+00269 #ifndef QT_NO_PROPERTIES
+00270        0, 0,
+00271        0, 0,
+00272 #endif // QT_NO_PROPERTIES
+00273        0, 0 );
+00274     cleanUp_KFeedbackQuestionList.setMetaObject( metaObj );
+00275     return metaObj;
+00276 }
+00277 
+00278 void* KFeedbackQuestionList::qt_cast( const char* clname )
+00279 {
+00280     if ( !qstrcmp( clname, "KFeedbackQuestionList" ) )
+00281        return this;
+00282     return QListView::qt_cast( clname );
+00283 }
+00284 
+00285 // SIGNAL checkComplete
+00286 void KFeedbackQuestionList::checkComplete()
+00287 {
+00288     activate_signal( staticMetaObject()->signalOffset() + 0 );
+00289 }
+00290 
+00291 bool KFeedbackQuestionList::qt_invoke( int _id, QUObject* _o )
+00292 {
+00293     return QListView::qt_invoke(_id,_o);
+00294 }
+00295 
+00296 bool KFeedbackQuestionList::qt_emit( int _id, QUObject* _o )
+00297 {
+00298     switch ( _id - staticMetaObject()->signalOffset() ) {
+00299     case 0: checkComplete(); break;
+00300     default:
+00301        return QListView::qt_emit(_id,_o);
+00302     }
+00303     return TRUE;
+00304 }
+00305 #ifndef QT_NO_PROPERTIES
+00306 
+00307 bool KFeedbackQuestionList::qt_property( int id, int f, QVariant* v)
+00308 {
+00309     return QListView::qt_property( id, f, v);
+00310 }
+00311 
+00312 bool KFeedbackQuestionList::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00313 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmail_8cpp-source.html b/doc/html/kshowmail_8cpp-source.html new file mode 100644 index 0000000..3e71b49 --- /dev/null +++ b/doc/html/kshowmail_8cpp-source.html @@ -0,0 +1,822 @@ + + +kshowmail: kshowmail/kshowmail.cpp Source File + + + + + + +

kshowmail.cpp

00001 /***************************************************************************
+00002                           kshowmail.cpp  -  description
+00003                              -------------------
+00004     begin                : Sat May  6 12:13:57 MEST 2000
+00005     copyright            : (C) 2000-2002 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007 
+00008     26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00009  ***************************************************************************/
+00010 
+00011 /***************************************************************************
+00012  *                                                                         *
+00013  *   This program is free software; you can redistribute it and/or modify  *
+00014  *   it under the terms of the GNU General Public License as published by  *
+00015  *   the Free Software Foundation; either version 2 of the License, or     *
+00016  *   (at your option) any later version.                                   *
+00017  *                                                                         *
+00018  ***************************************************************************/
+00019 
+00020 #include "kshowmail.h"
+00021 
+00022 using namespace KIO;
+00023 
+00024 KAboutData* KShowMailApp::m_pAbout;
+00025 
+00026 KShowMailApp::KShowMailApp()
+00027 {
+00028   //set up actions
+00029   initActions();
+00030 
+00031   // create GUI from ui resource file
+00032   setXMLFile( "kshowmailui.rc" );
+00033   createGUI();
+00034 
+00035   //the main window settings will be saved automatically
+00036   setAutoSaveSettings();
+00037 
+00038   //initiate GUI parts
+00039   initStatusBar();
+00040   initDocument();
+00041   initView();
+00042 
+00043   //the application is idle at beginning
+00044   m_state = idle;
+00045 
+00046   //the setup dialog will be created in slotSetup() at first use
+00047   SetupDialog = NULL;
+00048 
+00049   m_pTimer = new QTimer (this);
+00050   m_pAlertDialog = NULL;
+00051   m_pDockWindow = new KShowMailDock (this, m_actionRefresh);
+00052   m_bForceClose = false;
+00053 
+00054 
+00055   //read the setup
+00056   m_ConfigList.refreshSetup( m_pView->m_pListAccounts );
+00057 
+00058   readOptions();
+00059 
+00060   //load stored mails
+00061   m_ConfigList.readStoredMails();
+00062 
+00063   //connect signals with slots
+00064 
+00065   connect (m_pDockWindow, SIGNAL (quitSelected ()), SLOT (slotForceClose ()));
+00066   connect (m_pTimer, SIGNAL (timeout ()), SLOT (slotRefresh ()));
+00067   connect (m_pView->m_pListAccounts, SIGNAL (currentChanged(QListViewItem*)), SLOT(slotAccountActivated(QListViewItem*)));
+00068   connect (m_pView, SIGNAL (signalActiveChanged()), SLOT (slotRefreshView()));
+00069 
+00070   connect( &m_ConfigList, SIGNAL( sigDeleteReady() ), this, SLOT( slotDeletionReady() ) );
+00071   connect( &m_ConfigList, SIGNAL( sigShowBodiesReady() ), this, SLOT( slotShowMessageReady() ) );
+00072   connect( &m_ConfigList, SIGNAL( sigMessageWindowOpened() ), this, SLOT( slotNormalCursor() ) );
+00073   connect( &m_ConfigList, SIGNAL( sigAllMessageWindowsClosed() ), this, SLOT( slotWaitingCursor() ) );
+00074   connect( &m_ConfigList, SIGNAL( sigRefreshReady() ), this, SLOT( slotRefreshReady() ) );
+00075 
+00076   // this starts the one-second-interval timer
+00077   // this is a QObject method
+00078   startTimer (1000);
+00079 
+00080 
+00081   //we are ready to take off! Lets initiate the first refresh (if desired)
+00082   initFirstRefresh();
+00083 }
+00084 
+00085 KShowMailApp::~KShowMailApp()
+00086 {
+00087   kdDebug() << "cleaning up" << endl;
+00088   delete m_pTimer;
+00089   delete m_pDockWindow;
+00090   kdDebug() << "cleanup finished" << endl;
+00091 }
+00092 
+00096 void KShowMailApp::timerEvent (QTimerEvent *)
+00097 {
+00098   if (m_nSecondsToGo)
+00099   {
+00100     QTime time;
+00101     time = time.addSecs (m_nSecondsToGo--);
+00102     QCString msg (i18n("Autorefresh: %1").arg (time.toString()));
+00103     statusBar()->changeItem(msg, 3);
+00104   }
+00105   else
+00106     statusBar()->changeItem("", 3);
+00107 
+00108   // if busy, animate the traybar
+00109   if ( m_state == refreshing || m_state == deleting )
+00110   {
+00111     static int color = 0;
+00112     color = (color+1)%2;
+00113     switch (color)
+00114     {
+00115       case 0:
+00116         m_pDockWindow->clear ();
+00117         break;
+00118       default:
+00119         m_pDockWindow->drawText ("?", Qt::red);
+00120     }
+00121   }
+00122 }
+00123 
+00124 
+00125 
+00126 void KShowMailApp::initActions ()
+00127 {
+00128   // file menu
+00129   m_actionSave = KStdAction::saveOptions( this, SLOT( slotSaveOptions() ), actionCollection() );
+00130   KStdAction::quit( this, SLOT( slotFileQuit() ), actionCollection() );
+00131 
+00132   // action menu
+00133   m_actionRefresh = new KAction( i18n( "&Refresh messages" ), "reload", Key_F5, this, SLOT( slotRefresh() ), actionCollection(), "refresh" );
+00134   new KAction( i18n( "Show &header of highlighted messages" ), "letter-closed", Key_F2, this, SLOT( slotShowHeader() ), actionCollection(), "show_header" );
+00135   new KAction( i18n( "Show &complete highlighted messages" ), "letter-open", Key_F3, this, SLOT( slotShowMessage() ), actionCollection(), "show_complete" );
+00136   new KAction( i18n( "&Delete highlighted messages" ), "eraser", Key_Delete, this, SLOT( slotDelete() ), actionCollection(), "delete" );
+00137   new KAction( i18n( "S&top current transfer" ), "stop", 0, this, SLOT( slotStop() ), actionCollection(), "stop" );
+00138 
+00139   // setup menu
+00140   KStdAction::preferences( this, SLOT( slotSetup() ), actionCollection() );
+00141   new KAction( i18n( "Setup &filters" ), "filter", 0, this, SLOT( slotSetupFilters() ), actionCollection(), "filters" );
+00142   KStdAction::configureToolbars( this, SLOT( slotEditToolbars() ), actionCollection() );
+00143 
+00144   //create menu items for toggle tool and status bar
+00145   setStandardToolBarMenuEnabled( true );
+00146   createStandardStatusBarAction();
+00147 
+00148   //help menu
+00149   new KAction( i18n( "Send &Feedback Mail" ), "email", 0, this, SLOT( slotSendFeedbackMail() ),actionCollection(), "sendFeedback" );
+00150 
+00151   //for account context menu
+00152   new KAction(i18n( "Setup &account" ), "tool", 0, this, SLOT( slotSetupAccount() ), actionCollection(), "setupAccount" );
+00153 }
+00154 
+00155 void KShowMailApp::initStatusBar()
+00156 {
+00158   // STATUSBAR
+00159   QCString user = getenv( "LOGNAME" );
+00160   QCString server = getenv( "HOSTNAME" );
+00161   QCString  mesg (QString ("%1@%2").arg(user).arg(server));
+00162 
+00163   statusBar()->insertItem(i18n("Ready."), 1);
+00164   statusBar()->insertItem(mesg, 2, 1);
+00165   statusBar()->insertItem("", 3);
+00166   statusBar()->insertItem("", 4);
+00167 }
+00168 
+00169 void KShowMailApp::initDocument()
+00170 {
+00171   m_pDoc = new KshowmailDoc(this);
+00172   m_pDoc->newDocument();
+00173 }
+00174 
+00175 void KShowMailApp::initView()
+00176 {
+00178   // create the main widget here that is managed by KMainWindow's view-region and
+00179   // connect the widget to your document to display document contents.
+00180 
+00181   m_pView = new KshowmailView(this);
+00182   m_pDoc->addView(m_pView);
+00183   setCentralWidget(m_pView);
+00184 }
+00185 
+00186 void KShowMailApp::slotSaveOptions()
+00187 {
+00188   KConfig* config = KGlobal::config();
+00189 
+00190   //order application parts to save their setup
+00191   m_pView->saveOptions( config );
+00192   Filter::saveOptions( config );
+00193   m_ConfigList.saveOptions ();
+00194 
+00195   //save config to file
+00196   config->sync ();
+00197 
+00198   //disable save action
+00199   m_actionSave->setEnabled( false );
+00200 }
+00201 
+00202 void KShowMailApp::readOptions()
+00203 {
+00204   KConfig* config = KGlobal::config();
+00205 
+00206   Filter::readOptions (config);
+00207   m_actionSave->setEnabled (false);
+00208 }
+00209 
+00210 bool KShowMailApp::queryClose()
+00211 {
+00212     bool result;
+00213     kdDebug() << "KShowMailApp::queryClose()" << endl;
+00214 
+00215     if (m_bForceClose) {
+00216         // We are forced to close app - so just do it
+00217         kdDebug() << "forced exit" << endl;
+00218         result = true;
+00219     } else if( m_ConfigList.closeToTray() ) {
+00220         // Don't close - close button must minimize the window
+00221         result = false;
+00222         kdDebug() << "ignoring close request and minimizing the window" << endl;
+00223         KMainWindow* w = memberList->first();
+00224         w->hide();
+00225     } else {
+00226         // Need to ask user first
+00227         result = askCloseConfirmation();
+00228     }
+00229     return result;
+00230 }
+00231 
+00232 bool KShowMailApp::queryExit()
+00233 {
+00234   kdDebug() << "KShowMailApp::queryExit()" << endl;
+00235   slotSaveOptions ();
+00236 
+00237   return true;
+00238 }
+00239 
+00241 // SLOT IMPLEMENTATION
+00243 
+00244 void KShowMailApp::slotFileQuit()
+00245 {
+00246   kdDebug () << "KShowMailApp::slotFileQuit()" << endl;
+00247   if(memberList && askCloseConfirmation())
+00248   {
+00249     m_bForceClose = true;   // Forcing the closing
+00250     KMainWindow* w = memberList->first();
+00251     w->close();
+00252   }
+00253 }
+00254 
+00255 
+00256 void KShowMailApp::slotSetupAccount()
+00257 {
+00258   //just open the dialog, if the app is idle
+00259   if (m_state != idle)
+00260   {
+00261     kapp->beep();
+00262     return;
+00263   }
+00264 
+00265   //set application state
+00266   m_state = configure;
+00267 
+00268   //stop the refresh timer
+00269   stopRefreshTimer();
+00270 
+00271   //get account to configure
+00272   ConfigElem* pConfig = m_ConfigList.getSelectedAccount();
+00273 
+00274   if( pConfig != NULL )
+00275   {
+00276     //open dialog
+00277     //the dialog sets the new options directly in the account
+00278     ServerDialog dlg( this, pConfig );
+00279 
+00280     if( dlg.exec() == QDialog::Accepted )
+00281     {
+00282       //if OK was clicked, refresh the account list view
+00283       slotConfChanged();
+00284     }
+00285   }
+00286 
+00287   //we are ready, set application state to idle and initiate next refresh
+00288   m_state = idle;
+00289   initNextRefresh();
+00290 }
+00291 
+00292 void KShowMailApp::slotAccountActivated (QListViewItem* pItem)
+00293 {
+00294   QPtrListIterator<ConfigElem> it(m_ConfigList);
+00295   // this is = not == !!!
+00296   while (ConfigElem* pConfig = it())
+00297   {
+00298     if (pConfig->getListViewItem() == pItem)
+00299     {
+00300       setCaption (pConfig->getAccountName());
+00301       return;
+00302     }
+00303   }
+00304 }
+00305 
+00306 void KShowMailApp::slotAlertDestroyed()
+00307 {
+00308   m_pAlertDialog = NULL;
+00309 }
+00310 
+00311 void KShowMailApp::slotAlertOk ()
+00312 {
+00313   //switch main window to normal view
+00314   showNormal();
+00315   raise();
+00316 }
+00317 
+00318 void KShowMailApp::slotRefresh()
+00319 {
+00320   //return, if the app is not idle
+00321   if ( m_state != idle )
+00322   {
+00323     kapp->beep();
+00324     initNextRefresh();
+00325     return;
+00326   }
+00327 
+00328   //stop the refresh timer
+00329   stopRefreshTimer();
+00330 
+00331   //set the state
+00332   m_state = refreshing;
+00333 
+00334   //show status message
+00335   slotStatusMsg( i18n( "Refreshing ..." ) );
+00336 
+00337   //set waiting cursor
+00338   QApplication::setOverrideCursor( Qt::waitCursor );
+00339 
+00340   //order the account list to refresh its mail lists
+00341   m_ConfigList.refreshMailLists();
+00342 
+00343   return;
+00344 }
+00345 
+00346 void KShowMailApp::slotStop ()
+00347 {
+00348   if (m_state == idle)
+00349   {
+00350     kapp->beep ();
+00351     return;
+00352   }
+00353   kdDebug() << "KShowMailApp::slotStop" << endl;
+00354 
+00355   //kill all running pop3 jobs
+00356   m_ConfigList.killPOP3Jobs();
+00357 
+00358   slotRefreshView ();
+00359 
+00360   // make sure the view is refreshed before the state gets idle again
+00361   // bug #853651
+00362 
+00363   //set state to idle
+00364   m_state = idle;
+00365 
+00366   //set normal cursor
+00367   //might be more than one override cursor ...
+00368   while (QApplication::overrideCursor())
+00369     QApplication::restoreOverrideCursor ();
+00370 
+00371   //print status message
+00372   slotStatusMsg(i18n("Job was stopped"));
+00373 }
+00374 
+00375 void KShowMailApp::slotRefreshView ()
+00376 {
+00377 
+00378   //clear mail list view
+00379   m_pView->clearMailListView();
+00380 
+00381   //fill mail list view
+00382   m_ConfigList.fillMailListView( m_pView );
+00383 
+00384   //refresh account list
+00385   m_ConfigList.refreshAccountList();
+00386 
+00387   //get some informations
+00388   int numberMails = m_ConfigList.getNumberMails();
+00389   bool hasNewMails = m_ConfigList.getNumberNewMails() > 0;
+00390 
+00391   //draw number of mails into dock
+00392   if( hasNewMails )
+00393     //draw red number, because we have new mails
+00394      m_pDockWindow->drawNumber( numberMails, Qt::red );
+00395   else
+00396     //we haven't new mails, draw black
+00397     m_pDockWindow->drawNumber( numberMails, Qt::black );
+00398 
+00399   //show message in status bar
+00400   long totalSize = m_ConfigList.getTotalSize();
+00401   slotStatusMsg( i18n( "%1 message(s) with a total of %2 bytes are waiting" ).arg( numberMails ).arg( totalSize ) );
+00402 }
+00403 
+00404 void KShowMailApp::slotDelete()
+00405 {
+00406   //just delete, if no operation is running
+00407   if( m_state != idle )
+00408   {
+00409     kapp->beep();
+00410     return;
+00411   }
+00412 
+00413   //return, if no mails are selected
+00414   if( !m_ConfigList.hasSelectedMails() )
+00415     return;
+00416 
+00417   //confirm deletion if required
+00418   if( m_ConfigList.confirmDeletion() )
+00419   {
+00420     //get subjects off all selected mails
+00421     QStringList subjects = m_ConfigList.getSelectedSubjects();
+00422 
+00423     //show question
+00424     int answer = KMessageBox::questionYesNoList( this, i18n( "Do you want to delete these mails?"), subjects, i18n( "Delete?" ) );
+00425 
+00426     if( answer == KMessageBox::No )
+00427       return;
+00428   }
+00429 
+00430   //set the state
+00431   m_state = deleting;
+00432 
+00433   //show status message
+00434   slotStatusMsg( i18n( "Deleting Mail(s) ..." ) );
+00435 
+00436   //set waiting cursor
+00437   QApplication::setOverrideCursor( Qt::waitCursor );
+00438 
+00439   //order the account list to delete the selected mails
+00440   //test!
+00441   m_ConfigList.deleteSelectedMails();
+00442 }
+00443 
+00444 void KShowMailApp::slotShowHeader ()
+00445 {
+00446   //only show headers, if the app is idle
+00447   if( m_state != idle )
+00448   {
+00449     kapp->beep ();
+00450     return;
+00451   }
+00452 
+00453   //show the headers
+00454   m_ConfigList.showSelectedHeaders();
+00455 
+00456 }
+00457 
+00458 void KShowMailApp::slotShowMessage ()
+00459 {
+00460   //return, if application is not idle
+00461   if( m_state != idle )
+00462   {
+00463     kapp->beep ();
+00464     return;
+00465   }
+00466 
+00467   //return, if no mails are selected
+00468   if( !m_ConfigList.hasSelectedMails() )
+00469     return;
+00470 
+00471   //set the state
+00472   m_state = showing;
+00473 
+00474   //show status message
+00475   slotStatusMsg( i18n( "Downloading ..." ) );
+00476 
+00477   //set waiting cursor
+00478   QApplication::setOverrideCursor( Qt::waitCursor );
+00479 
+00480   //order the account list to show the selected mails
+00481   m_ConfigList.showSelectedMails();
+00482 }
+00483 
+00484 void KShowMailApp::slotStatusMsg(const QString& text)
+00485 {
+00486   //get current time
+00487   // added by Gustavo Zamorano to include time
+00488   QString sTime = QTime::currentTime ().toString ();
+00489 
+00490   //clear status bar
+00491   statusBar()->clear();
+00492 
+00493   //set given text
+00494   statusBar()->changeItem(text, 1);
+00495 
+00496   //set current time
+00497   statusBar()->changeItem(sTime, 4);
+00498 }
+00499 
+00500 void KShowMailApp::slotStatusHelpMsg(const QString &text)
+00501 {
+00502   statusBar()->message(text, 2000);
+00503 }
+00504 
+00505 
+00506 
+00507 
+00508 bool KShowMailApp::event(QEvent *e)
+00509 {
+00510   // to hide the taskbar button; any better solution ??
+00511   if ((e->type() == QEvent::Hide) && m_ConfigList.minimizesToTray() ) {
+00512     hide ();
+00513   }
+00514 
+00515   return(KMainWindow::event(e));
+00516 }
+00517 
+00518 void KShowMailApp::slotSetupFilters ()
+00519 {
+00520   if (m_state != idle)
+00521   {
+00522     kapp->beep ();
+00523     return;
+00524   }
+00525   m_state = configure;
+00526   FilterDialog dlg (this, "Filters");
+00527   if (dlg.exec () == QDialog::Accepted)
+00528     m_actionSave->setEnabled (true);
+00529   m_state = idle;
+00530 }
+00531 
+00532 void KShowMailApp::slotForceClose()
+00533 {
+00534     m_bForceClose = true;
+00535 }
+00536 
+00537 bool KShowMailApp::askCloseConfirmation()
+00538 {
+00539     bool result;
+00540 
+00541     if( m_ConfigList.confirmClose() ) {
+00542         // Need to ask user
+00543         result = (KMessageBox::questionYesNo (this, i18n ("KShowmail will be closed.\n"
+00544                                     "Are you sure?")) == KMessageBox::Yes);
+00545     } else {
+00546         // User doesn't want to be asked - just close it
+00547         result = true;
+00548     }
+00549 
+00550     return result;
+00551 }
+00552 
+00553 void KShowMailApp::slotDeletionReady( )
+00554 {
+00555   //set state to idle
+00556   m_state = idle;
+00557 
+00558   //set normal cursor
+00559   while( QApplication::overrideCursor() )
+00560     QApplication::restoreOverrideCursor();
+00561 
+00562   //show status message
+00563   slotStatusMsg( i18n( "Ready." ) );
+00564 
+00565   //refresh mail list
+00566   slotRefresh();
+00567 }
+00568 
+00569 void KShowMailApp::slotShowMessageReady( )
+00570 {
+00571   //set state to idle
+00572   m_state = idle;
+00573 
+00574   //set normal cursor
+00575   while( QApplication::overrideCursor() )
+00576     QApplication::restoreOverrideCursor();
+00577 
+00578   //show status message
+00579   slotStatusMsg( i18n( "Ready." ) );
+00580 
+00581 
+00582 }
+00583 
+00584 void KShowMailApp::slotNormalCursor( )
+00585 {
+00586   //set normal cursor
+00587   while( QApplication::overrideCursor() )
+00588     QApplication::restoreOverrideCursor();
+00589 
+00590 }
+00591 
+00592 void KShowMailApp::slotWaitingCursor( )
+00593 {
+00594   //set waiting cursor
+00595   QApplication::setOverrideCursor( Qt::waitCursor );
+00596 }
+00597 
+00598 void KShowMailApp::slotRefreshReady( )
+00599 {
+00600   //set state to idle
+00601   m_state = idle;
+00602 
+00603   //set normal cursor
+00604   while( QApplication::overrideCursor() )
+00605     QApplication::restoreOverrideCursor();
+00606 
+00607   //refresh mail list view
+00608   slotRefreshView();
+00609 
+00610   //inform the user about new mails
+00611   bool hasNewMails = m_ConfigList.getNumberNewMails() > 0;
+00612   if ( hasNewMails )
+00613   {
+00614     //show main window if desired
+00615     if( m_ConfigList.showMainWindowForNewMails() )
+00616     {
+00617       showNormal();
+00618       raise();
+00619     }
+00620 
+00621     //get out some sounds
+00622     m_ConfigList.beep();
+00623     m_ConfigList.playSound();
+00624 
+00625     //execute a command
+00626     m_ConfigList.executeNewMailCommand();
+00627 
+00628     //show alert message if desired
+00629     if( m_ConfigList.showAlertMessageForNewMails() )
+00630     {
+00631       //have we created one already?
+00632       if( m_pAlertDialog != NULL )
+00633       {
+00634         //yes, we have one
+00635         m_pAlertDialog->show();
+00636         m_pAlertDialog->raise();
+00637       }
+00638       else
+00639       {
+00640         //create a message dialog
+00641         m_pAlertDialog = new AlertDialog( this );
+00642         connect( m_pAlertDialog, SIGNAL( destroyed() ), SLOT( slotAlertDestroyed() ) );
+00643         connect( m_pAlertDialog, SIGNAL( signalOk() ), SLOT( slotAlertOk() ) );
+00644       }
+00645     }
+00646 
+00647   }
+00648   else
+00649   {
+00650     //no new mails was received
+00651     //perform configured actions
+00652 
+00653     //terminate app if desired
+00654     if( m_ConfigList.quitNoNewMails() )
+00655       slotFileQuit();
+00656     else if( m_ConfigList.minimizeMainWindowNoNewMails() )
+00657     {
+00658       showMinimized();
+00659       hide();
+00660     }
+00661   }
+00662 
+00663   //show status message
+00664   slotStatusMsg( i18n( "Ready." ) );
+00665 
+00666 
+00667   //prepare next refresh cycle
+00668   initNextRefresh();
+00669 
+00670   //apply filters
+00671   m_ConfigList.applyFilters();
+00672 
+00673   //perform automatic delete if desired
+00674   if (Filter::_status == Filter::automatic)
+00675   {
+00676     slotDelete ();
+00677   }
+00678 }
+00679 
+00680 void KShowMailApp::initFirstRefresh( )
+00681 {
+00682   //is auto refresh on? if not, we do nothing
+00683   if( m_ConfigList.AutoRefreshOn() )
+00684   {
+00685     //is an initial time configured? if not, we refresh immediately
+00686     if( m_ConfigList.hasInitTime() )
+00687     {
+00688       //starts refresh timer with the configured initial time to first refresh
+00689       m_pTimer->start( m_ConfigList.getInitTime() * 1000, true );
+00690       m_nSecondsToGo = m_ConfigList.getInitTime();
+00691     }
+00692     else
+00693     {
+00694       //just to set a defined state
+00695       m_pTimer->stop();
+00696       m_nSecondsToGo = 0;
+00697 
+00698       //start refresh cycle
+00699       slotRefresh();
+00700     }
+00701   }
+00702   else
+00703   {
+00704     //set a defined state
+00705     m_pTimer->stop();
+00706     m_nSecondsToGo = 0;
+00707   }
+00708 }
+00709 
+00710 void KShowMailApp::stopRefreshTimer( )
+00711 {
+00712   m_pTimer->stop();
+00713   m_nSecondsToGo = 0;
+00714 }
+00715 
+00716 void KShowMailApp::initNextRefresh( )
+00717 {
+00718   if( m_ConfigList.AutoRefreshOn() )
+00719   {
+00720     //auto refresh is activated
+00721     //restart the refresh timer
+00722     m_pTimer->start( m_ConfigList.getRefreshTimeInterval() * 60000, true );
+00723     m_nSecondsToGo = m_ConfigList.getRefreshTimeInterval() * 60;
+00724   }
+00725   else
+00726   {
+00727     //auto refresh is not activated
+00728     //set a defined state of the refresh timer
+00729     m_pTimer->stop();
+00730     m_nSecondsToGo = 0;
+00731   }
+00732 }
+00733 
+00734 void KShowMailApp::delayNextRefresh( )
+00735 {
+00736   const unsigned long DELAY_TIME = 60;
+00737 
+00738   //delay only if the timer is active and the remaining time is less than one minute
+00739   if( m_pTimer->isActive() )
+00740   {
+00741     if( m_nSecondsToGo < DELAY_TIME )
+00742     {
+00743       m_pTimer->start( DELAY_TIME * 1000, true );
+00744       m_nSecondsToGo = DELAY_TIME;
+00745     }
+00746   }
+00747 }
+00748 
+00749 void KShowMailApp::slotEditToolbars()
+00750 {
+00751   //create the toolbar config dialog
+00752   KEditToolbar *dlg = new KEditToolbar(guiFactory());
+00753   if( dlg->exec() )
+00754   {
+00755     //if dialog closed by OK, create the GUI new
+00756     //the dialog has changed the kshowmailui.rc file
+00757     createGUI();
+00758   }
+00759 
+00760   //destruct dialog
+00761   delete dlg;
+00762 }
+00763 
+00764 void KShowMailApp::slotSetup( )
+00765 {
+00766   //just open the dialog, if the app is idle
+00767   if (m_state != idle)
+00768   {
+00769     kapp->beep();
+00770     return;
+00771   }
+00772 
+00773   //set application state
+00774   m_state = configure;
+00775 
+00776   //stop the refresh timer
+00777   stopRefreshTimer();
+00778 
+00779   if ( SetupDialog == NULL )
+00780   {
+00781     //if no preferences dialog was created as yet, create one
+00782     SetupDialog = new KCMultiDialog( KCMultiDialog::IconList, i18n( "Options" ), this, "SetupDialog" );
+00783     SetupDialog->addModule( "kshowmailconfigaccounts.desktop" );
+00784     SetupDialog->addModule( "kshowmailconfiggeneral.desktop" );
+00785     SetupDialog->addModule( "kshowmailconfigdisplay.desktop" );
+00786     SetupDialog->addModule( "kshowmailconfigactions.desktop" );
+00787 
+00788     //If the configuration was changed, it will call slotConfChanged
+00789     connect( SetupDialog, SIGNAL( configCommitted() ), this, SLOT( slotConfChanged() ) );
+00790   }
+00791 
+00792   //execute preferences dialog
+00793   SetupDialog->exec();
+00794 
+00795   //we are ready, set application state to idle and initiate next refresh
+00796   m_state = idle;
+00797   initNextRefresh();
+00798 
+00799 }
+00800 
+00801 void KShowMailApp::slotConfChanged( )
+00802 {
+00803   //read the new setup
+00804   m_ConfigList.refreshSetup( m_pView->m_pListAccounts );
+00805   m_pView->refreshSetup();
+00806 }
+00807 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmail_8h-source.html b/doc/html/kshowmail_8h-source.html new file mode 100644 index 0000000..d85b890 --- /dev/null +++ b/doc/html/kshowmail_8h-source.html @@ -0,0 +1,221 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmail.h Source File + + + + + + + +

kshowmail.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           kshowmail.h  -  description
+00003                              -------------------
+00004     begin                : Sat May  6 12:13:57 MEST 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef KSHOWMAIL_H
+00019 #define KSHOWMAIL_H
+00020 
+00021 
+00022 #ifdef HAVE_CONFIG_H
+00023 #include <config.h>
+00024 #endif
+00025 
+00026 // include files for KDE
+00027 #include <kapplication.h>
+00028 #include <kmainwindow.h>
+00029 #include <kuniqueapplication.h>
+00030 #include <kaction.h>
+00031 #include <kstdaction.h>
+00032 #include <klocale.h>
+00033 #include <kstatusbar.h>
+00034 #include <krun.h>
+00035 #include <kpassdlg.h>
+00036 #include <kdebug.h>
+00037 #include <kedittoolbar.h>
+00038 #include <kcmultidialog.h>
+00039 
+00040 
+00041 //include files for KShowMail
+00042 #include "configlist.h"
+00043 #include "alertdialog.h"
+00044 #include "showrecord.h"
+00045 #include "showlistviewitem.h"
+00046 #include "kshowmaildock.h"
+00047 #include "kfeedback.h"
+00048 #include "types.h"
+00049 #include "kshowmailview.h"
+00050 #include "kshowmaildoc.h"
+00051 #include "serverdialog.h"
+00052 #include "filterlog.h"
+00053 #include "filterlogview.h"
+00054 
+00055 
+00056 // forward declaration of the Kshowmail classes
+00057 class KshowmailDoc;
+00058 class KshowmailView;
+00059 
+00060 using namespace Types;
+00061 
+00077 class KShowMailApp : public KMainWindow
+00078 {
+00079   Q_OBJECT
+00080 
+00081   friend class KshowmailView;
+00082   friend class KshowmailDock;
+00083   friend class UniqueApp;
+00084 
+00085 
+00086   private:
+00087 
+00091     KshowmailDoc* m_pDoc;
+00092 
+00096     KshowmailView *m_pView;
+00097 
+00101     KCMultiDialog* SetupDialog;
+00102 
+00106     KAction* m_actionRefresh;
+00107 
+00112     ConfigList m_ConfigList;
+00113 
+00117     AlertDialog* m_pAlertDialog;
+00118 
+00122     KShowMailDock* m_pDockWindow;
+00123 
+00127     QTimer* m_pTimer;
+00128 
+00132      Types::State_Type m_state;
+00133 
+00137      unsigned long m_nSecondsToGo;
+00138 
+00142      FilterLog fLog;
+00143 
+00144 
+00145   public:
+00150     KShowMailApp();
+00151 
+00155     ~KShowMailApp();
+00156 
+00161     static KAboutData* m_pAbout;
+00162 
+00166     void delayNextRefresh();
+00167 
+00168 
+00169   protected:
+00170 
+00174     void initStatusBar();
+00175 
+00179     void initActions();
+00180 
+00185     void initDocument();
+00186 
+00190     void initView();
+00191 
+00199     virtual bool queryClose();
+00200 
+00208     virtual bool queryExit();
+00209 
+00216     virtual void timerEvent( QTimerEvent * );
+00217 
+00222     virtual bool event(QEvent *e);
+00223 
+00228     void initFirstRefresh();
+00229 
+00233     void stopRefreshTimer();
+00234 
+00238     void initNextRefresh();
+00239 
+00240   protected slots:
+00241 
+00249     void slotStatusHelpMsg(const QString &text);
+00250 
+00257     void slotStatusMsg(const QString &text);
+00258 
+00263     void slotConfChanged();
+00264 
+00269     void slotDelete();
+00270 
+00278     void slotDeletionReady();
+00279 
+00284     void slotShowMessage();
+00285 
+00292     void slotShowMessageReady();
+00293 
+00300     void slotNormalCursor();
+00301 
+00308     void slotWaitingCursor();
+00309 
+00314     void slotRefresh();
+00315 
+00322     void slotRefreshReady();
+00323 
+00331     void slotAlertDestroyed();
+00332 
+00338     void slotAlertOk ();
+00339 
+00343     void slotRefreshView ();
+00344 
+00349     void slotStop ();
+00350 
+00355     void slotShowHeader();
+00356 
+00361     void slotEditToolbars();
+00362 
+00366     void slotSaveOptions();
+00367 
+00373     void slotFileQuit();
+00374 
+00378     void slotSetupAccount();
+00379 
+00384     void slotSetup();
+00385 
+00389     void slotShowFilterLog();
+00390 
+00391     void slotAccountActivated(QListViewItem*);
+00392     void slotSendFeedbackMail();
+00393     void slotForceClose();
+00394 
+00395 
+00396 
+00397 
+00398 private:
+00399 
+00400     bool m_bForceClose;
+00401 
+00402 
+00403   protected:
+00404     void addFeatureList(KFeedbackQuestion * question);
+00405     bool askCloseConfirmation();
+00406 
+00407 };
+00408 
+00409 #endif // KSHOWMAIL_H
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmail_8moc_8cpp-source.html b/doc/html/kshowmail_8moc_8cpp-source.html new file mode 100644 index 0000000..7904413 --- /dev/null +++ b/doc/html/kshowmail_8moc_8cpp-source.html @@ -0,0 +1,204 @@ + + +kshowmail: kshowmail/kshowmail.moc.cpp Source File + + + + + + +

kshowmail.moc.cpp

00001 /****************************************************************************
+00002 ** KShowMailApp meta object code from reading C++ file 'kshowmail.h'
+00003 **
+00004 ** Created: Thu Jul 5 19:14:17 2007
+00005 **      by: The Qt MOC ($Id: kshowmail_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "kshowmail.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *KShowMailApp::className() const
+00023 {
+00024     return "KShowMailApp";
+00025 }
+00026 
+00027 QMetaObject *KShowMailApp::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_KShowMailApp( "KShowMailApp", &KShowMailApp::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString KShowMailApp::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "KShowMailApp", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString KShowMailApp::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "KShowMailApp", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* KShowMailApp::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = KMainWindow::staticMetaObject();
+00055     static const QUParameter param_slot_0[] = {
+00056        { "text", &static_QUType_QString, 0, QUParameter::In }
+00057     };
+00058     static const QUMethod slot_0 = {"slotStatusHelpMsg", 1, param_slot_0 };
+00059     static const QUParameter param_slot_1[] = {
+00060        { "text", &static_QUType_QString, 0, QUParameter::In }
+00061     };
+00062     static const QUMethod slot_1 = {"slotStatusMsg", 1, param_slot_1 };
+00063     static const QUMethod slot_2 = {"slotConfChanged", 0, 0 };
+00064     static const QUMethod slot_3 = {"slotDelete", 0, 0 };
+00065     static const QUMethod slot_4 = {"slotDeletionReady", 0, 0 };
+00066     static const QUMethod slot_5 = {"slotShowMessage", 0, 0 };
+00067     static const QUMethod slot_6 = {"slotShowMessageReady", 0, 0 };
+00068     static const QUMethod slot_7 = {"slotNormalCursor", 0, 0 };
+00069     static const QUMethod slot_8 = {"slotWaitingCursor", 0, 0 };
+00070     static const QUMethod slot_9 = {"slotRefresh", 0, 0 };
+00071     static const QUMethod slot_10 = {"slotRefreshReady", 0, 0 };
+00072     static const QUMethod slot_11 = {"slotAlertDestroyed", 0, 0 };
+00073     static const QUMethod slot_12 = {"slotAlertOk", 0, 0 };
+00074     static const QUMethod slot_13 = {"slotRefreshView", 0, 0 };
+00075     static const QUMethod slot_14 = {"slotStop", 0, 0 };
+00076     static const QUMethod slot_15 = {"slotShowHeader", 0, 0 };
+00077     static const QUMethod slot_16 = {"slotEditToolbars", 0, 0 };
+00078     static const QUMethod slot_17 = {"slotSaveOptions", 0, 0 };
+00079     static const QUMethod slot_18 = {"slotFileQuit", 0, 0 };
+00080     static const QUMethod slot_19 = {"slotSetupAccount", 0, 0 };
+00081     static const QUMethod slot_20 = {"slotSetup", 0, 0 };
+00082     static const QUMethod slot_21 = {"slotSetupFilters", 0, 0 };
+00083     static const QUParameter param_slot_22[] = {
+00084        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In }
+00085     };
+00086     static const QUMethod slot_22 = {"slotAccountActivated", 1, param_slot_22 };
+00087     static const QUMethod slot_23 = {"slotSendFeedbackMail", 0, 0 };
+00088     static const QUMethod slot_24 = {"slotForceClose", 0, 0 };
+00089     static const QMetaData slot_tbl[] = {
+00090        { "slotStatusHelpMsg(const QString&)", &slot_0, QMetaData::Protected },
+00091        { "slotStatusMsg(const QString&)", &slot_1, QMetaData::Protected },
+00092        { "slotConfChanged()", &slot_2, QMetaData::Protected },
+00093        { "slotDelete()", &slot_3, QMetaData::Protected },
+00094        { "slotDeletionReady()", &slot_4, QMetaData::Protected },
+00095        { "slotShowMessage()", &slot_5, QMetaData::Protected },
+00096        { "slotShowMessageReady()", &slot_6, QMetaData::Protected },
+00097        { "slotNormalCursor()", &slot_7, QMetaData::Protected },
+00098        { "slotWaitingCursor()", &slot_8, QMetaData::Protected },
+00099        { "slotRefresh()", &slot_9, QMetaData::Protected },
+00100        { "slotRefreshReady()", &slot_10, QMetaData::Protected },
+00101        { "slotAlertDestroyed()", &slot_11, QMetaData::Protected },
+00102        { "slotAlertOk()", &slot_12, QMetaData::Protected },
+00103        { "slotRefreshView()", &slot_13, QMetaData::Protected },
+00104        { "slotStop()", &slot_14, QMetaData::Protected },
+00105        { "slotShowHeader()", &slot_15, QMetaData::Protected },
+00106        { "slotEditToolbars()", &slot_16, QMetaData::Protected },
+00107        { "slotSaveOptions()", &slot_17, QMetaData::Protected },
+00108        { "slotFileQuit()", &slot_18, QMetaData::Protected },
+00109        { "slotSetupAccount()", &slot_19, QMetaData::Protected },
+00110        { "slotSetup()", &slot_20, QMetaData::Protected },
+00111        { "slotSetupFilters()", &slot_21, QMetaData::Protected },
+00112        { "slotAccountActivated(QListViewItem*)", &slot_22, QMetaData::Protected },
+00113        { "slotSendFeedbackMail()", &slot_23, QMetaData::Protected },
+00114        { "slotForceClose()", &slot_24, QMetaData::Protected }
+00115     };
+00116     metaObj = QMetaObject::new_metaobject(
+00117        "KShowMailApp", parentObject,
+00118        slot_tbl, 25,
+00119        0, 0,
+00120 #ifndef QT_NO_PROPERTIES
+00121        0, 0,
+00122        0, 0,
+00123 #endif // QT_NO_PROPERTIES
+00124        0, 0 );
+00125     cleanUp_KShowMailApp.setMetaObject( metaObj );
+00126     return metaObj;
+00127 }
+00128 
+00129 void* KShowMailApp::qt_cast( const char* clname )
+00130 {
+00131     if ( !qstrcmp( clname, "KShowMailApp" ) )
+00132        return this;
+00133     return KMainWindow::qt_cast( clname );
+00134 }
+00135 
+00136 bool KShowMailApp::qt_invoke( int _id, QUObject* _o )
+00137 {
+00138     switch ( _id - staticMetaObject()->slotOffset() ) {
+00139     case 0: slotStatusHelpMsg((const QString&)static_QUType_QString.get(_o+1)); break;
+00140     case 1: slotStatusMsg((const QString&)static_QUType_QString.get(_o+1)); break;
+00141     case 2: slotConfChanged(); break;
+00142     case 3: slotDelete(); break;
+00143     case 4: slotDeletionReady(); break;
+00144     case 5: slotShowMessage(); break;
+00145     case 6: slotShowMessageReady(); break;
+00146     case 7: slotNormalCursor(); break;
+00147     case 8: slotWaitingCursor(); break;
+00148     case 9: slotRefresh(); break;
+00149     case 10: slotRefreshReady(); break;
+00150     case 11: slotAlertDestroyed(); break;
+00151     case 12: slotAlertOk(); break;
+00152     case 13: slotRefreshView(); break;
+00153     case 14: slotStop(); break;
+00154     case 15: slotShowHeader(); break;
+00155     case 16: slotEditToolbars(); break;
+00156     case 17: slotSaveOptions(); break;
+00157     case 18: slotFileQuit(); break;
+00158     case 19: slotSetupAccount(); break;
+00159     case 20: slotSetup(); break;
+00160     case 21: slotSetupFilters(); break;
+00161     case 22: slotAccountActivated((QListViewItem*)static_QUType_ptr.get(_o+1)); break;
+00162     case 23: slotSendFeedbackMail(); break;
+00163     case 24: slotForceClose(); break;
+00164     default:
+00165        return KMainWindow::qt_invoke( _id, _o );
+00166     }
+00167     return TRUE;
+00168 }
+00169 
+00170 bool KShowMailApp::qt_emit( int _id, QUObject* _o )
+00171 {
+00172     return KMainWindow::qt_emit(_id,_o);
+00173 }
+00174 #ifndef QT_NO_PROPERTIES
+00175 
+00176 bool KShowMailApp::qt_property( int id, int f, QVariant* v)
+00177 {
+00178     return KMainWindow::qt_property( id, f, v);
+00179 }
+00180 
+00181 bool KShowMailApp::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00182 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildoc_8cpp-source.html b/doc/html/kshowmaildoc_8cpp-source.html new file mode 100644 index 0000000..abb6e1d --- /dev/null +++ b/doc/html/kshowmaildoc_8cpp-source.html @@ -0,0 +1,101 @@ + + +kshowmail: kshowmail/kshowmaildoc.cpp Source File + + + + + + +

kshowmaildoc.cpp

00001 /***************************************************************************
+00002                           kshowmaildoc.cpp  -  description
+00003                              -------------------
+00004     begin                : Fre Sep 28 23:29:54 CEST 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 // include files for Qt
+00019 #include <qdir.h>
+00020 #include <qwidget.h>
+00021 
+00022 // include files for KDE
+00023 #include <klocale.h>
+00024 #include <kmessagebox.h>
+00025 #include <kio/job.h>
+00026 #include <kio/netaccess.h>
+00027 
+00028 // application specific includes
+00029 #include "kshowmaildoc.h"
+00030 #include "kshowmail.h"
+00031 #include "kshowmailview.h"
+00032 
+00033 KshowmailView *KshowmailDoc::pView = 0L;
+00034 
+00035 KshowmailDoc::KshowmailDoc(QWidget *parent, const char *name) : QObject(parent, name)
+00036 {
+00037 }
+00038 
+00039 KshowmailDoc::~KshowmailDoc()
+00040 {
+00041 }
+00042 
+00043 void KshowmailDoc::addView(KshowmailView *view)
+00044 {
+00045   pView = view;
+00046 }
+00047 
+00048 void KshowmailDoc::removeView(KshowmailView*)
+00049 {
+00050   delete pView;
+00051 }
+00052 
+00053 void KshowmailDoc::setURL(const KURL &url)
+00054 {
+00055   doc_url=url;
+00056 }
+00057 
+00058 const KURL& KshowmailDoc::URL() const
+00059 {
+00060   return doc_url;
+00061 }
+00062 
+00063 // this could be deleted; perhaps we build a tree view sometime ?
+00064 void KshowmailDoc::slotUpdateAllViews(KshowmailView *sender)
+00065 {
+00066   if(pView)
+00067   {
+00068      if(pView!=sender)
+00069         pView->repaint();
+00070   }
+00071 }
+00072 
+00073 bool KshowmailDoc::newDocument()
+00074 {
+00076   // TODO: Add your document initialization code here
+00078   doc_url.setFileName(i18n("Untitled"));
+00079 
+00080   return true;
+00081 }
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildoc_8h-source.html b/doc/html/kshowmaildoc_8h-source.html new file mode 100644 index 0000000..3f9574a --- /dev/null +++ b/doc/html/kshowmaildoc_8h-source.html @@ -0,0 +1,86 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildoc.h Source File + + + + + + + +

kshowmaildoc.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           kshowmaildoc.h  -  description
+00003                              -------------------
+00004     begin                : Fre Sep 28 23:29:54 CEST 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef KSHOWMAILDOC_H
+00019 #define KSHOWMAILDOC_H
+00020 
+00021 #ifdef HAVE_CONFIG_H
+00022 #include <config.h>
+00023 #endif 
+00024 
+00025 // include files for QT
+00026 #include <qobject.h>
+00027 #include <qstring.h>
+00028 
+00029 // include files for KDE
+00030 #include <kurl.h>
+00031 
+00032 // forward declaration of the Kshowmail classes
+00033 class KshowmailView;
+00034 
+00045 class KshowmailDoc : public QObject
+00046 {
+00047   Q_OBJECT
+00048   public:
+00050     KshowmailDoc(QWidget *parent, const char *name=0);
+00052     ~KshowmailDoc();
+00053 
+00055     void addView(KshowmailView *view);
+00057     void removeView(KshowmailView *view);
+00059     bool newDocument();
+00061     const KURL& URL() const;
+00063           void setURL(const KURL& url);
+00064         
+00065   public slots:
+00069     void slotUpdateAllViews(KshowmailView *sender);
+00070         
+00071   public:       
+00073     // no List; just one view
+00074     static KshowmailView *pView;        
+00075 
+00076   private:
+00078     KURL doc_url;
+00079 };
+00080 
+00081 #endif // KSHOWMAILDOC_H
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildoc_8moc_8cpp-source.html b/doc/html/kshowmaildoc_8moc_8cpp-source.html new file mode 100644 index 0000000..04876b3 --- /dev/null +++ b/doc/html/kshowmaildoc_8moc_8cpp-source.html @@ -0,0 +1,126 @@ + + +kshowmail: kshowmail/kshowmaildoc.moc.cpp Source File + + + + + + +

kshowmaildoc.moc.cpp

00001 /****************************************************************************
+00002 ** KshowmailDoc meta object code from reading C++ file 'kshowmaildoc.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:08:59 2007
+00005 **      by: The Qt MOC ($Id: kshowmaildoc_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "kshowmaildoc.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *KshowmailDoc::className() const
+00023 {
+00024     return "KshowmailDoc";
+00025 }
+00026 
+00027 QMetaObject *KshowmailDoc::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_KshowmailDoc( "KshowmailDoc", &KshowmailDoc::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString KshowmailDoc::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "KshowmailDoc", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString KshowmailDoc::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "KshowmailDoc", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* KshowmailDoc::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QObject::staticMetaObject();
+00055     static const QUParameter param_slot_0[] = {
+00056        { "sender", &static_QUType_ptr, "KshowmailView", QUParameter::In }
+00057     };
+00058     static const QUMethod slot_0 = {"slotUpdateAllViews", 1, param_slot_0 };
+00059     static const QMetaData slot_tbl[] = {
+00060        { "slotUpdateAllViews(KshowmailView*)", &slot_0, QMetaData::Public }
+00061     };
+00062     metaObj = QMetaObject::new_metaobject(
+00063        "KshowmailDoc", parentObject,
+00064        slot_tbl, 1,
+00065        0, 0,
+00066 #ifndef QT_NO_PROPERTIES
+00067        0, 0,
+00068        0, 0,
+00069 #endif // QT_NO_PROPERTIES
+00070        0, 0 );
+00071     cleanUp_KshowmailDoc.setMetaObject( metaObj );
+00072     return metaObj;
+00073 }
+00074 
+00075 void* KshowmailDoc::qt_cast( const char* clname )
+00076 {
+00077     if ( !qstrcmp( clname, "KshowmailDoc" ) )
+00078        return this;
+00079     return QObject::qt_cast( clname );
+00080 }
+00081 
+00082 bool KshowmailDoc::qt_invoke( int _id, QUObject* _o )
+00083 {
+00084     switch ( _id - staticMetaObject()->slotOffset() ) {
+00085     case 0: slotUpdateAllViews((KshowmailView*)static_QUType_ptr.get(_o+1)); break;
+00086     default:
+00087        return QObject::qt_invoke( _id, _o );
+00088     }
+00089     return TRUE;
+00090 }
+00091 
+00092 bool KshowmailDoc::qt_emit( int _id, QUObject* _o )
+00093 {
+00094     return QObject::qt_emit(_id,_o);
+00095 }
+00096 #ifndef QT_NO_PROPERTIES
+00097 
+00098 bool KshowmailDoc::qt_property( int id, int f, QVariant* v)
+00099 {
+00100     return QObject::qt_property( id, f, v);
+00101 }
+00102 
+00103 bool KshowmailDoc::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00104 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildock_8cpp-source.html b/doc/html/kshowmaildock_8cpp-source.html new file mode 100644 index 0000000..26d1bb2 --- /dev/null +++ b/doc/html/kshowmaildock_8cpp-source.html @@ -0,0 +1,105 @@ + + +kshowmail: kshowmail/kshowmaildock.cpp Source File + + + + + + +

kshowmaildock.cpp

00001 /***************************************************************************
+00002                           kshowmaildock.cpp  -  description
+00003                              -------------------
+00004     begin                : Wed Jan 3 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <qpixmap.h>
+00019 #include <qpainter.h>
+00020 #include <qtooltip.h>
+00021 
+00022 #include <kpopupmenu.h>
+00023 #include <kstandarddirs.h>
+00024 #include <kglobalsettings.h>
+00025 #include <klocale.h>
+00026 #include <kdebug.h>
+00027 
+00028 #include "kshowmail.h"
+00029 #include "kshowmaildock.h"
+00030 
+00031 KShowMailDock::KShowMailDock(QWidget* parent, KAction *actionRefresh )
+00032 : KSystemTray (parent, 0),
+00033       m_background (QPixmap(::locate ("data", "kshowmail/pics/kshowmail24.png")))
+00034 {
+00035 //  kdDebug () << "KShowMailDock::KShowMailDock" << endl;
+00036   drawText ("?", Qt::red);
+00037   QToolTip::add (this, i18n("KShowmail: a powerful pop3 email checker"));
+00038 
+00039   show();
+00040 
+00041   actionRefresh->plug( contextMenu() );
+00042   //((KShowMailApp*)parent)->m_actionRefresh->plug (contextMenu());
+00043   connect (contextMenu(),SIGNAL(activated(int)),this, SIGNAL(sigActivated(int)));
+00044   connect (contextMenu(),SIGNAL(highlighted(int)),this, SIGNAL(sigHighlighted(int)));
+00045 }
+00046 
+00047 void KShowMailDock::drawText (const QString str, const QColor& color)
+00048 {
+00049   setPixmap (m_background);
+00050   QPixmap* pix = pixmap ();
+00051    if (pix && !pix->isNull ())
+00052   {
+00053     QPainter p (pix);
+00054 //     p.setFont (KGlobalSettings::toolBarFont());
+00055      p.setFont (KGlobalSettings::windowTitleFont());
+00056     p.setPen (color);
+00057      p.drawText  (0,0,24,24,QPainter::AlignCenter,str,str.length());
+00058   }
+00059   else
+00060     kdError () << "No pixmap for traybar !" << endl;
+00061 }
+00062 
+00063 void KShowMailDock::drawNumber (int n, const QColor& color)
+00064 {
+00065   setPixmap (m_background);
+00066   QPixmap* pix = pixmap ();
+00067    if (pix && !pix->isNull ())
+00068   {
+00069     QString num (QString::number(n));
+00070     QPainter p (pix);
+00071      p.setFont (KGlobalSettings::toolBarFont());
+00072     p.setPen (color);
+00073      p.drawText  (0,0,24,24,QPainter::AlignCenter,num,num.length());
+00074   }
+00075   else
+00076     kdError () << "No pixmap for traybar !" << endl;
+00077 }
+00078 
+00079 void KShowMailDock::clear ()
+00080 {
+00081   setPixmap (m_background);
+00082 }
+00083 
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildock_8h-source.html b/doc/html/kshowmaildock_8h-source.html new file mode 100644 index 0000000..14e37a0 --- /dev/null +++ b/doc/html/kshowmaildock_8h-source.html @@ -0,0 +1,69 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmaildock.h Source File + + + + + + + +

kshowmaildock.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           kshowmaildock.h  -  description
+00003                              -------------------
+00004     begin                : Wed Jan 3 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef KSHOWMAILDOCK_H
+00019 #define KSHOWMAILDOCK_H
+00020 
+00021 #include <qwidget.h>
+00022 #include <qpixmap.h>
+00023 #include <ksystemtray.h>
+00024 #include <kaction.h>
+00025 
+00030 class KShowMailDock : public KSystemTray
+00031 {
+00032   Q_OBJECT
+00033 public:
+00034         KShowMailDock(QWidget*, KAction *actionRefresh );
+00035         ~KShowMailDock() {};
+00036   void drawText (const QString str, const QColor& color);
+00037   void drawNumber (int n, const QColor& color);
+00038   void clear ();
+00039 signals:
+00040         void sigActivated(int);
+00041         void sigHighlighted(int);
+00042 private:
+00043   QPixmap m_background;
+00044 };
+00045 
+00046 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmaildock_8moc_8cpp-source.html b/doc/html/kshowmaildock_8moc_8cpp-source.html new file mode 100644 index 0000000..6624577 --- /dev/null +++ b/doc/html/kshowmaildock_8moc_8cpp-source.html @@ -0,0 +1,144 @@ + + +kshowmail: kshowmail/kshowmaildock.moc.cpp Source File + + + + + + +

kshowmaildock.moc.cpp

00001 /****************************************************************************
+00002 ** KShowMailDock meta object code from reading C++ file 'kshowmaildock.h'
+00003 **
+00004 ** Created: Fri Jun 29 22:09:01 2007
+00005 **      by: The Qt MOC ($Id: kshowmaildock_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "kshowmaildock.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *KShowMailDock::className() const
+00023 {
+00024     return "KShowMailDock";
+00025 }
+00026 
+00027 QMetaObject *KShowMailDock::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_KShowMailDock( "KShowMailDock", &KShowMailDock::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString KShowMailDock::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "KShowMailDock", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString KShowMailDock::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "KShowMailDock", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* KShowMailDock::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = KSystemTray::staticMetaObject();
+00055     static const QUParameter param_signal_0[] = {
+00056        { 0, &static_QUType_int, 0, QUParameter::In }
+00057     };
+00058     static const QUMethod signal_0 = {"sigActivated", 1, param_signal_0 };
+00059     static const QUParameter param_signal_1[] = {
+00060        { 0, &static_QUType_int, 0, QUParameter::In }
+00061     };
+00062     static const QUMethod signal_1 = {"sigHighlighted", 1, param_signal_1 };
+00063     static const QMetaData signal_tbl[] = {
+00064        { "sigActivated(int)", &signal_0, QMetaData::Public },
+00065        { "sigHighlighted(int)", &signal_1, QMetaData::Public }
+00066     };
+00067     metaObj = QMetaObject::new_metaobject(
+00068        "KShowMailDock", parentObject,
+00069        0, 0,
+00070        signal_tbl, 2,
+00071 #ifndef QT_NO_PROPERTIES
+00072        0, 0,
+00073        0, 0,
+00074 #endif // QT_NO_PROPERTIES
+00075        0, 0 );
+00076     cleanUp_KShowMailDock.setMetaObject( metaObj );
+00077     return metaObj;
+00078 }
+00079 
+00080 void* KShowMailDock::qt_cast( const char* clname )
+00081 {
+00082     if ( !qstrcmp( clname, "KShowMailDock" ) )
+00083        return this;
+00084     return KSystemTray::qt_cast( clname );
+00085 }
+00086 
+00087 // SIGNAL sigActivated
+00088 void KShowMailDock::sigActivated( int t0 )
+00089 {
+00090     activate_signal( staticMetaObject()->signalOffset() + 0, t0 );
+00091 }
+00092 
+00093 // SIGNAL sigHighlighted
+00094 void KShowMailDock::sigHighlighted( int t0 )
+00095 {
+00096     activate_signal( staticMetaObject()->signalOffset() + 1, t0 );
+00097 }
+00098 
+00099 bool KShowMailDock::qt_invoke( int _id, QUObject* _o )
+00100 {
+00101     return KSystemTray::qt_invoke(_id,_o);
+00102 }
+00103 
+00104 bool KShowMailDock::qt_emit( int _id, QUObject* _o )
+00105 {
+00106     switch ( _id - staticMetaObject()->signalOffset() ) {
+00107     case 0: sigActivated((int)static_QUType_int.get(_o+1)); break;
+00108     case 1: sigHighlighted((int)static_QUType_int.get(_o+1)); break;
+00109     default:
+00110        return KSystemTray::qt_emit(_id,_o);
+00111     }
+00112     return TRUE;
+00113 }
+00114 #ifndef QT_NO_PROPERTIES
+00115 
+00116 bool KShowMailDock::qt_property( int id, int f, QVariant* v)
+00117 {
+00118     return KSystemTray::qt_property( id, f, v);
+00119 }
+00120 
+00121 bool KShowMailDock::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00122 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmailfeedback_8cpp-source.html b/doc/html/kshowmailfeedback_8cpp-source.html new file mode 100644 index 0000000..b7f457e --- /dev/null +++ b/doc/html/kshowmailfeedback_8cpp-source.html @@ -0,0 +1,176 @@ + + +kshowmail: kshowmail/kshowmailfeedback.cpp Source File + + + + + + +

kshowmailfeedback.cpp

00001 /*
+00002  *   File name:      kshowmailfeedback.cpp
+00003  *   Summary: User feedback questions for KShowmail
+00004  *   License: GPL - See file COPYING for details.
+00005  *
+00006  *   Author:  Stefan Hundhammer <sh@suse.de>
+00007  *            Eggert Ehmke <eggert.ehmke@berlin.de>
+00008  *
+00009  *   Updated: 2002-05-30
+00010  *
+00011  *   $Id: kshowmailfeedback_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $
+00012  *
+00013  */
+00014 
+00015 
+00016 #include <klocale.h>
+00017 
+00018 #include "kshowmail.h"
+00019 #include "kfeedback.h"
+00020 
+00021 
+00022 
+00023 void KShowMailApp::slotSendFeedbackMail()
+00024 {
+00025   KFeedbackDialog* feedbackDialog = new KFeedbackDialog( "eggert.ehmke@berlin.de", "feedback_mail" );
+00026        CHECK_PTR( feedbackDialog );
+00027 
+00028        KFeedbackQuestionList * list = feedbackDialog->form()->questionList();
+00029 
+00030        KFeedbackQuestion * question =
+00031            list->addQuestion( i18n( "What is your general opinion about this program?" ), "general_opinion", true, true );
+00032 
+00033        question->addAnswer( i18n( "It's one of my favourites"),                "1/8_favourite");
+00034        question->addAnswer( i18n( "I like it"),                                "2/8_like_it");
+00035        question->addAnswer( i18n( "It's sometimes useful"),                    "3/8_sometimes_useful");
+00036        question->addAnswer( i18n( "It's average"),                             "4/8_average");
+00037        question->addAnswer( i18n( "Nice try, but this could be done better"),  "5/8_nice_try");
+00038        question->addAnswer( i18n( "It's poor"),                                "6/8_poor");
+00039        question->addAnswer( i18n( "It's useless"),                             "7/8_useless");
+00040        question->addAnswer( i18n( "It's crap"),                                "8/8_crap");
+00041 
+00042        question = list->addQuestion( i18n( "Which features of this program do you like?" ), "features_liked", false );
+00043        addFeatureList( question );
+00044 
+00045        question = list->addQuestion( i18n( "What is your favourite feature?" ),     "favourite_feature", true );
+00046        addFeatureList( question );
+00047 
+00048        question = list->addQuestion( i18n( "Which features don't you like?" ),      "features_not_liked",       false );
+00049        addFeatureList( question );
+00050 
+00051        question = list->addQuestion( i18n( "Which features do you never use?" ),    "features_never_used",      false );
+00052        addFeatureList( question );
+00053 
+00054        question = list->addQuestion( i18n( "Are there features you are missing?" ), "features_missing",  true );
+00055        question->addAnswer( i18n( "Yes, a lot! (please add comment below)"   ),     "1/4_lots"           );
+00056        question->addAnswer( i18n( "Some (please add comment below)"          ),     "2/4_some"           );
+00057        question->addAnswer( i18n( "None"                              ),     "3/4_none"           );
+00058        question->addAnswer( i18n( "It has too many features already!"        ),     "4/4_too_many_already"      );
+00059 
+00060        question = list->addQuestion( i18n( "How do you rate the stability of this program?" ),    "stability",  true, true );
+00061        question->addAnswer( i18n( "Rock solid"),                     "1/5_rock_solid"             );
+00062        question->addAnswer( i18n( "Good"),                           "2/5_good");
+00063        question->addAnswer( i18n( "Average"),                        "3/5_average");
+00064        question->addAnswer( i18n( "Poor"),                           "4/5_poor"            );
+00065        question->addAnswer( i18n( "It keeps crashing all the time"), "5/5_keeps_crashing"  );
+00066 
+00067        question = list->addQuestion( i18n( "How do you rate the performance of this program?" ), "performance", true );
+00068        question->addAnswer( i18n( "Great"),                          "1/5_great");
+00069        question->addAnswer( i18n( "Good"),                           "2/5_good");
+00070        question->addAnswer( i18n( "Average"),                        "3/5_average");
+00071        question->addAnswer( i18n( "Poor"),                           "4/5_poor");
+00072        question->addAnswer( i18n( "It's so slow it drives me nuts"), "5/5_drives_me_nuts");
+00073 
+00074        question = list->addQuestion( i18n( "What is your experience with computers in general?" ), "computer_experience", true );
+00075        question->addAnswer( i18n( "Expert"                                   ),     "1/5_expert"         );
+00076        question->addAnswer( i18n( "Fair"                              ),     "2/5_fair"           );
+00077        question->addAnswer( i18n( "Average"                                  ),     "3/5_average"        );
+00078        question->addAnswer( i18n( "Learning"                                 ),     "4/5_learning"       );
+00079        question->addAnswer( i18n( "Newbie"                                   ),     "5/5_newbie"         );
+00080 
+00081        question = list->addQuestion( i18n( "What is your experience with Unix/Linux systems?" ), "unix_experience", true );
+00082        question->addAnswer( i18n( "Expert"                                   ),     "1/5_expert"         );
+00083        question->addAnswer( i18n( "Fair"                              ),     "2/5_fair"           );
+00084        question->addAnswer( i18n( "Average"                                  ),     "3/5_average"        );
+00085        question->addAnswer( i18n( "Learning"                                 ),     "4/5_learning"       );
+00086        question->addAnswer( i18n( "Newbie"                                   ),     "5/5_newbie"         );
+00087 
+00088        question = list->addQuestion( i18n( "Did you have trouble figuring out how to work with this program?" ),
+00089                                   "learning_curve", true, true );
+00090        question->addAnswer( i18n( "No problem"                               ),     "1/5_no_problem"     );
+00091        question->addAnswer( i18n( "Some"                              ),     "2/5_some_problems"  );
+00092        question->addAnswer( i18n( "I'm still learning"                       ),     "3/5_still_learing"  );
+00093        question->addAnswer( i18n( "I didn't have a clue what to do at first" ),     "4/5_no_clue_at_first"      );
+00094        question->addAnswer( i18n( "I still don't have a clue what to do"     ),     "5/5_still_no_clue"  );
+00095 
+00096        question = list->addQuestion( i18n( "Where do you use this program most?" ), "usage_where",              true );
+00097        question->addAnswer( i18n( "At work"                                  ),     "at_work"            );
+00098        question->addAnswer( i18n( "At home"                                  ),     "at_home"            );
+00099        question->addAnswer( i18n( "At university / school"                   ),     "university"         );
+00100 
+00101        question = list->addQuestion( i18n( "What is your primary role there?"       ),     "primary_role",             true );
+00102        question->addAnswer( i18n( "Home user"                                ),     "home_user"          );
+00103        question->addAnswer( i18n( "Student"                                  ),     "student"            );
+00104        question->addAnswer( i18n( "Educational (teacher / professor)"        ),     "educational"        );
+00105        question->addAnswer( i18n( "Non-computer related work"                ),     "non_computer"              );
+00106        question->addAnswer( i18n( "Developer"                                ),     "developer"          );
+00107        question->addAnswer( i18n( "System administrator"                     ),     "sysadmin"           );
+00108 
+00109        question = list->addQuestion( i18n( "Do you have any other roles there?" ),  "other_roles",              false );
+00110        question->addAnswer( i18n( "Home user"                                ),     "home_user"          );
+00111        question->addAnswer( i18n( "Student"                                  ),     "student"            );
+00112        question->addAnswer( i18n( "Educational (teacher / professor)"        ),     "educational"        );
+00113        question->addAnswer( i18n( "Non-computer related work"                ),     "non_computer"              );
+00114        question->addAnswer( i18n( "Developer"                                ),     "developer"          );
+00115        question->addAnswer( i18n( "System administrator"                     ),     "sysadmin"           );
+00116 
+00117        question = list->addQuestion( i18n( "How did you get to know this program?" ),      "first_contact",     true );
+00118        question->addAnswer( i18n( "In a menu on my machine"                  ),     "menu"               );
+00119        question->addAnswer( i18n( "Somebody told me about it"                ),     "told"               );
+00120        question->addAnswer( i18n( "On the internet"                          ),     "internet"           );
+00121        question->addAnswer( i18n( "Printed magazine / book"                  ),     "print_media"        );
+00122        question->addAnswer( i18n( "Other (please add comment below)"         ),     "other"                     );
+00123 
+00124        list->addYesNoQuestion( i18n( "Would you recommend this program to a friend?" ), "recommend", true );
+00125 
+00126   feedbackDialog->show();
+00127 }
+00128 
+00129 
+00130 void KShowMailApp::addFeatureList( KFeedbackQuestion * question )
+00131 {
+00132     question->addAnswer( i18n( "The message list display in general"),       "message_list"              );
+00133     question->addAnswer( i18n( "Display of message headers" ),          "message_header"   );
+00134     question->addAnswer( i18n( "Display of complete messages"),         "complete_message"        );
+00135 
+00136     question->addAnswer( i18n( "Manual delete of unwanted messages"),     "manual_delete_messages"       );
+00137     question->addAnswer( i18n( "Manual delete of filtered messages"),     "manual_delete_filtered_messages"     );
+00138     question->addAnswer( i18n( "Automatic delete of filtered messages"),  "automatic_delete_filtered_messages"  );
+00139     question->addAnswer( i18n( "Filter messages by regular expressions"), "filter_messages_by regular_expression"      );
+00140 
+00141     question->addAnswer( i18n( "Execute user commands"),    "user_commands"  );
+00142 
+00143     question->addAnswer( i18n( "Sorting of messages by size, date etc."             ),     "sorting"     );
+00144 
+00145     question->addAnswer( i18n( "Play sound"),               "play_sound"            );
+00146     question->addAnswer( i18n( "Play beep"),                "play_beep"      );
+00147     question->addAnswer( i18n( "Initial timer"),            "initial_timer"  );
+00148     question->addAnswer( i18n( "Interval timer"),           "interval_timer"        );
+00149     question->addAnswer( i18n( "This feedback survey :-)"), "feedback"              );
+00150 }
+00151 
+00152 
+00153 
+00154 // EOF
+

Generated on Thu Jul 5 19:36:06 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmailview_8cpp-source.html b/doc/html/kshowmailview_8cpp-source.html new file mode 100644 index 0000000..3888583 --- /dev/null +++ b/doc/html/kshowmailview_8cpp-source.html @@ -0,0 +1,450 @@ + + +kshowmail: kshowmail/kshowmailview.cpp Source File + + + + + + +

kshowmailview.cpp

00001 /***************************************************************************
+00002                           kshowmailview.cpp  -  description
+00003                              -------------------
+00004     begin                : Sat May  6 12:13:57 MEST 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007 
+00008      26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00009  ***************************************************************************/
+00010 
+00011 /***************************************************************************
+00012  *                                                                         *
+00013  *   This program is free software; you can redistribute it and/or modify  *
+00014  *   it under the terms of the GNU General Public License as published by  *
+00015  *   the Free Software Foundation; either version 2 of the License, or     *
+00016  *   (at your option) any later version.                                   *
+00017  *                                                                         *
+00018  ***************************************************************************/
+00019 
+00020 // include files for Qt
+00021 #include <qprinter.h>
+00022 #include <qpainter.h>
+00023 #include <qmessagebox.h>
+00024 #include <qkeycode.h>
+00025 #include <qvaluelist.h>
+00026 
+00027 #include <kstandarddirs.h>
+00028 #include <klocale.h>
+00029 #include <kdebug.h>
+00030 
+00031 // application specific includes
+00032 #include "kshowmailview.h"
+00033 #include "kshowmaildoc.h"
+00034 #include "kshowmail.h"
+00035 
+00036 KshowmailView::KshowmailView(QWidget *parent, const char *name):
+00037        QSplitter(Vertical, parent, name)
+00038 {
+00039   //get application config object (kshowmailrc)
+00040   config = KApplication::kApplication()->config();
+00041 
+00042        m_pixOk = new QPixmap (::locate ("data", "kshowmail/pics/ok.png"));
+00043 
+00044        m_pListAccounts = new KListView (this, "accounts");
+00045        m_pListMessages = new KListView (this, "messages");
+00046   setBackgroundMode(PaletteBase);
+00047 
+00048   m_pListAccounts->setSelectionMode (QListView::Extended);
+00049        m_pListAccounts->setAllColumnsShowFocus (true);
+00050   // sort account column
+00051   m_pListAccounts->setSorting (1);
+00052   m_pListAccounts->setShowSortIndicator (true);
+00053        m_pListAccounts->addColumn (i18n("Active"), DEFAULT_WIDTH_ACCOUNT_ACTIVE );
+00054        m_pListAccounts->addColumn (i18n("Account"), DEFAULT_WIDTH_ACCOUNT_ACCOUNT );
+00055        m_pListAccounts->addColumn (i18n("Server"), DEFAULT_WIDTH_ACCOUNT_SERVER );
+00056        m_pListAccounts->addColumn (i18n("User"), DEFAULT_WIDTH_ACCOUNT_USER );
+00057        m_pListAccounts->addColumn (i18n("Messages"), DEFAULT_WIDTH_ACCOUNT_MESSAGES );
+00058        m_pListAccounts->addColumn (i18n("Size"), DEFAULT_WIDTH_ACCOUNT_SIZE );
+00059 
+00060   m_pListMessages->setSelectionMode (QListView::Extended);
+00061        m_pListMessages->setAllColumnsShowFocus (true);
+00062   // sort number column
+00063        m_pListMessages->setSorting (ShowListViewItem::_colNumber);
+00064   m_pListMessages->setShowSortIndicator (true);
+00065        setFocusPolicy (QWidget::StrongFocus);
+00066 
+00067        m_pListMessages->addColumn (i18n("Number"), DEFAULT_WIDTH_MESSAGE_NUMBER );
+00068        m_pListMessages->addColumn (i18n("Account"), DEFAULT_WIDTH_MESSAGE_ACCOUNT );
+00069        m_pListMessages->addColumn (i18n("From"), DEFAULT_WIDTH_MESSAGE_FROM );
+00070        m_pListMessages->addColumn (i18n("To"),  DEFAULT_WIDTH_MESSAGE_TO );
+00071        m_pListMessages->addColumn (i18n("Subject"), DEFAULT_WIDTH_MESSAGE_SUBJECT );
+00072        m_pListMessages->addColumn (i18n("Date"), DEFAULT_WIDTH_MESSAGE_DATE );
+00073        m_pListMessages->addColumn (i18n("Size"), DEFAULT_WIDTH_MESSAGE_SIZE );
+00074        m_pListMessages->addColumn (i18n("Content"), DEFAULT_WIDTH_MESSAGE_CONTENT );
+00075        m_pListMessages->addColumn (i18n("State"),  DEFAULT_WIDTH_MESSAGE_STATE );
+00076 
+00077        connect (m_pListAccounts, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint &, int)),
+00078                                                         SLOT (slotAccountContext(QListViewItem*, const QPoint &, int)));
+00079        connect (m_pListAccounts, SIGNAL (clicked (QListViewItem*, const QPoint &, int)),
+00080                                                         SLOT (slotAccountClicked(QListViewItem*, const QPoint &, int)));
+00081        connect (m_pListMessages, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint &, int)),
+00082                                                         SLOT (slotMessageContext(QListViewItem*, const QPoint &, int)));
+00083        connect (m_pListMessages, SIGNAL (doubleClicked (QListViewItem*)),
+00084                                                         SLOT (slotMessageDoubleClicked (QListViewItem*)));
+00085        connect (m_pListMessages, SIGNAL (clicked (QListViewItem*)),
+00086                                                         SLOT (slotMessageClicked (QListViewItem*)));
+00087 
+00088   //read the geometry from the application config file
+00089   readOptions();
+00090 
+00091 
+00092 }
+00093 
+00094 KshowmailView::~KshowmailView()
+00095 {
+00096        delete m_pListAccounts;
+00097        delete m_pListMessages;
+00098 }
+00099 
+00100 void KshowmailView::readOptions()
+00101 {
+00102   //read splitter geometry
+00103   config->setGroup ("Display Options");
+00104   QValueList<int> size;
+00105   size.append (config->readNumEntry ("sizeaccounts", 40));
+00106   size.append (config->readNumEntry ("sizemessages", 50));
+00107   setSizes (size);
+00108 
+00109   // read layout of the list views
+00110   m_pListAccounts->restoreLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
+00111   m_pListMessages->restoreLayout( config, CONFIG_GROUP_MESSAGE_LIST );
+00112 }
+00113 
+00114 void KshowmailView::saveOptions (KConfig* config)
+00115 {
+00116 //     kdDebug () << "KshowmailView::saveOptions" << endl;
+00117        config->setGroup("Display Options");
+00118        //splitter
+00119        QValueList<int> size = sizes ();
+00120        config->writeEntry ("sizeaccounts",  size [0]);
+00121        config->writeEntry ("sizemessages",  size [1]);
+00122        // layout
+00123   m_pListAccounts->saveLayout ( config, CONFIG_GROUP_ACCOUNT_LIST );
+00124   m_pListMessages->saveLayout (config, CONFIG_GROUP_MESSAGE_LIST );
+00125 }
+00126 
+00127 
+00128 void KshowmailView::slotMessageContext( QListViewItem* pItem, const QPoint&, int )
+00129 {
+00130   if( pItem != NULL )
+00131   {
+00132     //get pointer to the main widget
+00133     KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
+00134 
+00135     //create and show popup menu
+00136     QWidget* w = theApp->factory()->container( "mail_context_popup", theApp );
+00137     QPopupMenu* popup = static_cast<QPopupMenu*>( w );
+00138     popup->exec( QCursor::pos() );
+00139 
+00140     //select clicked item
+00141     m_pListMessages->setSelected (pItem, true);
+00142   }
+00143 }
+00144 
+00145 void KshowmailView::slotAccountContext( QListViewItem* pItem, const QPoint&, int )
+00146 {
+00147   if ( pItem != NULL )
+00148   {
+00149     //get pointer to the main widget
+00150     KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
+00151 
+00152     //create and show popup menu
+00153     QWidget* w = theApp->factory()->container( "account_context_popup", theApp );
+00154     QPopupMenu* popup = static_cast<QPopupMenu*>( w );
+00155     popup->exec( QCursor::pos() );
+00156 
+00157     //select clicked item
+00158     m_pListAccounts->setSelected( pItem, true );
+00159   }
+00160 }
+00161 
+00162 void KshowmailView::slotAccountClicked (QListViewItem* pItem, const QPoint&, int col)
+00163 {
+00164        if (col == 0)
+00165        {
+00166               KShowMailApp *theApp=(KShowMailApp *) parentWidget();
+00167         ConfigElem* pElem = theApp->m_ConfigList.getSelectedAccount();
+00168         if( pElem != NULL )
+00169         {
+00170           pElem->setActive( !pElem->isActive() );
+00171           if (pElem->isActive() )
+00172             pItem->setPixmap (0, *m_pixOk);
+00173           else
+00174             pItem->setPixmap (0, 0);
+00175           emit signalActiveChanged ();
+00176         }
+00177        }
+00178 }
+00179 
+00180 void KshowmailView::slotMessageDoubleClicked (QListViewItem* pItem)
+00181 {
+00182        if (pItem)
+00183        {
+00184 //            m_pListMessages->setSelected (pItem, true);
+00185 
+00186        KShowMailApp *theApp=(KShowMailApp *) parentWidget();
+00187               theApp->slotShowHeader ();
+00188        }
+00189 }
+00190 
+00191 void KshowmailView::slotMessageClicked (QListViewItem* pItem)
+00192 {
+00193   kdDebug () << "slotMessageClicked" << endl;
+00194   if (pItem)
+00195        {
+00196 //            m_pListMessages->setSelected (pItem, true);
+00197 
+00198        KShowMailApp *theApp=(KShowMailApp *) parentWidget();
+00199               theApp->delayNextRefresh();
+00200        }
+00201 }
+00202 
+00203 void KshowmailView::clearMailListView( )
+00204 {
+00205   m_pListMessages->clear();
+00206 }
+00207 
+00208 ShowListViewItem* KshowmailView::insertMail( QString& number, QString& account, QString& from, QString& to, QString& subject, QString& date, QString& size, QString& content, QString& state, QString& time )
+00209 {
+00210   //create item
+00211   ShowListViewItem* item = new ShowListViewItem( m_pListMessages );
+00212 
+00213   //set content
+00214   item->setNumber( number );
+00215   item->setAccount( account );
+00216   item->setFrom( from );
+00217   item->setTo( to );
+00218   item->setSubject( subject );
+00219   item->setDate( date );
+00220   item->setSize( size );
+00221   item->setContent( content );
+00222   item->setState( state );
+00223   item->setTime( time );
+00224 
+00225   return item;
+00226 }
+00227 
+00228 void KshowmailView::refreshSetup( )
+00229 {
+00230   QString ConfigEntryDisplay;     //entry of the config about show or hide column
+00231   QString ConfigEntrySavedWidth;  //entry of the config about saved width
+00232   int DefaultWidth = 100;         //default width of the proceeded column
+00233   bool DefaultDisplay = true;     //default show or hide of the proceeded column
+00234 
+00235   //set columns of the account list
+00236   config->setGroup( CONFIG_GROUP_ACCOUNT_LIST );
+00237   for( int column = 0; column <= 5; column++ )  //iterate over all columns
+00238   {
+00239     //get config entries and defaults of the proceeded column from the constants header
+00240     switch( column )
+00241     {
+00242       case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE;
+00243               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE;
+00244               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACTIVE;
+00245               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACTIVE;
+00246               break;
+00247 
+00248       case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT;
+00249               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT;
+00250               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACCOUNT;
+00251               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACCOUNT;
+00252               break;
+00253 
+00254       case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER;
+00255               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER;
+00256               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SERVER;
+00257               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SERVER;
+00258               break;
+00259 
+00260       case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_USER;
+00261               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER;
+00262               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_USER;
+00263               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_USER;
+00264               break;
+00265 
+00266       case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES;
+00267               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES;
+00268               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_MESSAGES;
+00269               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_MESSAGES;
+00270               break;
+00271 
+00272       case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE;
+00273               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE;
+00274               DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SIZE;
+00275               DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SIZE;
+00276               break;
+00277     } //end select
+00278 
+00279     //get desired column state
+00280     bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
+00281 
+00282     //get currently column state
+00283     bool curShowed = m_pListAccounts->columnWidth( column ) > 0;
+00284 
+00285     if( showColumn )
+00286     {
+00287       //column will be shown
+00288 
+00289       if( !curShowed )
+00290       {
+00291         //the column is currently not be shown
+00292 
+00293         //get saved width or take default width
+00294         int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
+00295 
+00296         //set column width
+00297         m_pListAccounts->setColumnWidth( column, savedWidth );
+00298       }
+00299         //else: the column is currently shown; do nothing
+00300     }
+00301     else
+00302     {
+00303       //column will not be shown
+00304 
+00305       if( curShowed )
+00306       {
+00307         //the column is currently shown
+00308 
+00309         //save current width
+00310         config->writeEntry( ConfigEntrySavedWidth, m_pListAccounts->columnWidth( column ) );
+00311 
+00312         //hide column
+00313         m_pListAccounts->hideColumn( column );
+00314       }
+00315         //else: the column is already hidden; do nothing
+00316     }
+00317 
+00318   } //end column loop
+00319 
+00320   //set columns of the message list
+00321   config->setGroup( CONFIG_GROUP_MESSAGE_LIST );
+00322   for( int column = 0; column <= 8; column++ )  //iterate over all columns
+00323   {
+00324     //get config entries and defaults of the proceeded column from the constants header
+00325     switch( column )
+00326     {
+00327       case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER;
+00328               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER;
+00329               DefaultWidth = DEFAULT_WIDTH_MESSAGE_NUMBER;
+00330               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_NUMBER;
+00331               break;
+00332 
+00333       case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT;
+00334               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT;
+00335               DefaultWidth = DEFAULT_WIDTH_MESSAGE_ACCOUNT;
+00336               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_ACCOUNT;
+00337               break;
+00338 
+00339       case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_FROM;
+00340               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM;
+00341               DefaultWidth = DEFAULT_WIDTH_MESSAGE_FROM;
+00342               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_FROM;
+00343               break;
+00344 
+00345       case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_TO;
+00346               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO;
+00347               DefaultWidth = DEFAULT_WIDTH_MESSAGE_TO;
+00348               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_TO;
+00349               break;
+00350 
+00351       case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT;
+00352               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT;
+00353               DefaultWidth = DEFAULT_WIDTH_MESSAGE_SUBJECT;
+00354               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SUBJECT;
+00355               break;
+00356 
+00357       case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_DATE;
+00358               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE;
+00359               DefaultWidth = DEFAULT_WIDTH_MESSAGE_DATE;
+00360               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_DATE;
+00361               break;
+00362 
+00363       case 6: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE;
+00364               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE;
+00365               DefaultWidth = DEFAULT_WIDTH_MESSAGE_SIZE;
+00366               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SIZE;
+00367               break;
+00368 
+00369       case 7: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT;
+00370               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT;
+00371               DefaultWidth = DEFAULT_WIDTH_MESSAGE_CONTENT;
+00372               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_CONTENT;
+00373               break;
+00374 
+00375       case 8: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_STATE;
+00376               ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE;
+00377               DefaultWidth = DEFAULT_WIDTH_MESSAGE_STATE;
+00378               DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_STATE;
+00379               break;
+00380 
+00381     } //end select
+00382 
+00383     //get desired column state
+00384     bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
+00385 
+00386     //get currently column state
+00387     bool curShowed = m_pListMessages->columnWidth( column ) > 0;
+00388 
+00389     if( showColumn )
+00390     {
+00391       //column will be shown
+00392 
+00393       if( !curShowed )
+00394       {
+00395         //the column is currently not be shown
+00396 
+00397         //get saved width or take default width
+00398         int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
+00399 
+00400         //set column width
+00401         m_pListMessages->setColumnWidth( column, savedWidth );
+00402       }
+00403         //else: the column is currently shown; do nothing
+00404     }
+00405     else
+00406     {
+00407       //column will not be shown
+00408 
+00409       if( curShowed )
+00410       {
+00411         //the column is currently shown
+00412 
+00413         //save current width
+00414         config->writeEntry( ConfigEntrySavedWidth, m_pListMessages->columnWidth( column ) );
+00415 
+00416         //hide column
+00417         m_pListMessages->hideColumn( column );
+00418       }
+00419         //else: the column is already hidden; do nothing
+00420     }
+00421 
+00422   } //end column loop
+00423 
+00424   //save current layout
+00425   m_pListAccounts->saveLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
+00426   m_pListMessages->saveLayout( config, CONFIG_GROUP_MESSAGE_LIST );
+00427   config->sync();
+00428 }
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmailview_8h-source.html b/doc/html/kshowmailview_8h-source.html new file mode 100644 index 0000000..e298f0a --- /dev/null +++ b/doc/html/kshowmailview_8h-source.html @@ -0,0 +1,114 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/kshowmailview.h Source File + + + + + + + +

kshowmailview.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           kshowmailview.h  -  description
+00003                              -------------------
+00004     begin                : Sat May  6 12:13:57 MEST 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007 
+00008     26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00009  ***************************************************************************/
+00010 
+00011 /***************************************************************************
+00012  *                                                                         *
+00013  *   This program is free software; you can redistribute it and/or modify  *
+00014  *   it under the terms of the GNU General Public License as published by  *
+00015  *   the Free Software Foundation; either version 2 of the License, or     *
+00016  *   (at your option) any later version.                                   *
+00017  *                                                                         *
+00018  ***************************************************************************/
+00019 
+00020 #ifndef KSHOWMAILVIEW_H
+00021 #define KSHOWMAILVIEW_H
+00022 
+00023 #ifdef HAVE_CONFIG_H
+00024 #include <config.h>
+00025 #endif
+00026 
+00027 //Qt headers
+00028 #include <qwidget.h>
+00029 #include <qsplitter.h>
+00030 #include <qcursor.h>
+00031 #include <qpopupmenu.h>
+00032 
+00033 //KDE headers
+00034 #include <klistview.h>
+00035 #include <kconfig.h>
+00036 #include <kapplication.h>
+00037 
+00038 //KShowmail headers
+00039 #include "configlist.h"
+00040 #include "showlistviewitem.h"
+00041 
+00042 
+00043 
+00044 class ConfigList;
+00045 class KshowmailDoc;
+00046 
+00057 class KshowmailView : public QSplitter
+00058 {
+00059   Q_OBJECT
+00060   public:
+00062     KshowmailView(QWidget *parent = 0, const char *name=0);
+00064     ~KshowmailView();
+00065                 void saveOptions (KConfig* config);
+00066 
+00067                 KListView* m_pListAccounts;
+00068                 KListView* m_pListMessages;
+00069 
+00073     void clearMailListView();
+00074 
+00090     ShowListViewItem* insertMail( QString& number, QString& account, QString& from, QString& to, QString& subject, QString& date, QString& size, QString& content, QString& state, QString& time );
+00091 
+00098     void refreshSetup();
+00099 
+00100   private:
+00101 
+00102     QPixmap* m_pixOk;
+00103 
+00107     KConfig* config;
+00108 
+00112     void readOptions();
+00113 
+00114 private slots:
+00115 
+00122   void slotMessageContext( QListViewItem*, const QPoint&, int );
+00123 
+00124         void slotMessageDoubleClicked (QListViewItem*);
+00125         void slotMessageClicked (QListViewItem*);
+00126 
+00133   void slotAccountContext( QListViewItem*, const QPoint &, int );
+00134 
+00139   void slotAccountClicked( QListViewItem*, const QPoint& point, int col );
+00140 
+00141 signals:
+00142         void signalActiveChanged ();
+00143 };
+00144 
+00145 #endif // KSHOWMAILVIEW_H
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/kshowmailview_8moc_8cpp-source.html b/doc/html/kshowmailview_8moc_8cpp-source.html new file mode 100644 index 0000000..f31ef29 --- /dev/null +++ b/doc/html/kshowmailview_8moc_8cpp-source.html @@ -0,0 +1,171 @@ + + +kshowmail: kshowmail/kshowmailview.moc.cpp Source File + + + + + + +

kshowmailview.moc.cpp

00001 /****************************************************************************
+00002 ** KshowmailView meta object code from reading C++ file 'kshowmailview.h'
+00003 **
+00004 ** Created: Thu Jul 5 19:14:18 2007
+00005 **      by: The Qt MOC ($Id: kshowmailview_8moc_8cpp-source.html,v 1.10 2007/07/05 17:37:51 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "kshowmailview.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *KshowmailView::className() const
+00023 {
+00024     return "KshowmailView";
+00025 }
+00026 
+00027 QMetaObject *KshowmailView::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_KshowmailView( "KshowmailView", &KshowmailView::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString KshowmailView::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "KshowmailView", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString KshowmailView::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "KshowmailView", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* KshowmailView::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = QSplitter::staticMetaObject();
+00055     static const QUParameter param_slot_0[] = {
+00056        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In },
+00057        { 0, &static_QUType_varptr, "\x0e", QUParameter::In },
+00058        { 0, &static_QUType_int, 0, QUParameter::In }
+00059     };
+00060     static const QUMethod slot_0 = {"slotMessageContext", 3, param_slot_0 };
+00061     static const QUParameter param_slot_1[] = {
+00062        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In }
+00063     };
+00064     static const QUMethod slot_1 = {"slotMessageDoubleClicked", 1, param_slot_1 };
+00065     static const QUParameter param_slot_2[] = {
+00066        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In }
+00067     };
+00068     static const QUMethod slot_2 = {"slotMessageClicked", 1, param_slot_2 };
+00069     static const QUParameter param_slot_3[] = {
+00070        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In },
+00071        { 0, &static_QUType_varptr, "\x0e", QUParameter::In },
+00072        { 0, &static_QUType_int, 0, QUParameter::In }
+00073     };
+00074     static const QUMethod slot_3 = {"slotAccountContext", 3, param_slot_3 };
+00075     static const QUParameter param_slot_4[] = {
+00076        { 0, &static_QUType_ptr, "QListViewItem", QUParameter::In },
+00077        { "point", &static_QUType_varptr, "\x0e", QUParameter::In },
+00078        { "col", &static_QUType_int, 0, QUParameter::In }
+00079     };
+00080     static const QUMethod slot_4 = {"slotAccountClicked", 3, param_slot_4 };
+00081     static const QMetaData slot_tbl[] = {
+00082        { "slotMessageContext(QListViewItem*,const QPoint&,int)", &slot_0, QMetaData::Private },
+00083        { "slotMessageDoubleClicked(QListViewItem*)", &slot_1, QMetaData::Private },
+00084        { "slotMessageClicked(QListViewItem*)", &slot_2, QMetaData::Private },
+00085        { "slotAccountContext(QListViewItem*,const QPoint&,int)", &slot_3, QMetaData::Private },
+00086        { "slotAccountClicked(QListViewItem*,const QPoint&,int)", &slot_4, QMetaData::Private }
+00087     };
+00088     static const QUMethod signal_0 = {"signalActiveChanged", 0, 0 };
+00089     static const QMetaData signal_tbl[] = {
+00090        { "signalActiveChanged()", &signal_0, QMetaData::Private }
+00091     };
+00092     metaObj = QMetaObject::new_metaobject(
+00093        "KshowmailView", parentObject,
+00094        slot_tbl, 5,
+00095        signal_tbl, 1,
+00096 #ifndef QT_NO_PROPERTIES
+00097        0, 0,
+00098        0, 0,
+00099 #endif // QT_NO_PROPERTIES
+00100        0, 0 );
+00101     cleanUp_KshowmailView.setMetaObject( metaObj );
+00102     return metaObj;
+00103 }
+00104 
+00105 void* KshowmailView::qt_cast( const char* clname )
+00106 {
+00107     if ( !qstrcmp( clname, "KshowmailView" ) )
+00108        return this;
+00109     return QSplitter::qt_cast( clname );
+00110 }
+00111 
+00112 // SIGNAL signalActiveChanged
+00113 void KshowmailView::signalActiveChanged()
+00114 {
+00115     activate_signal( staticMetaObject()->signalOffset() + 0 );
+00116 }
+00117 
+00118 bool KshowmailView::qt_invoke( int _id, QUObject* _o )
+00119 {
+00120     switch ( _id - staticMetaObject()->slotOffset() ) {
+00121     case 0: slotMessageContext((QListViewItem*)static_QUType_ptr.get(_o+1),(const QPoint&)*((const QPoint*)static_QUType_ptr.get(_o+2)),(int)static_QUType_int.get(_o+3)); break;
+00122     case 1: slotMessageDoubleClicked((QListViewItem*)static_QUType_ptr.get(_o+1)); break;
+00123     case 2: slotMessageClicked((QListViewItem*)static_QUType_ptr.get(_o+1)); break;
+00124     case 3: slotAccountContext((QListViewItem*)static_QUType_ptr.get(_o+1),(const QPoint&)*((const QPoint*)static_QUType_ptr.get(_o+2)),(int)static_QUType_int.get(_o+3)); break;
+00125     case 4: slotAccountClicked((QListViewItem*)static_QUType_ptr.get(_o+1),(const QPoint&)*((const QPoint*)static_QUType_ptr.get(_o+2)),(int)static_QUType_int.get(_o+3)); break;
+00126     default:
+00127        return QSplitter::qt_invoke( _id, _o );
+00128     }
+00129     return TRUE;
+00130 }
+00131 
+00132 bool KshowmailView::qt_emit( int _id, QUObject* _o )
+00133 {
+00134     switch ( _id - staticMetaObject()->signalOffset() ) {
+00135     case 0: signalActiveChanged(); break;
+00136     default:
+00137        return QSplitter::qt_emit(_id,_o);
+00138     }
+00139     return TRUE;
+00140 }
+00141 #ifndef QT_NO_PROPERTIES
+00142 
+00143 bool KshowmailView::qt_property( int id, int f, QVariant* v)
+00144 {
+00145     return QSplitter::qt_property( id, f, v);
+00146 }
+00147 
+00148 bool KshowmailView::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00149 #endif // QT_NO_PROPERTIES
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/logger_8cpp-source.html b/doc/html/logger_8cpp-source.html new file mode 100644 index 0000000..d38f4a6 --- /dev/null +++ b/doc/html/logger_8cpp-source.html @@ -0,0 +1,68 @@ + + +kshowmail: kshowmail/logger.cpp Source File + + + + + + +

logger.cpp

00001 /***************************************************************************
+00002                           logger.cpp  -  description
+00003                              -------------------
+00004     begin                : Son Okt 19 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include <kstandarddirs.h>
+00019 // #include <kdebug.h>
+00020 #include "logger.h"
+00021 
+00022 QTextStream* Logger::logstream = NULL;
+00023 QFile Logger::logfile;
+00024 
+00025 Logger::~Logger()
+00026 {
+00027   delete logstream;
+00028 }
+00029 
+00030 QTextStream& Logger ()
+00031 {
+00032   if (Logger::logstream == NULL)
+00033   {
+00034     QString logfilename = locateLocal ("data", "kshowmail/kshowmail.log");
+00035     Logger::logfile.setName (logfilename);
+00036     Logger::logfile.open (IO_WriteOnly | IO_Append);
+00037     Logger::logstream = new QTextStream (&Logger::logfile);
+00038   }
+00039   return *Logger::logstream;  
+00040 }
+00041 
+00042 void Logger::flush()
+00043 {
+00044   logfile.flush();
+00045 }
+00046 
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/logger_8h-source.html b/doc/html/logger_8h-source.html new file mode 100644 index 0000000..b2b263c --- /dev/null +++ b/doc/html/logger_8h-source.html @@ -0,0 +1,59 @@ + + +kshowmail: kshowmail/logger.h Source File + + + + + + +

logger.h

00001 /***************************************************************************
+00002                           logger.h  -  description
+00003                              -------------------
+00004     begin                : Son Okt 19 2003
+00005     copyright            : (C) 2003 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef LOGGER_H
+00019 #define LOGGER_H
+00020 
+00021 #include <qstring.h>
+00022 #include <qfile.h>
+00023 #include <qtextstream.h>
+00024 
+00029 class Logger
+00030 {
+00031 public:
+00032   Logger () {};
+00033   ~Logger ();
+00034   static QTextStream* logstream;
+00035   static QFile logfile;
+00036   static void flush();
+00037 };
+00038   
+00039 QTextStream& Logger ();
+00040 
+00041 #endif
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/main_8cpp-source.html b/doc/html/main_8cpp-source.html new file mode 100644 index 0000000..51439ae --- /dev/null +++ b/doc/html/main_8cpp-source.html @@ -0,0 +1,136 @@ + + +kshowmail: kshowmail/main.cpp Source File + + + + + + +

main.cpp

00001 /***************************************************************************
+00002                           main.cpp  -  description
+00003                              -------------------
+00004     begin                : Fre Sep 28 23:29:54 CEST 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 //KDE-Header
+00019 #include <kcmdlineargs.h>
+00020 #include <kaboutdata.h>
+00021 #include <kuniqueapplication.h>
+00022 #include <klocale.h>
+00023 #include <kdebug.h>
+00024 
+00025 //KShowmail-Header
+00026 #include "uniqueapp.h"
+00027 #include "kshowmail.h"
+00028 #include "constants.h"
+00029 
+00030 using namespace Constants;
+00031 
+00032 //description of the application
+00033 static const char *description = I18N_NOOP("A powerful pop3 mail checker");
+00034 
+00035 //the command line options
+00036 //see constants.h
+00037 static KCmdLineOptions kshowmailOptions[] =
+00038   {
+00039     { CMDLINE_REFRESH_SHORT, 0, 0},
+00040     { CMDLINE_REFRESH, I18N_NOOP("Refresh messages now"), 0 },
+00041     { CMDLINE_CONFIG_SHORT, 0, 0},
+00042     { CMDLINE_CONFIG, I18N_NOOP("Launch configure dialog"), 0 },
+00043     KCmdLineLastOption
+00044   };
+00045 
+00046 int main(int argc, char *argv[])
+00047 {
+00048   //create datas for the about box
+00049   KShowMailApp::m_pAbout = new KAboutData (
+00050                              /*appName    */ "kshowmail",
+00051                              /*programName*/ "KShowmail",
+00052                              /*version    */ VERSION,
+00053                              /*description*/ description,
+00054                              /*license    */ KAboutData::License_GPL_V2,
+00055                              /*copyright  */ "(C) 2000-2005, Eggert Ehmke",
+00056                              /*text       */ 0,
+00057                              /*homepage   */ "http://sourceforge.net/projects/kshowmail",
+00058                              /*bug email  */ "eggert.ehmke@berlin.de");
+00059 
+00060   //add authors
+00061   KShowMailApp::m_pAbout->addAuthor ("Eggert Ehmke", 0, "eggert.ehmke@berlin.de", "http://kshowmail.sourceforge.net");
+00062   KShowMailApp::m_pAbout->addAuthor ("Allistar Melville", 0, "allistar@silvermoon.co.nz", 0);
+00063   KShowMailApp::m_pAbout->addAuthor ("Oleg Ivanov", 0, "saruman@unigsm.com", 0);
+00064   KShowMailApp::m_pAbout->addAuthor( "Ulrich Weigelt", 0, "ulrich.weigelt@gmx.de", 0 );
+00065   KShowMailApp::m_pAbout->setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\nYour names") ,I18N_NOOP("_: EMAIL OF TRANSLATORS\nYour emails"));
+00066 
+00067   //Initialize command line arguments
+00068   KCmdLineArgs::init(argc, argv, KShowMailApp::m_pAbout);
+00069   //add the special command line options of kshowmail which was specified above
+00070   KCmdLineArgs::addCmdLineOptions(kshowmailOptions);
+00071 
+00072   // when released, this must be 0!
+00073 #if 0
+00074 
+00075   kdDebug () << "KShowmail running in debug mode" << endl;
+00076   KApplication::addCmdLineOptions();
+00077 
+00078   KApplication app;
+00079   KShowMailApp* kshow = new KShowMailApp ();
+00080   kshow->show();
+00081   app.exec();
+00082 
+00083 #else
+00084 
+00085   //print debug message about run mode
+00086   kdDebug () << "KShowmail running in normal mode" << endl;
+00087 
+00088   //add special command line options for unique KDE applications
+00089   KUniqueApplication::addCmdLineOptions();
+00090 
+00091   //test whether the new application to start is unique
+00092   if (KUniqueApplication::start())
+00093   {
+00094     //yes, wa can start a unique kshowmail instance
+00095 
+00096     //create a new unique appliction
+00097     //UniqueApp is a inherited class of KUniqueApplication
+00098     //see uniqueapp.h
+00099     UniqueApp* app = new UniqueApp ();
+00100 
+00101     //start the application
+00102     app->exec ();
+00103   }
+00104   else
+00105   {
+00106     //kshowmail is already running
+00107     kdWarning() << I18N_NOOP ("Kshowmail is already running!") << endl;
+00108   }
+00109 
+00110 #endif
+00111 
+00112   return 0;
+00113 }
+00114 
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespaceConstants.html b/doc/html/namespaceConstants.html new file mode 100644 index 0000000..129d518 --- /dev/null +++ b/doc/html/namespaceConstants.html @@ -0,0 +1,33 @@ + + +kshowmail.kdevelop: Constants Namespace Reference + + + + + + +

Constants Namespace Reference

+

+ + +
+


Detailed Description

+Contains all constants. +

+


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespaceTypes.html b/doc/html/namespaceTypes.html new file mode 100644 index 0000000..c4c4460 --- /dev/null +++ b/doc/html/namespaceTypes.html @@ -0,0 +1,230 @@ + + +kshowmail.kdevelop: Types Namespace Reference + + + + + + +

Types Namespace Reference

+

+ + + + + + + + + + + + + + + + + + + + + + + +

Classes

struct  DownloadActionParams_Type
struct  FilterCriteria_Type

Typedefs

typedef QValueList< int > MailNumberList_Type
typedef QMap< QString, bool > AccountTaskMap_Type
typedef QMap< int, DownloadActionParams_TypeMailToDownloadMap_Type
typedef list< FilterCriteria_TypeFilterCriteriaList_Type

Enumerations

enum  State_Type {
+  idle, +deleting, +configure, +executing, +
+  showing, +refreshing +
+ }
enum  AccountState_Type { AccountIdle, +AccountDeleting, +AccountDownloading, +AccountRefreshing + }
enum  FilterAction_Type {
+  FActPass, +FActDelete, +FActMark, +FActMove, +
+  FActSpamcheck, +FActIgnore, +FActNone +
+ }
+


Detailed Description

+All special types for KShowMail. +

+


Typedef Documentation

+ +
+
+ + + + +
typedef QMap<QString, bool> Types::AccountTaskMap_Type
+
+
+ +

+Map to notice which accounts need to get an order to do a task. The Key is the account name and the data a boolean. TRUE means the task was ordered, FALSE the task was ended. +

+

+ +

+ +
+ +

+List of filter criterias. +

+

+ +

+
+ + + + +
typedef QValueList<int> Types::MailNumberList_Type
+
+
+ +

+List of mail numbers. It is a QValueList of integers. +

+

+ +

+ +
+ +

+This map is used by ConfigElem and ShowRecord to hold a list of mail numbers which shall be downloaded for some filter actions; at time for moving and spam check +

+

+


Enumeration Type Documentation

+ +
+
+ + + + +
enum Types::AccountState_Type
+
+
+ +

+State of an account.

Enumerator:
+ + + + + +
AccountIdle  +it's doing nothing
AccountDeleting  +a deletion is running
AccountDownloading  +the account is downloading mail bodies
AccountRefreshing  +the account is refreshing its mail list
+
+ +
+

+ +

+
+ + + + +
enum Types::FilterAction_Type
+
+
+ +

+Actions returned by filters.

Enumerator:
+ + + + + + + + +
FActPass  +Mail has passed the filter check. It can showed in the list.
FActDelete  +Undesirable mail. Delete it.
FActMark  +Probably undesirable mail. Mark it in the mail list.
FActMove  +Move the mail to a certain mail box. The name of the box will returned by a further parameter.
FActSpamcheck  +This mail shall be forwared to a spam filter, which checks the whole mail including body.
FActIgnore  +This mail shall not be shown.
FActNone  +The mail doesn't match up with the filter. Perform the next one.
+
+ +
+

+ +

+
+ + + + +
enum Types::State_Type
+
+
+ +

+State of the application during running time.

Enumerator:
+ + + + + + + +
idle  +it's doing nothing
deleting  +it's deleting a message on the server
configure  +the user is configuring the application or the mail or just the header of the mail is being shown
executing  +a command on the command list is being executed
showing  +it's downloading and showing a mail
refreshing  +it's refreshing the mail lists
+
+ +
+

+


Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html new file mode 100644 index 0000000..1057d67 --- /dev/null +++ b/doc/html/namespacemembers.html @@ -0,0 +1,135 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +
+ +
+ +

+Here is a list of all namespace members with links to the namespace documentation for each member: +

+

- a -

    +
  • AccountDeleting +: Types +
  • AccountDownloading +: Types +
  • AccountIdle +: Types +
  • AccountRefreshing +: Types +
  • AccountState_Type +: Types +
  • AccountTaskMap_Type +: Types +
+

- c -

+

- d -

+

- e -

+

- f -

+

- g -

+

- h -

+

- i -

+

- m -

    +
  • MailNumberList_Type +: Types +
  • MailToDownloadMap_Type +: Types +
+

- r -

+

- s -

+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html new file mode 100644 index 0000000..be8e04e --- /dev/null +++ b/doc/html/namespacemembers_enum.html @@ -0,0 +1,44 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +  +

+

    +
  • AccountState_Type +: Types +
  • FilterAction_Type +: Types +
  • State_Type +: Types +
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html new file mode 100644 index 0000000..dfa9f5c --- /dev/null +++ b/doc/html/namespacemembers_eval.html @@ -0,0 +1,72 @@ + + +kshowmail.kdevelop: Class Members + + + + + + + +  +

+

+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html new file mode 100644 index 0000000..9da54a7 --- /dev/null +++ b/doc/html/namespaces.html @@ -0,0 +1,34 @@ + + +kshowmail.kdevelop: Namespace Index + + + + + + +

kshowmail.kdevelop Namespace List

Here is a list of all namespaces with brief descriptions: + + + + + + + +
Codecs
Constants
EncryptionProvides functions to crypt and decrypt a password
KIO
KWalletAccessProvides routines to save and read passwords using KWallet
std
Types
+
Generated on Tue Apr 1 21:59:50 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/optiondialog_8cpp-source.html b/doc/html/optiondialog_8cpp-source.html new file mode 100644 index 0000000..5b4c828 --- /dev/null +++ b/doc/html/optiondialog_8cpp-source.html @@ -0,0 +1,290 @@ + + +kshowmail: kshowmail/optiondialog.cpp Source File + + + + + + +

optiondialog.cpp

00001 /***************************************************************************
+00002                           optiondialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Fri Oct 26 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007 
+00008     26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
+00009  ***************************************************************************/
+00010 
+00011 /***************************************************************************
+00012  *                                                                         *
+00013  *   This program is free software; you can redistribute it and/or modify  *
+00014  *   it under the terms of the GNU General Public License as published by  *
+00015  *   the Free Software Foundation; either version 2 of the License, or     *
+00016  *   (at your option) any later version.                                   *
+00017  *                                                                         *
+00018  ***************************************************************************/
+00019 
+00020 #include <qcheckbox.h>
+00021 #include <qspinbox.h>
+00022 #include <qlabel.h>
+00023 #include <qfileinfo.h>
+00024 #include <qfiledialog.h>
+00025 #include <qpushbutton.h>
+00026 
+00027 #include <kmessagebox.h>
+00028 #include <klocale.h>
+00029 #include <knuminput.h>
+00030 #include <kdebug.h>
+00031 
+00032 #include "optiondialog.h"
+00033 #include "serverdialog.h"
+00034 #include "configlist.h"
+00035 #include "configelem.h"
+00036 #include "commandlist.h"
+00037 
+00038 OptionDialog::OptionDialog(QWidget *parent, const char *name, ConfigList* config, CommandList* cmd):
+00039        OptionDlg (parent,name,true),
+00040        m_ConfigList (*config),
+00041        m_pConfigList (config),
+00042        m_pCmdList (cmd)
+00043 {
+00044        m_CheckSavePassword->setChecked (m_pConfigList->m_bSavePassword);
+00045        m_CheckConfirmDelete->setChecked (m_pConfigList->confirmDeletion() );
+00046        m_SpinInitTimer->setValue( m_pConfigList->getInitTime() );
+00047        m_SpinIntervalTimer->setValue (m_pConfigList->getRefreshTimeInterval());
+00048     m_SpinPop3Timer->setValue (m_pConfigList->getTimeoutTime() );
+00049     m_CheckBeep->setChecked (m_pConfigList->m_bBeep);
+00050     m_CheckSound->setChecked (m_pConfigList->m_bSound);
+00051        m_ButtonSelectSoundFile->setEnabled (m_pConfigList->m_bSound);
+00052        m_EditSoundFile->setEnabled (m_pConfigList->m_bSound);
+00053        m_ButtonSoundTest->setEnabled (m_pConfigList->m_bSound);
+00054     m_EditSoundFile->setText (m_pConfigList->m_strSoundFile);
+00055     m_CheckStartMinimized->setChecked (m_pConfigList->m_bStartMinimized);
+00056     m_CheckTerminateNoMail->setChecked (m_pConfigList->m_bTerminate);
+00057     m_CheckMinimizeNoMail->setChecked (m_pConfigList->m_bMinimize);
+00058     m_CheckKeepNewMail->setChecked (m_pConfigList->m_bKeepNew);
+00059     m_CheckShowMessagebox->setChecked (m_pConfigList->m_bShowMessage);
+00060     m_CheckShowMainWindow->setChecked (m_pConfigList->m_bShowMainWindow);
+00061     m_CheckExternalProg->setChecked (m_pConfigList->m_bExternalProg);
+00062        m_ButtonExternalProgTest->setEnabled (m_pConfigList->m_bExternalProg);
+00063        m_ComboExternalProg->setEnabled (m_pConfigList->m_bExternalProg);
+00064        QLabel_5->setEnabled (m_pConfigList->m_bExternalProg);
+00065     m_SpinMaxSize->setValue (m_pConfigList->m_nMaxMailSize);
+00066        m_ConfigList.setCombo (m_ComboAccount);
+00067        m_pCmdList->setCombo (m_ComboExternalProg, m_pConfigList->m_nExternalProg);
+00068        //Modifications made by AM (account columns)
+00069        m_CheckActive->setChecked(m_pConfigList->m_shownAccountColumns[0]);
+00070        m_CheckAccount1->setChecked(m_pConfigList->m_shownAccountColumns[1]);
+00071        m_CheckServer->setChecked(m_pConfigList->m_shownAccountColumns[2]);
+00072        m_CheckUser->setChecked(m_pConfigList->m_shownAccountColumns[3]);
+00073        m_CheckMessages->setChecked(m_pConfigList->m_shownAccountColumns[4]);
+00074        m_CheckSize1->setChecked(m_pConfigList->m_shownAccountColumns[5]);
+00075        //Modifications made by AM (email columns)
+00076        m_CheckNumber->setChecked(m_pConfigList->m_shownMailColumns[0]);
+00077        m_CheckAccount2->setChecked(m_pConfigList->m_shownMailColumns[1]);
+00078        m_CheckFrom->setChecked(m_pConfigList->m_shownMailColumns[2]);
+00079        m_CheckTo->setChecked(m_pConfigList->m_shownMailColumns[3]);
+00080        m_CheckSubject->setChecked(m_pConfigList->m_shownMailColumns[4]);
+00081        m_CheckDate->setChecked(m_pConfigList->m_shownMailColumns[5]);
+00082        m_CheckSize2->setChecked(m_pConfigList->m_shownMailColumns[6]);
+00083        m_CheckContent->setChecked(m_pConfigList->m_shownMailColumns[7]);
+00084        m_CheckState->setChecked(m_pConfigList->m_shownMailColumns[8]);
+00085     // add HTML formatting
+00086     m_checkHTML->setChecked(m_pConfigList->allowHTML() );
+00087     _checkConfirmClose->setChecked(m_pConfigList->m_bConfirmClose);
+00088     // added by morhekil
+00089     // minimize on close
+00090     m_CheckCloseMinimizes->setChecked(m_pConfigList->m_bCloseMinimizes);
+00091     m_CheckMinimizeToTray->setChecked(m_pConfigList->m_bMinimizeToTray);
+00092 }
+00093 
+00094 OptionDialog::~OptionDialog(){
+00095 }
+00096 
+00097 void OptionDialog::slotButtonAddClicked()
+00098 {
+00099        ConfigElem* pElem = new ConfigElem ( &m_ConfigList );
+00100        ServerDialog dlg (this, "Server Options", pElem, &m_ConfigList);
+00101        if (dlg.exec () == Accepted)
+00102        {
+00103               m_ConfigList.inSort (pElem);
+00104         //connect the signals of the new account
+00105         m_ConfigList.connectAccounts();
+00106 
+00107               m_ComboAccount->insertItem (pElem->getAccountName(), m_ConfigList.at ());
+00108               m_ComboAccount->setCurrentItem (m_ConfigList.at ());
+00109        }
+00110        else
+00111               delete pElem;
+00112 }
+00113 
+00114 void OptionDialog::slotButtonEditClicked()
+00115 {
+00116        ConfigElem* pElem = m_ConfigList.current ();
+00117        if (pElem)
+00118        {
+00119               ServerDialog dlg (this, "Server Options", pElem, NULL);
+00120               dlg.exec ();
+00121        }
+00122 }
+00123 
+00124 void OptionDialog::slotButtonCopyClicked()
+00125 {
+00126        if (m_ConfigList.current())
+00127        {
+00128               ConfigElem* pElem = new ConfigElem (m_ConfigList.current ());
+00129               ServerDialog dlg (this, "Server Options", pElem, &m_ConfigList);
+00130               if (dlg.exec () == Accepted)
+00131               {
+00132                      pElem->clearMailList();
+00133                      m_ConfigList.inSort (pElem);
+00134             m_ConfigList.connectAccounts();
+00135 
+00136                      m_ComboAccount->insertItem (pElem->getAccountName(), m_ConfigList.at ());
+00137                      m_ComboAccount->setCurrentItem (m_ConfigList.at ());
+00138               }
+00139               else
+00140                      delete pElem;
+00141        }
+00142 }
+00143 
+00144 void OptionDialog::slotButtonDeleteClicked()
+00145 {
+00146        if (m_ConfigList.current())
+00147        {
+00148               if (KMessageBox::warningYesNo (this, i18n("Account %1 will be deleted.\nAre you sure ?").arg(m_ConfigList.current()->getAccountName())) == KMessageBox::Yes)
+00149               {
+00150                      int index = m_ConfigList.at ();
+00151                      m_ConfigList.remove (index);
+00152             m_ConfigList.connectAccounts();
+00153                      m_ComboAccount->removeItem (index);
+00154                      m_ComboAccount->setCurrentItem (m_ConfigList.at ());
+00155               }
+00156        }
+00157 }
+00158 
+00159 void OptionDialog::slotButtonOkClicked()
+00160 {
+00161        m_ConfigList.m_bSavePassword = m_CheckSavePassword->isChecked ();
+00162        m_ConfigList.setConfirmDeletion( m_CheckConfirmDelete->isChecked () );
+00163        m_ConfigList.setInitTime( m_SpinInitTimer->value() );
+00164        m_ConfigList.setRefreshTimeInterval( m_SpinIntervalTimer->value () );
+00165     m_ConfigList.setTimeoutTime( m_SpinPop3Timer->value () );
+00166        m_ConfigList.m_nMaxMailSize = m_SpinMaxSize->value ();
+00167        m_ConfigList.m_bBeep = m_CheckBeep->isChecked ();
+00168        m_ConfigList.m_bSound = m_CheckSound->isChecked ();
+00169        m_ConfigList.m_strSoundFile = m_EditSoundFile->text ();
+00170        m_ConfigList.m_bStartMinimized = m_CheckStartMinimized->isChecked ();
+00171        m_ConfigList.m_bTerminate = m_CheckTerminateNoMail->isChecked ();
+00172        m_ConfigList.m_bMinimize = m_CheckMinimizeNoMail->isChecked ();
+00173        m_ConfigList.m_bKeepNew = m_CheckKeepNewMail->isChecked ();
+00174        m_ConfigList.m_bShowMessage = m_CheckShowMessagebox->isChecked ();
+00175        m_ConfigList.m_bShowMainWindow = m_CheckShowMainWindow->isChecked ();
+00176        m_ConfigList.m_nExternalProg = m_ComboExternalProg->currentItem ();
+00177        kdDebug () << "ext prog = " << m_ConfigList.m_nExternalProg << endl;
+00178        kdDebug () << "count = " << m_ConfigList.count() << endl;
+00179        if ((m_ConfigList.m_nExternalProg >= 0) && (m_ConfigList.count() > 0))
+00180               m_ConfigList.m_bExternalProg = m_CheckExternalProg->isChecked ();
+00181        else
+00182               m_ConfigList.m_bExternalProg = false;
+00183        //modifications by AM (hiding columns)
+00184        m_ConfigList.m_shownAccountColumns[0] = m_CheckActive->isChecked();
+00185        m_ConfigList.m_shownAccountColumns[1] = m_CheckAccount1->isChecked();
+00186        m_ConfigList.m_shownAccountColumns[2] = m_CheckServer->isChecked();
+00187        m_ConfigList.m_shownAccountColumns[3] = m_CheckUser->isChecked();
+00188        m_ConfigList.m_shownAccountColumns[4] = m_CheckMessages->isChecked();
+00189        m_ConfigList.m_shownAccountColumns[5] = m_CheckSize1->isChecked();
+00190        m_ConfigList.m_shownMailColumns[0] = m_CheckNumber->isChecked();
+00191        m_ConfigList.m_shownMailColumns[1] = m_CheckAccount2->isChecked();
+00192        m_ConfigList.m_shownMailColumns[2] = m_CheckFrom->isChecked();
+00193        m_ConfigList.m_shownMailColumns[3] = m_CheckTo->isChecked();
+00194        m_ConfigList.m_shownMailColumns[4] = m_CheckSubject->isChecked();
+00195        m_ConfigList.m_shownMailColumns[5] = m_CheckDate->isChecked();
+00196        m_ConfigList.m_shownMailColumns[6] = m_CheckSize2->isChecked();
+00197        m_ConfigList.m_shownMailColumns[7] = m_CheckContent->isChecked();
+00198        m_ConfigList.m_shownMailColumns[8] = m_CheckState->isChecked();
+00199     m_ConfigList.setAllowHTML(  m_checkHTML->isChecked() );
+00200     m_ConfigList.m_bConfirmClose = _checkConfirmClose->isChecked();
+00201 
+00202     // added by morhekil
+00203     m_ConfigList.m_bCloseMinimizes = m_CheckCloseMinimizes->isChecked();
+00204     m_ConfigList.m_bMinimizeToTray = m_CheckMinimizeToTray->isChecked();
+00205 
+00206     m_ConfigList.saveOptions();
+00207     *m_pConfigList = m_ConfigList;
+00208 }
+00209 
+00210 void OptionDialog::slotAccountActivated (int index)
+00211 {
+00212        m_ConfigList.at (index); // will set current item
+00213 }
+00214 
+00215 void OptionDialog::slotSavePasswordToggled ()
+00216 {
+00217        if (m_CheckSavePassword->isChecked ())
+00218        {
+00219               if (KMessageBox::warningYesNo (this, i18n("Password will be stored as scrambled text.\n"
+00220                                                    "It might be possible to decipher it.\n"
+00221                                                    "Are you sure ?\n"),
+00222                                          QString::null,
+00223                                          KStdGuiItem::yes(),
+00224                                          KStdGuiItem::no(),
+00225                                          "savepasswdaskagain") != KMessageBox::Yes)
+00226                      m_CheckSavePassword->setChecked (false);
+00227        }
+00228 }
+00229 
+00230 void OptionDialog::slotButtonSelectSoundFile ()
+00231 {
+00232        QStringList filters;
+00233        filters.append (i18n("Wave files (*.wav)"));
+00234        filters.append (i18n("All files (*)"));
+00235        QFileInfo info (m_EditSoundFile->text ());
+00236        QString dir = info.dirPath ();
+00237        QFileDialog dlg (this, "Sound File", TRUE);
+00238        dlg.setCaption (i18n("Select Sound File"));
+00239        dlg.setDir (dir);
+00240        dlg.setFilters (filters);
+00241        dlg.setMode (QFileDialog::ExistingFile);
+00242   if (dlg.exec () == QDialog::Accepted)
+00243               m_EditSoundFile->setText (dlg.selectedFile());
+00244 }
+00245 
+00246 void OptionDialog::slotMinimizeNoMailClicked ()
+00247 {
+00248        if (m_CheckMinimizeNoMail->isChecked ())
+00249               m_CheckTerminateNoMail->setChecked (false);
+00250 }
+00251 
+00252 void OptionDialog::slotTerminateNoMailClicked ()
+00253 {
+00254        if (m_CheckTerminateNoMail->isChecked ())
+00255               m_CheckMinimizeNoMail->setChecked (false);
+00256 }
+00257 
+00258 void OptionDialog::slotSoundTest ()
+00259 {
+00260        m_pConfigList->playSound (m_EditSoundFile->text ());
+00261 }
+00262 
+00263 void OptionDialog::slotExternalProgTest ()
+00264 {
+00265        m_pCmdList->exec (m_ComboExternalProg->currentItem (), m_pConfigList->current ());
+00266 }
+00267 
+00268 
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/optiondialog_8h-source.html b/doc/html/optiondialog_8h-source.html new file mode 100644 index 0000000..4d1bf22 --- /dev/null +++ b/doc/html/optiondialog_8h-source.html @@ -0,0 +1,77 @@ + + +kshowmail: kshowmail/optiondialog.h Source File + + + + + + +

optiondialog.h

00001 /***************************************************************************
+00002                           optiondialog.h  -  description
+00003                              -------------------
+00004     begin                : Fri Oct 26 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef OPTIONDIALOG_H
+00019 #define OPTIONDIALOG_H
+00020 
+00021 #include <qwidget.h>
+00022 #include "OptionDlg.h"
+00023 #include "configlist.h"
+00024 #include "commandlist.h"
+00025 
+00030 class OptionDialog : public OptionDlg  {
+00031    Q_OBJECT
+00032 //TODO: nachdem der Einstellungsdialog aufgerufen wurde, vergessen die Accounts sämtlich Mails
+00033        //Grund ist, dass in dieser Klasse eine Kopie von ConfigList angelegt wird und der
+00034        //Kopierconstruktor von ConfigElem eine neue Mailliste anlegt.
+00035        //diese Klasse müsste ausschließlich mit der Original-ConfigList arbeiten
+00036        //Workaround derzeit: Mails werden nach Aufruf dieser Klasse neu vom Server gelesen
+00037 public:
+00038        OptionDialog(QWidget *parent, const char *name, ConfigList* config, CommandList* cmd);
+00039        ~OptionDialog();
+00040 public slots:
+00041   virtual void slotButtonAddClicked();
+00042   virtual void slotButtonEditClicked();
+00043   virtual void slotButtonCopyClicked();
+00044   virtual void slotButtonDeleteClicked();
+00045   virtual void slotButtonOkClicked();
+00046        virtual void slotAccountActivated (int index);
+00047        virtual void slotSavePasswordToggled ();
+00048        virtual void slotButtonSelectSoundFile ();
+00049        virtual void slotMinimizeNoMailClicked ();
+00050        virtual void slotTerminateNoMailClicked ();
+00051        virtual void slotSoundTest ();
+00052        virtual void slotExternalProgTest ();
+00053 private:
+00054        ConfigList m_ConfigList;
+00055        ConfigList* m_pConfigList;
+00056        CommandList* m_pCmdList;
+00057 };
+00058 
+00059 #endif
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/optiondialog_8moc_8cpp-source.html b/doc/html/optiondialog_8moc_8cpp-source.html new file mode 100644 index 0000000..c4720f9 --- /dev/null +++ b/doc/html/optiondialog_8moc_8cpp-source.html @@ -0,0 +1,159 @@ + + +kshowmail: kshowmail/optiondialog.moc.cpp Source File + + + + + + +

optiondialog.moc.cpp

00001 /****************************************************************************
+00002 ** OptionDialog meta object code from reading C++ file 'optiondialog.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: optiondialog_8moc_8cpp-source.html,v 1.8 2007/05/16 20:12:02 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "optiondialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *OptionDialog::className() const
+00023 {
+00024     return "OptionDialog";
+00025 }
+00026 
+00027 QMetaObject *OptionDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_OptionDialog( "OptionDialog", &OptionDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString OptionDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "OptionDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString OptionDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "OptionDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* OptionDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = OptionDlg::staticMetaObject();
+00055     static const QUMethod slot_0 = {"slotButtonAddClicked", 0, 0 };
+00056     static const QUMethod slot_1 = {"slotButtonEditClicked", 0, 0 };
+00057     static const QUMethod slot_2 = {"slotButtonCopyClicked", 0, 0 };
+00058     static const QUMethod slot_3 = {"slotButtonDeleteClicked", 0, 0 };
+00059     static const QUMethod slot_4 = {"slotButtonOkClicked", 0, 0 };
+00060     static const QUParameter param_slot_5[] = {
+00061        { "index", &static_QUType_int, 0, QUParameter::In }
+00062     };
+00063     static const QUMethod slot_5 = {"slotAccountActivated", 1, param_slot_5 };
+00064     static const QUMethod slot_6 = {"slotSavePasswordToggled", 0, 0 };
+00065     static const QUMethod slot_7 = {"slotButtonSelectSoundFile", 0, 0 };
+00066     static const QUMethod slot_8 = {"slotMinimizeNoMailClicked", 0, 0 };
+00067     static const QUMethod slot_9 = {"slotTerminateNoMailClicked", 0, 0 };
+00068     static const QUMethod slot_10 = {"slotSoundTest", 0, 0 };
+00069     static const QUMethod slot_11 = {"slotExternalProgTest", 0, 0 };
+00070     static const QMetaData slot_tbl[] = {
+00071        { "slotButtonAddClicked()", &slot_0, QMetaData::Public },
+00072        { "slotButtonEditClicked()", &slot_1, QMetaData::Public },
+00073        { "slotButtonCopyClicked()", &slot_2, QMetaData::Public },
+00074        { "slotButtonDeleteClicked()", &slot_3, QMetaData::Public },
+00075        { "slotButtonOkClicked()", &slot_4, QMetaData::Public },
+00076        { "slotAccountActivated(int)", &slot_5, QMetaData::Public },
+00077        { "slotSavePasswordToggled()", &slot_6, QMetaData::Public },
+00078        { "slotButtonSelectSoundFile()", &slot_7, QMetaData::Public },
+00079        { "slotMinimizeNoMailClicked()", &slot_8, QMetaData::Public },
+00080        { "slotTerminateNoMailClicked()", &slot_9, QMetaData::Public },
+00081        { "slotSoundTest()", &slot_10, QMetaData::Public },
+00082        { "slotExternalProgTest()", &slot_11, QMetaData::Public }
+00083     };
+00084     metaObj = QMetaObject::new_metaobject(
+00085        "OptionDialog", parentObject,
+00086        slot_tbl, 12,
+00087        0, 0,
+00088 #ifndef QT_NO_PROPERTIES
+00089        0, 0,
+00090        0, 0,
+00091 #endif // QT_NO_PROPERTIES
+00092        0, 0 );
+00093     cleanUp_OptionDialog.setMetaObject( metaObj );
+00094     return metaObj;
+00095 }
+00096 
+00097 void* OptionDialog::qt_cast( const char* clname )
+00098 {
+00099     if ( !qstrcmp( clname, "OptionDialog" ) )
+00100        return this;
+00101     return OptionDlg::qt_cast( clname );
+00102 }
+00103 
+00104 bool OptionDialog::qt_invoke( int _id, QUObject* _o )
+00105 {
+00106     switch ( _id - staticMetaObject()->slotOffset() ) {
+00107     case 0: slotButtonAddClicked(); break;
+00108     case 1: slotButtonEditClicked(); break;
+00109     case 2: slotButtonCopyClicked(); break;
+00110     case 3: slotButtonDeleteClicked(); break;
+00111     case 4: slotButtonOkClicked(); break;
+00112     case 5: slotAccountActivated((int)static_QUType_int.get(_o+1)); break;
+00113     case 6: slotSavePasswordToggled(); break;
+00114     case 7: slotButtonSelectSoundFile(); break;
+00115     case 8: slotMinimizeNoMailClicked(); break;
+00116     case 9: slotTerminateNoMailClicked(); break;
+00117     case 10: slotSoundTest(); break;
+00118     case 11: slotExternalProgTest(); break;
+00119     default:
+00120        return OptionDlg::qt_invoke( _id, _o );
+00121     }
+00122     return TRUE;
+00123 }
+00124 
+00125 bool OptionDialog::qt_emit( int _id, QUObject* _o )
+00126 {
+00127     return OptionDlg::qt_emit(_id,_o);
+00128 }
+00129 #ifndef QT_NO_PROPERTIES
+00130 
+00131 bool OptionDialog::qt_property( int id, int f, QVariant* v)
+00132 {
+00133     return OptionDlg::qt_property( id, f, v);
+00134 }
+00135 
+00136 bool OptionDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00137 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/serverdialog_8cpp-source.html b/doc/html/serverdialog_8cpp-source.html new file mode 100644 index 0000000..2755b13 --- /dev/null +++ b/doc/html/serverdialog_8cpp-source.html @@ -0,0 +1,279 @@ + + +kshowmail: kshowmail/serverdialog.cpp Source File + + + + + + +

serverdialog.cpp

00001 /***************************************************************************
+00002                           serverdialog.cpp  -  description
+00003                              -------------------
+00004     begin                : Sun Oct 28 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "serverdialog.h"
+00019 
+00020 ServerDialog::ServerDialog( QWidget* parent, ConfigElem* item )
+00021   : KDialogBase( parent, "ServerDialog", true, QString::null, Ok|Cancel, Ok, true )
+00022 {
+00023   //save pointer to account and view
+00024   account = item;
+00025 
+00026   //main widget
+00027   QWidget* page = new QWidget( this );
+00028   setMainWidget( page );
+00029 
+00030   //layouts
+00031   QVBoxLayout* layMain = new QVBoxLayout( page, 0, spacingHint() );
+00032   QGridLayout* layTop = new QGridLayout( layMain, 5, 2 );
+00033 
+00034   //upper items
+00035   QLabel* lblAccount = new QLabel( i18n( "Account:" ), page, "lblAccount" );
+00036   txtAccount = new KLineEdit( page, "txtAccount" );
+00037   txtAccount->setEnabled( false );
+00038   QToolTip::add( lblAccount, i18n( "Unique Account Name" ) );
+00039   QToolTip::add( txtAccount, i18n( "Unique Account Name" ) );
+00040   layTop->addWidget( lblAccount, 0, 0 );
+00041   layTop->addWidget( txtAccount, 0, 1 );
+00042 
+00043   QLabel* lblServer = new QLabel( i18n( "Server:" ), page, "lblServer" );
+00044   txtServer = new KLineEdit( page, "txtServer" );
+00045   txtServer->setFocus();
+00046   QToolTip::add( lblServer, i18n( "Server Name" ) );
+00047   QToolTip::add( txtAccount, i18n( "Server Name" ) );
+00048   layTop->addWidget( lblServer, 1, 0 );
+00049   layTop->addWidget( txtServer, 1, 1 );
+00050 
+00051   QLabel* lblProtocol = new QLabel( i18n( "Protocol:" ), page, "lblProtocol" );
+00052   cboProtocol = new KComboBox( page, "cboProtocol" );
+00053   cboProtocol->insertItem( "POP3" );  //currently KShowmail just supports POP3
+00054   QToolTip::add( lblProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") );
+00055   QToolTip::add( cboProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") );
+00056   layTop->addWidget( lblProtocol, 2, 0 );
+00057   layTop->addWidget( cboProtocol, 2, 1 );
+00058 
+00059   QLabel* lblPort = new QLabel( i18n( "Port:" ), page, "lblPort" );
+00060   spbPort = new QSpinBox( 0, 65535, 1, page, "spbPort" );
+00061   spbPort->setValue( DEFAULT_PORT_POP3 );
+00062   QToolTip::add( lblPort, i18n( "Port Number. Normally POP3 uses port 110." ) );
+00063   QToolTip::add( spbPort, i18n( "Port Number. Normally POP3 uses port 110." ) );
+00064   layTop->addWidget( lblPort, 3, 0 );
+00065   layTop->addWidget( spbPort, 3, 1 );
+00066 
+00067   QLabel* lblUser = new QLabel( i18n( "User:" ), page, "lblUser" );
+00068   txtUser = new KLineEdit( page, "txtUser" );
+00069   QToolTip::add( lblUser, i18n( "To authenticate to the mail server you need an user name." ) );
+00070   QToolTip::add( txtUser, i18n( "To authenticate to the mail server you need an user name." ) );
+00071   layTop->addWidget( lblUser, 4, 0 );
+00072   layTop->addWidget( txtUser, 4, 1 );
+00073 
+00074   //password groupbox and layouts
+00075   QGroupBox* gboxPassword = new QGroupBox( 0, Qt::Horizontal, i18n( "Password" ), page, "gboxPassword" );
+00076   layMain->addWidget( gboxPassword );
+00077 
+00078   QVBoxLayout* layPassword = new QVBoxLayout( gboxPassword->layout(), spacingHint() );
+00079   QGridLayout* layPasswordStorage = new QGridLayout( layPassword, 2, 2, spacingHint() );
+00080 
+00081 
+00082   //radio buttons to set storage of the password
+00083   grpPasswordStorage = new QButtonGroup( NULL, "grpPasswordStorage" );
+00084   connect( grpPasswordStorage, SIGNAL( clicked( int ) ), this, SLOT( slotPasswordStorageChanged( int ) ) );
+00085 
+00086   QRadioButton* btnPasswordDontSave = new QRadioButton( i18n( "Don't save" ), gboxPassword, "btnPasswordDontSave" );
+00087   QRadioButton* btnPasswordSaveFile = new QRadioButton( i18n( "Save password"), gboxPassword, "btnPasswordSaveFile" );
+00088   QRadioButton* btnPasswordSaveKWallet = new QRadioButton( i18n( "Use KWallet" ), gboxPassword, "btnPasswordSaveKWallet" );
+00089   grpPasswordStorage->insert( btnPasswordDontSave, ID_BUTTON_PASSWORD_DONT_SAVE );
+00090   grpPasswordStorage->insert( btnPasswordSaveFile, ID_BUTTON_PASSWORD_SAVE_FILE );
+00091   grpPasswordStorage->insert( btnPasswordSaveKWallet, ID_BUTTON_PASSWORD_SAVE_KWALLET );
+00092   QToolTip::add( btnPasswordDontSave, i18n( "Don't save password. KShowmail will ask you for it at first server connect." ) );
+00093   QToolTip::add( btnPasswordSaveFile, i18n( "Save password in the configuration file. Not recommended, because the password is just lightly encrypted" ) );
+00094   QToolTip::add( btnPasswordSaveKWallet, i18n( "Use KWallet to save the password. Maybe you have to type in the KWallet master password at first server connect." ) );
+00095   layPasswordStorage->addWidget( btnPasswordDontSave, 0, 0 );
+00096   layPasswordStorage->addWidget( btnPasswordSaveFile, 0, 1 );
+00097   layPasswordStorage->addWidget( btnPasswordSaveKWallet, 1, 0 );
+00098 
+00099   //password edit line
+00100   txtPassword = new KPasswordEdit( gboxPassword, "txtUser" );
+00101   layPassword->addWidget( txtPassword );
+00102 
+00103   //set password defaults
+00104   grpPasswordStorage->setButton( DEFAULT_ACCOUNT_PASSWORD_STORAGE );
+00105   slotPasswordStorageChanged( DEFAULT_ACCOUNT_PASSWORD_STORAGE );
+00106 
+00107   //active check box
+00108   QGridLayout* layActive = new QGridLayout( layMain, 1, 1 );
+00109   layActive->setAlignment( Qt::AlignCenter );
+00110   chkActive = new QCheckBox( i18n( "Active"), page, "chkActive" );
+00111   QToolTip::add( chkActive, i18n( "Select it to activate this account." ) );
+00112   layActive->addWidget( chkActive, 0, 0 );
+00113   chkActive->setChecked( DEFAULT_ACCOUNT_ACTIVE );
+00114 
+00115   //set caption
+00116   if( item == NULL )
+00117     setCaption( i18n( "New account" ) );
+00118   else
+00119     setCaption( i18n( "Edit account" ) );
+00120 
+00121   //write values of the given account into the dialog items
+00122   if( account != NULL )
+00123     fillDialog();
+00124 
+00125 
+00126 }
+00127 
+00128 
+00129 ServerDialog::~ServerDialog()
+00130 {
+00131 }
+00132 
+00133 void ServerDialog::slotPasswordStorageChanged( int id )
+00134 {
+00135   if( id == ID_BUTTON_PASSWORD_DONT_SAVE )
+00136   {
+00137     txtPassword->setEnabled( false );
+00138     txtPassword->clear();
+00139   }
+00140   else
+00141     txtPassword->setEnabled( true );
+00142 }
+00143 
+00144 void ServerDialog::slotOk( )
+00145 {
+00146   //check for necessary values
+00147   if( account == NULL )
+00148   {
+00149     kdError() << "ServerDialog::slotOk: Given account pointer is Null." << endl;
+00150     return;
+00151   }
+00152   if( txtServer->text() == "" )
+00153   {
+00154     KMessageBox::error( this, i18n( "Please enter an server." ) );
+00155     return;
+00156   }
+00157 
+00158   if( txtUser->text() == "" )
+00159   {
+00160     KMessageBox::error( this, i18n( "Please enter an user name." ) );
+00161     return;
+00162   }
+00163 
+00164   //get application config object (kshowmailrc)
+00165   KConfig* config = KApplication::kApplication()->config();
+00166 
+00167   config->setGroup( txtAccount->text() );
+00168 
+00169   config->writeEntry( CONFIG_ENTRY_ACCOUNT_SERVER, txtServer->text() );
+00170   config->writeEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, cboProtocol->currentText().upper() );
+00171   config->writeEntry( CONFIG_ENTRY_ACCOUNT_PORT, spbPort->value() );
+00172   config->writeEntry( CONFIG_ENTRY_ACCOUNT_USER, txtUser->text() );
+00173 
+00174   //get the password
+00175   //the class KPasswordEdit doesn't have a method to set the password
+00176   //therefore we use setText(). But if we use this method, KPasswordEdit::password()
+00177   //will return an empty string. If the user has typed in a new password, KPasswordEdit::password()
+00178   //will return the correct password
+00179   QString pass;
+00180   if( txtPassword->password() == "" || txtPassword->password() == QString::null )
+00181     pass = txtPassword->text();
+00182   else
+00183     pass = txtPassword->password();
+00184 
+00185   //used to encrypt password
+00186   KURL url;
+00187   url.setUser( txtUser->text() );
+00188   url.setHost( txtServer->text() );
+00189   url.setPass( pass );
+00190 
+00191   //save password (or not)
+00192   switch( grpPasswordStorage->selectedId() )
+00193   {
+00194     case ID_BUTTON_PASSWORD_DONT_SAVE    : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE );
+00195                                            config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null );
+00196                                            break;
+00197     case ID_BUTTON_PASSWORD_SAVE_FILE    : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE );
+00198                                            config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, crypt( url ) );
+00199                                            break;
+00200     case ID_BUTTON_PASSWORD_SAVE_KWALLET : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET );
+00201                                            config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null );
+00202                                            KWalletAccess::savePassword( txtAccount->text(), pass );
+00203                                            break;
+00204     default                              : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE );
+00205                                            config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null );
+00206   }
+00207 
+00208   config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, chkActive->isChecked() );
+00209 
+00210   //save config to file
+00211   config->sync();
+00212 
+00213   //call slot of super class to close the dialog
+00214   KDialogBase::slotOk();
+00215 }
+00216 
+00217 void ServerDialog::fillDialog( )
+00218 {
+00219   //check for valid account pointer
+00220   if( account == NULL )
+00221   {
+00222     kdError() << "ServerDialog::fillDialog: invalid pointer to account item." << endl;
+00223     return;
+00224   }
+00225 
+00226   txtAccount->setText( account->getAccountName() );
+00227   txtServer->setText( account->getHost() );
+00228   cboProtocol->setCurrentText( account->getProtocol( true ) );
+00229   spbPort->setValue( account->getPort() );
+00230   txtUser->setText( account->getUser() );
+00231 
+00232   int type = account->getPasswordStorage();
+00233   if( type != CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET )
+00234     type = DEFAULT_ACCOUNT_PASSWORD_STORAGE;
+00235 
+00236   switch( type )
+00237   {
+00238     case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE    : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_DONT_SAVE );
+00239                                                       txtPassword->setEnabled( false );
+00240                                                       txtPassword->clear();
+00241                                                       break;
+00242     case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE    : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_FILE );
+00243                                                       txtPassword->setEnabled( true );
+00244                                                       txtPassword->setText( account->getPassword() );
+00245                                                       break;
+00246     case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_KWALLET );
+00247                                                       txtPassword->setEnabled( true );
+00248                                                       txtPassword->setText( account->getPassword() );
+00249                                                       break;
+00250     default                                         : grpPasswordStorage->setButton( 1 );
+00251                                                       txtPassword->clear();
+00252   }
+00253 
+00254   chkActive->setChecked( account->isActive() );
+00255 }
+00256 
+00257 #include "serverdialog.moc"
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/serverdialog_8h-source.html b/doc/html/serverdialog_8h-source.html new file mode 100644 index 0000000..40e669c --- /dev/null +++ b/doc/html/serverdialog_8h-source.html @@ -0,0 +1,131 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/serverdialog.h Source File + + + + + + + +

serverdialog.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           serverdialog.h  -  description
+00003                              -------------------
+00004     begin                : Sun Oct 28 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef SERVERDIALOG_H
+00019 #define SERVERDIALOG_H
+00020 
+00021 //Qt headers
+00022 #include <qlayout.h>
+00023 #include <qlabel.h>
+00024 #include <qtooltip.h>
+00025 #include <qspinbox.h>
+00026 #include <qgroupbox.h>
+00027 #include <qbuttongroup.h>
+00028 #include <qradiobutton.h>
+00029 #include <qcheckbox.h>
+00030 
+00031 //KDE headers
+00032 #include <kdialogbase.h>
+00033 #include <klocale.h>
+00034 #include <klineedit.h>
+00035 #include <kcombobox.h>
+00036 #include <kdebug.h>
+00037 #include <kmessagebox.h>
+00038 #include <kpassdlg.h>
+00039 
+00040 //KShowmail headers
+00041 #include "configelem.h"
+00042 #include "constants.h"
+00043 #include "encryption.h"
+00044 #include "kwalletaccess.h"
+00045 #include <ktabwidget.h>
+00046 
+00047 //radio button IDs
+00048 #define ID_BUTTON_PASSWORD_DONT_SAVE 1
+00049 #define ID_BUTTON_PASSWORD_SAVE_FILE 2
+00050 #define ID_BUTTON_PASSWORD_SAVE_KWALLET 3
+00051 #define ID_BUTTON_SECLOGIN_NONE 1
+00052 #define ID_BUTTON_SECLOGIN_APOP 2
+00053 #define ID_BUTTON_SECLOGIN_SASL 3
+00054 #define ID_BUTTON_SECTRANSFER_NONE 1
+00055 #define ID_BUTTON_SECTRANSFER_SSL 2
+00056 #define ID_BUTTON_SECTRANSFER_TLS 3
+00057 
+00064 class ServerDialog : public KDialogBase
+00065 {
+00066    Q_OBJECT
+00067   public:
+00068 
+00069   public:
+00070 
+00076     ServerDialog( QWidget* parent, ConfigElem* item = NULL );
+00077 
+00081     ~ServerDialog();
+00082 
+00083   private:
+00084 
+00088     ConfigElem* account;
+00089 
+00093     KLineEdit* txtAccount;
+00094 
+00098     KLineEdit* txtServer;
+00099 
+00103     KComboBox* cboProtocol;
+00104 
+00108     QSpinBox* spbPort;
+00109 
+00113     KLineEdit* txtUser;
+00114 
+00118     KPasswordEdit* txtPassword;
+00119 
+00123     QCheckBox* chkActive;
+00124 
+00128     QButtonGroup* grpPasswordStorage;
+00129 
+00133     QButtonGroup* grpSecureTransfer;
+00134 
+00135   protected slots:
+00136 
+00142     void slotPasswordStorageChanged( int id );
+00143 
+00149     void slotSecureTransferChanged( int id );
+00150 
+00158     void slotOk();
+00159 
+00160   protected:
+00161 
+00165     void fillDialog();
+00166 };
+00167 
+00168 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/serverdialog_8moc_8cpp-source.html b/doc/html/serverdialog_8moc_8cpp-source.html new file mode 100644 index 0000000..9759211 --- /dev/null +++ b/doc/html/serverdialog_8moc_8cpp-source.html @@ -0,0 +1,114 @@ + + +kshowmail: kshowmail/serverdialog.moc.cpp Source File + + + + + + +

serverdialog.moc.cpp

00001 /****************************************************************************
+00002 ** ServerDialog meta object code from reading C++ file 'serverdialog.h'
+00003 **
+00004 ** Created: Tue May 15 19:57:53 2007
+00005 **      by: The Qt MOC ($Id: serverdialog_8moc_8cpp-source.html,v 1.8 2007/05/16 20:12:04 kuddel-fl Exp $)
+00006 **
+00007 ** WARNING! All changes made in this file will be lost!
+00008 *****************************************************************************/
+00009 
+00010 #undef QT_NO_COMPAT
+00011 #include "serverdialog.h"
+00012 #include <qmetaobject.h>
+00013 #include <qapplication.h>
+00014 
+00015 #include <private/qucomextra_p.h>
+00016 #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
+00017 #error "This file was generated using the moc from 3.3.7. It"
+00018 #error "cannot be used with the include files from this version of Qt."
+00019 #error "(The moc has changed too much.)"
+00020 #endif
+00021 
+00022 const char *ServerDialog::className() const
+00023 {
+00024     return "ServerDialog";
+00025 }
+00026 
+00027 QMetaObject *ServerDialog::metaObj = 0;
+00028 static QMetaObjectCleanUp cleanUp_ServerDialog( "ServerDialog", &ServerDialog::staticMetaObject );
+00029 
+00030 #ifndef QT_NO_TRANSLATION
+00031 QString ServerDialog::tr( const char *s, const char *c )
+00032 {
+00033     if ( qApp )
+00034        return qApp->translate( "ServerDialog", s, c, QApplication::DefaultCodec );
+00035     else
+00036        return QString::fromLatin1( s );
+00037 }
+00038 #ifndef QT_NO_TRANSLATION_UTF8
+00039 QString ServerDialog::trUtf8( const char *s, const char *c )
+00040 {
+00041     if ( qApp )
+00042        return qApp->translate( "ServerDialog", s, c, QApplication::UnicodeUTF8 );
+00043     else
+00044        return QString::fromUtf8( s );
+00045 }
+00046 #endif // QT_NO_TRANSLATION_UTF8
+00047 
+00048 #endif // QT_NO_TRANSLATION
+00049 
+00050 QMetaObject* ServerDialog::staticMetaObject()
+00051 {
+00052     if ( metaObj )
+00053        return metaObj;
+00054     QMetaObject* parentObject = ServerDlg::staticMetaObject();
+00055     metaObj = QMetaObject::new_metaobject(
+00056        "ServerDialog", parentObject,
+00057        0, 0,
+00058        0, 0,
+00059 #ifndef QT_NO_PROPERTIES
+00060        0, 0,
+00061        0, 0,
+00062 #endif // QT_NO_PROPERTIES
+00063        0, 0 );
+00064     cleanUp_ServerDialog.setMetaObject( metaObj );
+00065     return metaObj;
+00066 }
+00067 
+00068 void* ServerDialog::qt_cast( const char* clname )
+00069 {
+00070     if ( !qstrcmp( clname, "ServerDialog" ) )
+00071        return this;
+00072     return ServerDlg::qt_cast( clname );
+00073 }
+00074 
+00075 bool ServerDialog::qt_invoke( int _id, QUObject* _o )
+00076 {
+00077     return ServerDlg::qt_invoke(_id,_o);
+00078 }
+00079 
+00080 bool ServerDialog::qt_emit( int _id, QUObject* _o )
+00081 {
+00082     return ServerDlg::qt_emit(_id,_o);
+00083 }
+00084 #ifndef QT_NO_PROPERTIES
+00085 
+00086 bool ServerDialog::qt_property( int id, int f, QVariant* v)
+00087 {
+00088     return ServerDlg::qt_property( id, f, v);
+00089 }
+00090 
+00091 bool ServerDialog::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
+00092 #endif // QT_NO_PROPERTIES
+

Generated on Wed May 16 21:15:19 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showlistviewitem_8cpp-source.html b/doc/html/showlistviewitem_8cpp-source.html new file mode 100644 index 0000000..49d4e5b --- /dev/null +++ b/doc/html/showlistviewitem_8cpp-source.html @@ -0,0 +1,123 @@ + + +kshowmail: kshowmail/showlistviewitem.cpp Source File + + + + + + +

showlistviewitem.cpp

00001 /***************************************************************************
+00002                           showlistviewitem.cpp  -  description
+00003                              -------------------
+00004     begin                : Son Apr 21 2002
+00005     copyright            : (C) 2002 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "showlistviewitem.h"
+00019 
+00020 ShowListViewItem::ShowListViewItem (QListView * parent,
+00021                   ShowListViewItem* after):
+00022 QListViewItem (parent, after)
+00023 {}
+00024 
+00025 ShowListViewItem::ShowListViewItem( QListView * parent ) :
+00026     QListViewItem( parent )
+00027 {
+00028 }
+00029 
+00030 ShowListViewItem::~ShowListViewItem()
+00031 {}
+00032 
+00033 QString ShowListViewItem::key (int column, bool /*ascending*/) const
+00034 {
+00035        switch (column)
+00036        {
+00037        case _colNumber:
+00038               return text (_colAccount) + text (_colNumber);
+00039        case _colDate:
+00040               return m_time;
+00041        default:
+00042               return text (column);
+00043        }
+00044 }
+00045 
+00050 int ShowListViewItem::compare( QListViewItem *i, int col,
+00051                                bool ascending ) const
+00052 {
+00053   return key( col, ascending ).compare( i->key( col, ascending) );
+00054 }
+00055 
+00056 void ShowListViewItem::setNumber (const QString& number)
+00057 {
+00058   setText (_colNumber, number);
+00059 }
+00060 
+00061 void ShowListViewItem::setAccount(const QString& account)
+00062 {
+00063   setText (_colAccount, account);
+00064 }
+00065 
+00066 void ShowListViewItem::setFrom(const QString& from)
+00067 {
+00068   setText (_colFrom, from);
+00069 }
+00070 
+00071 void ShowListViewItem::setTo(const QString& to)
+00072 {
+00073   setText (_colTo, to);
+00074 }
+00075 
+00076 void ShowListViewItem::setSubject(const QString& subject)
+00077 {
+00078   setText (_colSubject, subject);
+00079 }
+00080 
+00081 void ShowListViewItem::setDate(const QString& date)
+00082 {
+00083   setText (_colDate, date);
+00084 }
+00085 
+00086 void ShowListViewItem::setSize(const QString& size)
+00087 {
+00088   setText (_colSize, size);
+00089 }
+00090 
+00091 void ShowListViewItem::setContent(const QString& content)
+00092 {
+00093   setText (_colContent, content);
+00094 }
+00095 
+00096 void ShowListViewItem::setState(const QString& state)
+00097 {
+00098   setText (_colState, state);
+00099 }
+00100 
+00101 void ShowListViewItem::setTime (const QString& time)
+00102 {
+00103        m_time = time;
+00104 }
+00105 
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showlistviewitem_8h-source.html b/doc/html/showlistviewitem_8h-source.html new file mode 100644 index 0000000..7c9b34f --- /dev/null +++ b/doc/html/showlistviewitem_8h-source.html @@ -0,0 +1,79 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showlistviewitem.h Source File + + + + + + + +

showlistviewitem.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           showlistviewitem.h  -  description
+00003                              -------------------
+00004     begin                : Son Apr 21 2002
+00005     copyright            : (C) 2002 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef SHOWLISTVIEWITEM_H
+00019 #define SHOWLISTVIEWITEM_H
+00020 
+00021 #include <qlistview.h>
+00022 
+00027 class ShowListViewItem : public QListViewItem
+00028 {
+00029 public:
+00030 
+00036   ShowListViewItem (QListView * parent, ShowListViewItem * after);
+00037 
+00042   ShowListViewItem( QListView* parent );
+00043 
+00044 
+00045   virtual       ~ShowListViewItem();
+00046   virtual QString key (int column, bool ascending) const;
+00051   virtual int compare( QListViewItem *i, int col, bool ascending ) const;
+00052   void setNumber (const QString&);
+00053   void setAccount(const QString&);
+00054   void setFrom(const QString&);
+00055   void setTo(const QString&);
+00056   void setSubject(const QString&);
+00057   void setDate(const QString&);
+00058   void setSize(const QString&);
+00059   void setContent(const QString&);
+00060   void setState(const QString&);
+00061   void setTime (const QString&);
+00062   enum {_colNumber, _colAccount, _colFrom, _colTo, _colSubject, _colDate,
+00063         _colSize, _colContent, _colState};
+00064 private:
+00065         QString m_time;
+00066 };
+00067 
+00068 
+00069 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showrecord_8cpp-source.html b/doc/html/showrecord_8cpp-source.html new file mode 100644 index 0000000..ed0fbe4 --- /dev/null +++ b/doc/html/showrecord_8cpp-source.html @@ -0,0 +1,580 @@ + + +kshowmail: kshowmail/showrecord.cpp Source File + + + + + + +

showrecord.cpp

00001 /***************************************************************************
+00002                           showrecord.cpp  -  description
+00003                              -------------------
+00004     begin                : Mon Dec 3 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "showrecord.h"
+00019 
+00020 int const ShowRecord::continueShowHeaders( 0 );
+00021 int const ShowRecord::cancelShowHeaders( 1 );
+00022 
+00023 ShowRecord::ShowRecord()
+00024 {
+00025   //set auto delete to true. This is a function of the parent class, which deletes
+00026   //all items when the list is deleted or cleared.
+00027   setAutoDelete( true );
+00028 }
+00029 
+00030 ShowRecord::~ShowRecord()
+00031 {
+00032 }
+00033 
+00034 void ShowRecord::saveOptions( QDomDocument& doc, QDomElement& parent )
+00035 {
+00036   //Loop over all mail items
+00037   for( ShowRecordElem* pElem = first(); pElem; pElem = next() )
+00038   {
+00039     //call the method of the mail to save it
+00040     pElem->saveOptions( doc, parent );
+00041   }
+00042 }
+00043 
+00044 void ShowRecord::readStoredMails( QDomElement& parent )
+00045 {
+00046   //clear the list
+00047   clear();
+00048 
+00049   //get first DOM node (mail)
+00050   QDomNode n = parent.firstChild();
+00051 
+00052   //iterate over all mail items stored in the given account
+00053   while( !n.isNull() )
+00054   {
+00055     //get element of the current node
+00056     QDomElement e = n.toElement();
+00057 
+00058     //create mail object
+00059     ShowRecordElem* pElem = new ShowRecordElem();
+00060 
+00061     //store the currently read mail data in the new object
+00062     pElem->readOptions( e );
+00063 
+00064     //store the new mail object in this list
+00065     append( pElem );
+00066 
+00067     //get next DOM node
+00068     n = n.nextSibling();
+00069   }
+00070 }
+00071 
+00072 void ShowRecord::applyFilters ()
+00073 {
+00074   //Loop over all mails in this list
+00075   for( ShowRecordElem* pElem = first(); pElem; pElem = next() )
+00076   {
+00077     //apply the filters to the current mail
+00078     pElem->applyFilters ();
+00079   }
+00080 }
+00081 
+00082 bool ShowRecord::hasSelectedMails( )
+00083 {
+00084   bool selected = false;    //TRUE when a selected mail was found
+00085   ShowRecordElem* mail;     //mail which we want to check
+00086 
+00087   //get first mail
+00088   mail = first();
+00089 
+00090   //iterate over all mails until we have found a selected mail
+00091   while( mail != NULL && !selected )
+00092   {
+00093     //check the current mail
+00094     selected = mail->isSelected();
+00095 
+00096     //get next mail
+00097     mail = next();
+00098   }
+00099 
+00100   return selected;
+00101 }
+00102 
+00103 MailNumberList_Type ShowRecord::getSelectedMails( )
+00104 {
+00105   MailNumberList_Type list;                     //contains the numbers of selected mails
+00106   ShowRecordElem* mail;                         //mail from which we want to get the number (if selected)
+00107   QPtrListIterator<ShowRecordElem> it( *this ); //iterator for the mail list
+00108 
+00109   //iterate over all mails
+00110   while( ( mail = it.current() ) != NULL )
+00111   {
+00112     //increment iterator to next mail
+00113     ++it;
+00114 
+00115     //if current mail is selected append its number to the mail number list
+00116     if( mail->isSelected() )
+00117       list.append( mail->number() );
+00118   }
+00119 
+00120   return list;
+00121 }
+00122 
+00123 void ShowRecord::removeMail( int number )
+00124 {
+00125   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00126   ShowRecordElem* mail;                           //current mail
+00127 
+00128   //looking for the mail with the number 'number'
+00129   while( ( mail = it.current() ) != NULL )
+00130   {
+00131     //increment iterator to next mail
+00132     ++it;
+00133 
+00134     //if the current mail has the given number, remove it
+00135     if( mail->number() == number )
+00136       remove( mail );
+00137   }
+00138 }
+00139 
+00140 QStringList ShowRecord::getSelectedSubjects( ) const
+00141 {
+00142   QStringList subjects;                           //contains the subjects
+00143   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00144   ShowRecordElem* mail;                           //current mail
+00145 
+00146   //iterate over all mails
+00147   while( ( mail = it.current() ) != NULL )
+00148   {
+00149     //increment iterator to next mail
+00150     ++it;
+00151 
+00152     //if the mail is selected, append subject to list
+00153     if( mail->isSelected() )
+00154       subjects.append( mail->subject() );
+00155   }
+00156 
+00157   return subjects;
+00158 }
+00159 
+00160 QString ShowRecord::getSenderOf( int number ) const
+00161 {
+00162   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00163   ShowRecordElem* mail;                           //current mail
+00164   bool found = false;                             //True, when the wanted mail was found
+00165   QString sender;                                 //sender of the wanted mail
+00166 
+00167   //looking for the mail with the number 'number'
+00168   while( ( mail = it.current() ) != NULL && !found )
+00169   {
+00170     //increment iterator to next mail
+00171     ++it;
+00172 
+00173     //if the current mail has the given number, remove it
+00174     if( mail->number() == number )
+00175     {
+00176       sender = mail->from();
+00177       found = true;
+00178     }
+00179   }
+00180   return sender;
+00181 }
+00182 
+00183 QString ShowRecord::getDateOf( int number ) const
+00184 {
+00185   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00186   ShowRecordElem* mail;                           //current mail
+00187   bool found = false;                             //True, when the wanted mail was found
+00188   QString date;                                   //sent date of the wanted mail
+00189 
+00190   //looking for the mail with the number 'number'
+00191   while( ( mail = it.current() ) != NULL && !found )
+00192   {
+00193     //increment iterator to next mail
+00194     ++it;
+00195 
+00196     //if the current mail has the given number, remove it
+00197     if( mail->number() == number )
+00198     {
+00199       date = mail->date();
+00200       found = true;
+00201     }
+00202   }
+00203   return date;
+00204 
+00205 }
+00206 
+00207 QString ShowRecord::getSizeOf( int number ) const
+00208 {
+00209   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00210   ShowRecordElem* mail;                           //current mail
+00211   bool found = false;                             //True, when the wanted mail was found
+00212   QString size;                                   //size of the wanted mail
+00213 
+00214   //looking for the mail with the number 'number'
+00215   while( ( mail = it.current() ) != NULL && !found )
+00216   {
+00217     //increment iterator to next mail
+00218     ++it;
+00219 
+00220     //if the current mail has the given number, remove it
+00221     if( mail->number() == number )
+00222     {
+00223       size = mail->strSizePrefix();
+00224       found = true;
+00225     }
+00226   }
+00227   return size;
+00228 
+00229 }
+00230 
+00231 QString ShowRecord::getSubjectOf( int number ) const
+00232 {
+00233   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00234   ShowRecordElem* mail;                           //current mail
+00235   bool found = false;                             //True, when the wanted mail was found
+00236   QString subject;                                //subject of the wanted mail
+00237 
+00238   //looking for the mail with the number 'number'
+00239   while( ( mail = it.current() ) != NULL && !found )
+00240   {
+00241     //increment iterator to next mail
+00242     ++it;
+00243 
+00244     //if the current mail has the given number, get the subject
+00245     if( mail->number() == number )
+00246     {
+00247       subject = mail->subject();
+00248       found = true;
+00249     }
+00250   }
+00251   return subject;
+00252 
+00253 }
+00254 
+00255 QString ShowRecord::decodeMailBody( QByteArray body, int number, bool preferHTML ) const
+00256 {
+00257   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00258   ShowRecordElem* mail;                           //current mail
+00259   bool found = false;                             //True, when the wanted mail was found
+00260   QString mailbody;                               //decoded mail
+00261 
+00262   //looking for the mail with the number 'number'
+00263   while( ( mail = it.current() ) != NULL && !found )
+00264   {
+00265     //increment iterator to next mail
+00266     ++it;
+00267 
+00268     //if the current mail has the given number, decode the mail
+00269     if( mail->number() == number )
+00270     {
+00271       mailbody = mail->decodeMailBody( body, preferHTML );
+00272       found = true;
+00273     }
+00274   }
+00275   return mailbody;
+00276 
+00277 }
+00278 
+00279 bool ShowRecord::hasMail( QString uid )
+00280 {
+00281   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00282   ShowRecordElem* mail;                           //current mail
+00283   bool found = false;                             //True, when the wanted mail was found
+00284 
+00285   while( ( mail = it.current() ) != NULL && !found )
+00286   {
+00287     //increment iterator to next mail
+00288     ++it;
+00289 
+00290     //compare the uid
+00291     if( mail->uidl() == uid )
+00292     {
+00293      found = true;
+00294     }
+00295   }
+00296   return found;
+00297 }
+00298 
+00299 void ShowRecord::appendNewMail( int number, QString uid, bool isNew )
+00300 {
+00301   //create new mail
+00302   ShowRecordElem* newMail = new ShowRecordElem( number, uid, isNew );
+00303 
+00304   //append new mail
+00305   if( newMail != NULL )
+00306     append( newMail );
+00307 }
+00308 
+00309 void ShowRecord::printMailList( )
+00310 {
+00311   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00312   ShowRecordElem* mail;                           //current mail
+00313 
+00314   while( ( mail = it.current() ) )
+00315   {
+00316     //increment iterator to next mail
+00317     ++it;
+00318 
+00319     //print mail
+00320     cout << mail->number() << " - UID: " << mail->uidl() << "; Size: " << mail->size() << "; Subject: " << mail->subject() << "; New: " << mail->isNew() << endl;
+00321   }
+00322 
+00323 }
+00324 
+00325 void ShowRecord::setSize( int number, long size )
+00326 {
+00327   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00328   ShowRecordElem* mail;                           //current mail
+00329   bool found = false;                             //True, when the wanted mail was found
+00330 
+00331   //looking for the mail with the number 'number'
+00332   while( ( mail = it.current() ) != NULL && !found )
+00333   {
+00334     //increment iterator to next mail
+00335     ++it;
+00336 
+00337     //if the current mail has the given number, decode the mail
+00338     if( mail->number() == number )
+00339     {
+00340       mail->setSize( size );
+00341       found = true;
+00342     }
+00343   }
+00344 }
+00345 
+00346 Types::MailNumberList_Type ShowRecord::getNewMails( )
+00347 {
+00348   MailNumberList_Type list;                     //contains the numbers of the new mails
+00349   ShowRecordElem* mail;                         //mail from which we want to get the number (if new)
+00350   QPtrListIterator<ShowRecordElem> it( *this ); //iterator for the mail list
+00351 
+00352   //iterate over all mails
+00353   while( ( mail = it.current() ) != NULL )
+00354   {
+00355     //increment iterator to next mail
+00356     ++it;
+00357 
+00358     //if current mail is new append its number to the mail number list
+00359     if( mail->isNew() )
+00360       list.append( mail->number() );
+00361   }
+00362 
+00363   return list;
+00364 }
+00365 
+00366 void ShowRecord::setHeader( int number, QString header )
+00367 {
+00368   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00369   ShowRecordElem* mail;                           //current mail
+00370   bool found = false;                             //True, when the wanted mail was found
+00371 
+00372   //looking for the mail with the number 'number'
+00373   while( ( mail = it.current() ) != NULL && !found )
+00374   {
+00375     //increment iterator to next mail
+00376     ++it;
+00377 
+00378     //if the current mail has the given number, set the header
+00379     if( mail->number() == number )
+00380     {
+00381       mail->setHeader( header );
+00382       found = true;
+00383     }
+00384   }
+00385 }
+00386 
+00387 QStringList ShowRecord::getUIDsOfOldMails( )
+00388 {
+00389   QStringList list;                             //contains the UIDs of the old mails
+00390   ShowRecordElem* mail;                         //mail from which we want to get the uid (if old)
+00391   QPtrListIterator<ShowRecordElem> it( *this ); //iterator for the mail list
+00392 
+00393   //iterate over all mails
+00394   while( ( mail = it.current() ) != NULL )
+00395   {
+00396     //increment iterator to next mail
+00397     ++it;
+00398 
+00399     //if current mail is new append its number to the mail number list
+00400     if( !mail->isNew() )
+00401       list.append( mail->uidl() );
+00402   }
+00403 
+00404   return list;
+00405 }
+00406 
+00407 QString ShowRecord::getHeaderOf( QString uid )
+00408 {
+00409   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00410   ShowRecordElem* mail;                           //current mail
+00411   bool found = false;                             //True, when the wanted mail was found
+00412   QString header;                                 //header of the wanted mail
+00413 
+00414   //looking for the mail with the UID 'uid'
+00415   while( ( mail = it.current() ) != NULL && !found )
+00416   {
+00417     //increment iterator to next mail
+00418     ++it;
+00419 
+00420     //if the current mail has the given uid, get the header
+00421     if( mail->uidl() == uid )
+00422     {
+00423       header = mail->header();
+00424       found = true;
+00425     }
+00426   }
+00427   return header;
+00428 }
+00429 
+00430 void ShowRecord::setHeader( QString uid, QString header )
+00431 {
+00432   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00433   ShowRecordElem* mail;                           //current mail
+00434   bool found = false;                             //True, when the wanted mail was found
+00435 
+00436   //looking for the mail with the UID 'uid'
+00437   while( ( mail = it.current() ) != NULL && !found )
+00438   {
+00439     //increment iterator to next mail
+00440     ++it;
+00441 
+00442     //if the current mail has the given UID, set the header
+00443     if( mail->uidl() == uid )
+00444     {
+00445       mail->setHeader( header );
+00446       found = true;
+00447     }
+00448   }
+00449 }
+00450 
+00451 int ShowRecord::getNumberNewMails( )
+00452 {
+00453   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00454   ShowRecordElem* mail;                           //current mail
+00455   int number = 0;                                 //number of new mails
+00456 
+00457   while( ( mail = it.current() ) )
+00458   {
+00459     //increment iterator to next mail
+00460     ++it;
+00461 
+00462     //increment number, if this mail is new
+00463     if( mail->isNew() )
+00464       number++;
+00465   }
+00466 
+00467   return number;
+00468 }
+00469 
+00470 int ShowRecord::getNumberMails( )
+00471 {
+00472   return count();
+00473 }
+00474 
+00475 long ShowRecord::getTotalSize( )
+00476 {
+00477   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00478   ShowRecordElem* mail;                           //current mail
+00479   long size = 0;                                   //total size of all mails
+00480 
+00481   while( ( mail = it.current() ) )
+00482   {
+00483     //increment iterator to next mail
+00484     ++it;
+00485 
+00486     size += mail->size();
+00487   }
+00488 
+00489   return size;
+00490 }
+00491 
+00492 void ShowRecord::fillMailListView( KshowmailView * view, QString & account )
+00493 {
+00494   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00495   ShowRecordElem* mail;                           //current mail
+00496 
+00497   //iterate over all mails and order the mail to create a list view item
+00498   while( ( mail = it.current() ) )
+00499   {
+00500     //increment iterator to next mail
+00501     ++it;
+00502 
+00503     //insert list view item
+00504     QString number = QString( "%1" ).arg( mail->number() );
+00505     QString from = mail->from();
+00506     QString to = mail->to();
+00507     QString subject = mail->subject();
+00508     QString date = mail->date();
+00509     QString size = QString( "%1" ).arg( mail->size() );
+00510     QString content = mail->content();
+00511     QString state = mail->state();
+00512     QString time = mail->strUnixTime();
+00513     mail->setViewItem( view->insertMail( number, account, from, to, subject, date, size, content, state, time ) );
+00514   }
+00515 
+00516 }
+00517 
+00518 int ShowRecord::showSelectedHeaders( QString& account )
+00519 {
+00520   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00521   ShowRecordElem* mail;                           //current mail
+00522   int showNextHeader = ShowRecordElem::continueShowHeaders; //return value of ShowRecordElem::showHeader()
+00523 
+00524   while( ( mail = it.current() ) && showNextHeader == ShowRecordElem::continueShowHeaders )
+00525   {
+00526     //increment iterator to next mail
+00527     ++it;
+00528 
+00529     //order the mail to show its header
+00530     if( mail->isSelected() )
+00531       showNextHeader = mail->showHeader( account );
+00532   }
+00533 
+00534   return showNextHeader == ShowRecordElem::continueShowHeaders ? ShowRecord::continueShowHeaders : ShowRecord::cancelShowHeaders;
+00535 }
+00536 
+00537 bool ShowRecord::isNew( QString uid ) const
+00538 {
+00539   QPtrListIterator<ShowRecordElem> it( *this );   //iterator for the mail list
+00540   ShowRecordElem* mail;                           //current mail
+00541   bool found = false;                             //True, when the wanted mail was found
+00542   bool newMail = false;                           //at time we have not found it, therefore the return value is false
+00543 
+00544   while( ( mail = it.current() ) != NULL && !found )
+00545   {
+00546     //increment iterator to next mail
+00547     ++it;
+00548 
+00549     //compare the uid
+00550     if( mail->uidl() == uid )
+00551     {
+00552       found = true;
+00553       newMail = mail->isNew();
+00554     }
+00555   }
+00556 
+00557   return newMail;
+00558 }
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showrecord_8h-source.html b/doc/html/showrecord_8h-source.html new file mode 100644 index 0000000..9a29a3f --- /dev/null +++ b/doc/html/showrecord_8h-source.html @@ -0,0 +1,150 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecord.h Source File + + + + + + + +

showrecord.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           showrecord.h  -  description
+00003                              -------------------
+00004     begin                : Mon Dec 3 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef SHOWRECORD_H
+00019 #define SHOWRECORD_H
+00020 
+00021 //C++ header
+00022 #include <iostream>
+00023 
+00024 //Qt headers
+00025 #include <qdom.h>
+00026 #include <qptrlist.h>
+00027 
+00028 //KDE headers
+00029 #include <kstandarddirs.h>
+00030 #include <kdebug.h>
+00031 
+00032 //KShowmail headers
+00033 #include "kshowmailview.h"
+00034 #include "showrecordelem.h"
+00035 #include "types.h"
+00036 #include "headerfilter.h"
+00037 #include "filterlog.h"
+00038 
+00039 using namespace Types;
+00040 using namespace std;
+00041 
+00042 //forward class declarations
+00043 class ShowRecordElem;
+00044 class KshowmailView;
+00045 
+00056 class ShowRecord: public QPtrList<ShowRecordElem>
+00057 {
+00058 
+00059   public:
+00060 
+00065     static const int continueShowHeaders;
+00066 
+00071     static const int cancelShowHeaders;
+00072 
+00076     ShowRecord();
+00077 
+00082     ~ShowRecord();
+00083 
+00090     void saveOptions( QDomDocument& doc, QDomElement& parent );
+00091 
+00098     void readStoredMails( QDomElement& parent );
+00099 
+00108     void applyHeaderFilter( HeaderFilter* filter, QString account, MailNumberList_Type& deleteList, MailToDownloadMap_Type& downloadList, FilterLog* log = NULL );
+00109 
+00110 
+00117     bool hasSelectedMails();
+00118 
+00123     Types::MailNumberList_Type getSelectedMails();
+00124 
+00129     void removeMail( int number );
+00130 
+00135     QStringList getSelectedSubjects() const;
+00136 
+00142     QString getSenderOf( int number ) const;
+00143 
+00149     QString getDateOf( int number ) const;
+00150 
+00156     QString getSizeOf( int number ) const;
+00157 
+00163     QString getSubjectOf( int number ) const;
+00164 
+00177     QString decodeMailBody( QByteArray body, int number, bool preferHTML ) const;
+00178 
+00185     bool hasMail( QString uid );
+00186 
+00193     bool isNew( QString uid ) const;
+00194 
+00201     void appendNewMail( int number, QString uid, bool isNew );
+00202 
+00207     void printMailList();
+00208 
+00214     void setSize( int number, long size );
+00215 
+00220     Types::MailNumberList_Type getNewMails();
+00221 
+00227     void setHeader( int number, QString header );
+00228 
+00233     QStringList getUIDsOfOldMails();
+00234 
+00240     QString getHeaderOf( QString uid );
+00241 
+00247     void setHeader( QString uid, QString header );
+00248 
+00253     int getNumberNewMails();
+00254 
+00259     int getNumberMails();
+00260 
+00265     long getTotalSize();
+00266 
+00273     void fillMailListView( KshowmailView* view, QString& account );
+00274 
+00281     int showSelectedHeaders( QString& account );
+00282 
+00290     void writeToMoveLog( FilterLog* log, int number, QString account, QString mailbox );
+00291 
+00298     void writeToDeleteLog( FilterLog* log, int number, QString account );
+00299 
+00304     void setMarkAtNextViewRefresh( int number );
+00305 
+00306 
+00307 };
+00308 
+00309 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showrecordelem_8cpp-source.html b/doc/html/showrecordelem_8cpp-source.html new file mode 100644 index 0000000..da795be --- /dev/null +++ b/doc/html/showrecordelem_8cpp-source.html @@ -0,0 +1,622 @@ + + +kshowmail: kshowmail/showrecordelem.cpp Source File + + + + + + +

showrecordelem.cpp

00001 /***************************************************************************
+00002                           showrecord.cpp  -  description
+00003                              -------------------
+00004     begin                : Thu Dec 28 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 
+00019 
+00020 
+00021 #include "showrecordelem.h"
+00022 
+00023 int const ShowRecordElem::continueShowHeaders( 0 );
+00024 int const ShowRecordElem::cancelShowHeaders( 1 );
+00025 
+00026 ShowRecordElem::ShowRecordElem ()
+00027 {
+00028   //set default values
+00029   m_from = "???";
+00030   m_subject = "???";
+00031   m_size = 0;
+00032   m_pItem = NULL;
+00033   m_new = false;
+00034   m_pFilter = NULL;
+00035 }
+00036 
+00037 ShowRecordElem::ShowRecordElem( int number, QString& uid, bool isNew )
+00038 {
+00039   //set default values
+00040   m_from = "???";
+00041   m_subject = "???";
+00042   m_size = 0;
+00043   m_pItem = NULL;
+00044   m_pFilter = NULL;
+00045 
+00046   //set given values
+00047   m_nNumber = number;
+00048   m_uid = uid;
+00049   m_new = isNew;
+00050 }
+00051 
+00052 
+00053 QCString ShowRecordElem::scanHeader( const QString& item ) const
+00054 {
+00055   QCString headerline( "" );      //found header line
+00056 
+00057   //get e.g. the "From:" line, starting with cr,lf,"From:" and ending
+00058   //with a carriage return
+00059 
+00060   //build the search string
+00061   QString searchstring( QString( "\r\n%1:" ).arg( item ) );
+00062 
+00063   //searching...
+00064   int pos1 = m_header.find( searchstring, 0, FALSE );
+00065   int pos2 = m_header.find( '\r', pos1 + 2 );
+00066 
+00067   //cut out the interesting content, if we have found a matching line
+00068   //if we have found nothing, the returned string will be ""
+00069   if( pos1 >= 0 )
+00070   {
+00071     headerline = m_header.mid( pos1 + searchstring.length(), pos2 - pos1 - searchstring.length() );
+00072   }
+00073 
+00074   return headerline;
+00075 }
+00076 
+00077 void ShowRecordElem::setHeader( const QString& header )
+00078 {
+00079   //store given header
+00080   m_header = header.ascii();
+00081 
+00082   //extract sender and store it
+00083   QCString from = scanHeader( "From" );
+00084   from = from.simplifyWhiteSpace();
+00085   setFrom( from );
+00086 
+00087   //extract addressee and store it
+00088   QCString to = scanHeader( "To" );
+00089   to = to.simplifyWhiteSpace();
+00090   setTo (to);
+00091 
+00092   //extract subject and store it
+00093   QCString subject = scanHeader( "Subject" );
+00094   subject = subject.simplifyWhiteSpace();
+00095   setSubject( subject );
+00096 
+00097   //extract date and store it
+00098   QCString date = scanHeader( "Date" );
+00099   setDate( date );
+00100 
+00101   //extract content type
+00102   QCString content = scanHeader( "Content-Type" );
+00103   content = content.simplifyWhiteSpace ();
+00104 
+00105   //remove the stuff after the content type; see RFC 2045
+00106   int posSemicolon = content.find( ';' );
+00107   if( posSemicolon != -1 )
+00108   {
+00109     content.remove( posSemicolon, content.length() - posSemicolon );
+00110   }
+00111 
+00112   //store content type
+00113   setContent (content);
+00114 }
+00115 
+00116 void ShowRecordElem::setDate( const QCString& date )
+00117 {
+00118   DwDateTime dwDate;      //this class represents an RFC-822 date-time;
+00119                           //see mimelib/datetime.h
+00120 
+00121   //convert and store the date-time
+00122   dwDate.FromString( date );
+00123   dwDate.Parse();
+00124   m_unixDate.setTime_t( dwDate.AsUnixTime() );
+00125 }
+00126 
+00127 QString ShowRecordElem::from() const
+00128 {
+00129   return Codecs::decodeRFC2047( m_from );
+00130 }
+00131 
+00132 QString ShowRecordElem::to() const
+00133 {
+00134   return Codecs::decodeRFC2047( m_to );
+00135 }
+00136 
+00137 QString ShowRecordElem::subject() const
+00138 {
+00139   return Codecs::decodeRFC2047( m_subject );
+00140 }
+00141 
+00142 QString ShowRecordElem::date() const
+00143 {
+00144   return KGlobal::locale()->formatDateTime( m_unixDate, true, true );
+00145 }
+00146 
+00147 QString ShowRecordElem::strUnixTime() const
+00148 {
+00149   return m_unixDate.toString( Qt::ISODate );
+00150 }
+00151 
+00152 QString ShowRecordElem::strSize() const
+00153 {
+00154   return QString( "%1" ).arg( m_size, 8 );
+00155 }
+00156 
+00157 QString ShowRecordElem::state() const
+00158 {
+00159   if( m_new )
+00160     return i18n( "new" );
+00161   else
+00162     return i18n( "old" );
+00163 }
+00164 
+00165 void ShowRecordElem::saveOptions( QDomDocument& doc, QDomElement& parent )
+00166 {
+00167   //build item tag of this mail( with mail number)
+00168   QString hdr = QString( ITEM_MESSAGE );
+00169   hdr.append( "%1" );
+00170   hdr = hdr.arg( m_nNumber );
+00171 
+00172   //create a new element and store the mail meta data in it
+00173   QDomElement elem = doc.createElement( hdr );
+00174   elem.setAttribute( ATTRIBUTE_MAIL_NUMBER, m_nNumber );
+00175   elem.setAttribute( ATTRIBUTE_MAIL_SIZE, m_size );
+00176   elem.setAttribute( ATTRIBUTE_MAIL_UID, m_uid );
+00177 
+00178   //create a sub element for the mail header in store the header in it
+00179   QDomElement subelem = doc.createElement( ITEM_MAIL_HEADER );
+00180   subelem.appendChild( doc.createTextNode( m_header ) );
+00181 
+00182   //add header element to the mail element
+00183   elem.appendChild( subelem );
+00184 
+00185   //add mail element to the account (parent) element
+00186   parent.appendChild( elem );
+00187 }
+00188 
+00189 void ShowRecordElem::readOptions( QDomElement& elem )
+00190 {
+00191   //get number, size and uid
+00192   setNumber( elem.attribute( ATTRIBUTE_MAIL_NUMBER ).toInt() );
+00193   setSize( elem.attribute( ATTRIBUTE_MAIL_SIZE ).toInt() );
+00194   setUIDL( elem.attribute( ATTRIBUTE_MAIL_UID ) );
+00195 
+00196   //search for the header item and read it
+00197   QDomElement subelem = elem.namedItem( ITEM_MAIL_HEADER ).toElement();
+00198   setHeader( subelem.text() );
+00199 
+00200   //the mail is not new
+00201   setNew( false );
+00202 }
+00203 
+00204 void ShowRecordElem::applyFilters ()
+00205 {
+00206   //search for a matching filter
+00207   FilterElem* filter = Filter::matches( this );
+00208 
+00209   if( filter != NULL )
+00210   {
+00211     //if we have found a matching filter, highlight the corresponding
+00212     //list view entry
+00213     m_pItem->setSelected (true);
+00214 
+00215     //store a pointer to the filter
+00216     setFilter( filter );
+00217   }
+00218 }
+00219 
+00220 void ShowRecordElem::setFrom( const QCString & from )
+00221 {
+00222   m_from = from;
+00223 }
+00224 
+00225 void ShowRecordElem::setTo( const QCString & to )
+00226 {
+00227   m_to = to;
+00228 }
+00229 
+00230 void ShowRecordElem::setSubject( const QCString & subject )
+00231 {
+00232   m_subject = subject;
+00233 }
+00234 
+00235 void ShowRecordElem::setContent( const QCString& content )
+00236 {
+00237   m_content = content;
+00238 }
+00239 
+00240 QString ShowRecordElem::header( ) const
+00241 {
+00242   return QString( m_header );
+00243 }
+00244 
+00245 void ShowRecordElem::setUIDL( const QString & uid )
+00246 {
+00247   m_uid = uid;
+00248 }
+00249 
+00250 QString ShowRecordElem::uidl( ) const
+00251 {
+00252   return m_uid;
+00253 }
+00254 
+00255 void ShowRecordElem::setSize( int size )
+00256 {
+00257   m_size = size;
+00258 }
+00259 
+00260 int ShowRecordElem::size( ) const
+00261 {
+00262   return m_size;
+00263 }
+00264 
+00265 void ShowRecordElem::setNew( bool isnew )
+00266 {
+00267   m_new = isnew;
+00268 }
+00269 
+00270 bool ShowRecordElem::isNew( ) const
+00271 {
+00272   return m_new;
+00273 }
+00274 
+00275 void ShowRecordElem::setNumber( int n )
+00276 {
+00277   m_nNumber = n;
+00278 }
+00279 
+00280 int ShowRecordElem::number( ) const
+00281 {
+00282   return m_nNumber;
+00283 }
+00284 
+00285 QString ShowRecordElem::content( ) const
+00286 {
+00287   return m_content;
+00288 }
+00289 
+00290 void ShowRecordElem::setViewItem( ShowListViewItem* item )
+00291 {
+00292   m_pItem = item;
+00293 }
+00294 
+00295 ShowListViewItem * ShowRecordElem::viewItem( ) const
+00296 {
+00297   return m_pItem;
+00298 }
+00299 
+00300 void ShowRecordElem::setFilter( FilterElem* filter )
+00301 {
+00302   m_pFilter = filter;
+00303 }
+00304 
+00305 bool ShowRecordElem::isSelected( ) const
+00306 {
+00307   if( m_pItem != NULL )
+00308     return m_pItem->isSelected();
+00309   else
+00310     return false;
+00311 }
+00312 
+00313 QString ShowRecordElem::strSizePrefix( ) const
+00314 {
+00315   QString size;
+00316 
+00317   if( m_size >= 1024 * 1024 )
+00318   {
+00319     //prefix is mega
+00320     size = QString( "%L1M" ).arg( ( (double)m_size / ( 1024 * 1024 ) ), 0, 'f', 1 );
+00321   }
+00322   else if( m_size >= 1024 )
+00323   {
+00324     //prefix is kilo
+00325     size = QString( "%L1K" ).arg( ( (double)m_size / 1024 ), 0, 'f', 1 );
+00326   }
+00327   else
+00328     //no prefix
+00329     size = QString( "%L1" ).arg( m_size );
+00330 
+00331   return size;
+00332 }
+00333 
+00334 QString ShowRecordElem::decodeMailBody( QByteArray body, bool preferHTML ) const
+00335 {
+00336   QString charset;    //charset of the content
+00337   QString encoding;   //content transfer encoding
+00338 
+00339   //cast given body to a QCString
+00340   //class QCString needs a null terminated char array to create
+00341   //an object. Therefore we append an null byte to the given mail body
+00342   body.resize( body.size() + 1 );
+00343   body[ body.size() - 1 ] = '\0';
+00344   QCString strBody( (char *)body.data() );
+00345 
+00346   //normalize line ends; remove all \r characters
+00347   for( uint i = 0; i < strBody.size(); i++ )
+00348     if( strBody[ i ] == '\r' )
+00349       strBody.remove( i, 1 );
+00350 
+00351   //get boundary that is separating the parts of a multipart message
+00352   //if the header doesn't contain a boundary attribute, this messsage
+00353   //has just one part
+00354   QString boundary = getBoundary();
+00355 
+00356   //process body subject to it is a multipart messsage or not
+00357   if( boundary == "" )
+00358   {
+00359     //the message has just one body part
+00360 
+00361     //get the position of the first blank line
+00362     int posBlankLine = strBody.find( "\n\n" );
+00363 
+00364     //truncate body; the found blank line is separating the
+00365     //header from the message
+00366     strBody = strBody.mid( posBlankLine + 2 );
+00367     while( strBody[ 0 ] == '\n')
+00368       strBody.remove( 0, 1 );
+00369 
+00370     //get charset of the message; it is behind the
+00371     //content type attribute in the header
+00372     charset = getCharset();
+00373 
+00374     //get transfer encoding type from the header
+00375     encoding = getTransferEncoding();
+00376   }
+00377   else
+00378   {
+00379     //the message has multiple parts
+00380 
+00381     //get positions of a plain text and html flag (value of the content type attribute)
+00382     int posPlainFlag = strBody.find( "text/plain", 0, false );
+00383     int posHTMLFlag = strBody.find( "text/html", 0, false );
+00384 
+00385     //just decode the body, if a plain text or a HTML part is available
+00386     if( posPlainFlag != -1 || posHTMLFlag != -1 )
+00387     {
+00388       //do we want to take the HTML part?
+00389       bool hasHTML = posHTMLFlag != -1;
+00390       bool takeHTML = ( hasHTML && preferHTML ) || posPlainFlag == -1;
+00391 
+00392       //now we want to extract the designated part
+00393       //While the (truncated) mail text (or the header at the first pass)
+00394       //contains a boundary attribute we will extract the designated part
+00395       //between the boundaries
+00396       int posInside;    //a position inside the designated part
+00397       while( boundary != "" )
+00398       {
+00399         //get a position inside the designated part
+00400         if( takeHTML )
+00401           posInside = strBody.find( "text/html", 0, false );
+00402         else
+00403           posInside = strBody.find( "text/plain", 0, false );
+00404 
+00405         //get length of the boundary
+00406         int lengthBoundary = boundary.length();
+00407 
+00408         //calculate the begin and end of the part to extract
+00409         int beginPart = strBody.findRev( boundary.ascii(), posInside ) + lengthBoundary + 1;
+00410         int lengthPart = strBody.findRev( '\n', strBody.find( boundary.ascii(), posInside ) ) - beginPart;
+00411 
+00412         strBody = strBody.mid( beginPart, lengthPart );
+00413 
+00414         //looking for a further boundary attribute
+00415         //get the position of the first occurance of "boundary="
+00416         int posBoundary = strBody.find( "boundary=", 0, false );
+00417 
+00418         if( posBoundary >= 0 )
+00419         {
+00420           //calculate positon of the first quote
+00421           int posFirstQuote = posBoundary + 9;
+00422 
+00423           //get the position of closing quote
+00424           int posSecondQuote = strBody.find( '"', posFirstQuote + 1 );
+00425 
+00426           //get boundary string
+00427           boundary.append( strBody.mid( posFirstQuote + 1, posSecondQuote - posFirstQuote - 1 ) );
+00428         }
+00429         else
+00430           boundary = "";
+00431       }
+00432 
+00433       //now we get charset and transfer encoding if available in the extracted
+00434       //part
+00435 
+00436       //get the position of the first occurance of "charset="
+00437       int posCharset = strBody.find( "charset=", 0, false );
+00438 
+00439       //continue, if a charset attribute was found
+00440       if( posCharset >= 0 )
+00441       {
+00442         //calculate positon of the value
+00443         int posBeginValue = posCharset + 8;
+00444 
+00445         //get end of the value
+00446         int posEndValue = strBody.find( '\n', posBeginValue ) - 1;
+00447 
+00448         //get charset
+00449         charset.append( strBody.mid( posBeginValue, posEndValue - posBeginValue + 1 ) );
+00450 
+00451         //remove quotes
+00452         charset.remove( '"' );
+00453         //remove all content after the first semicolon (inclusive)
+00454         int posSemicolon = charset.find( ';' );
+00455         charset = charset.left( posSemicolon );
+00456       }
+00457 
+00458       //get the position of the first occurance of "charset="
+00459       int posEncoding = strBody.find( "Content-Transfer-Encoding:", 0, false );
+00460 
+00461       //continue, if a charset attribute was found
+00462       if( posEncoding >= 0 )
+00463       {
+00464         //calculate positon of the value
+00465         int posBeginValue = posEncoding + 26;
+00466 
+00467         //get end of the value
+00468         int posEndValue = strBody.find( '\n', posBeginValue ) - 1;
+00469 
+00470         //get charset
+00471         encoding.append( strBody.mid( posBeginValue, posEndValue - posBeginValue + 1 ) );
+00472 
+00473         //remove quotes and spaces
+00474         encoding = encoding.stripWhiteSpace();
+00475         encoding.remove( '"' );
+00476       }
+00477 
+00478       //cut off the part header; the found blank line is separating the
+00479       //part header from the message
+00480       if( posCharset != -1 || posEncoding != -1 )
+00481       {
+00482         int posBlankLine = strBody.find( "\n\n" );
+00483         strBody = strBody.mid( posBlankLine + 2 );
+00484         while( strBody[ 0 ] == '\n')
+00485           strBody.remove( 0, 1 );
+00486       }
+00487     }
+00488   }
+00489 
+00490   //Good things come to those who wait. We have extract the message.
+00491   //Now we have to decode the message, if it is encoded
+00492   if( encoding == "quoted-printable" )
+00493   {
+00494     strBody = KCodecs::quotedPrintableDecode( strBody );
+00495   }
+00496 
+00497   return QString( strBody );
+00498 }
+00499 
+00500 QString ShowRecordElem::getBoundary( ) const
+00501 {
+00502   QString boundary;
+00503 
+00504   //check, whether it is a multipart message
+00505   if( m_content.contains( "multipart", false ) )
+00506   {
+00507     //it is a multipart message
+00508 
+00509     //get the position of the first occurance of "boundary="
+00510     int posBoundary = m_header.find( "boundary=", 0, false );
+00511 
+00512     //continue, if a boundary attribute was found
+00513     if( posBoundary >= 0 )
+00514     {
+00515       //calculate positon of the first quote
+00516       int posFirstQuote = posBoundary + 9;
+00517 
+00518       //get the position of closing quote
+00519       int posSecondQuote = m_header.find( '"', posFirstQuote + 1 );
+00520 
+00521       //get boundary string
+00522       boundary.append( m_header.mid( posFirstQuote + 1, posSecondQuote - posFirstQuote - 1 ) );
+00523     }
+00524   }
+00525 
+00526   return boundary;
+00527 }
+00528 
+00529 QString ShowRecordElem::getCharset( ) const
+00530 {
+00531   QString charset;
+00532 
+00533   //get the position of the first occurance of "charset="
+00534   int posCharset = m_header.find( "charset=", 0, false );
+00535 
+00536   //continue, if a charset attribute was found
+00537   if( posCharset >= 0 )
+00538   {
+00539     //calculate positon of the value
+00540     int posBeginValue = posCharset + 8;
+00541 
+00542     //get end of the value
+00543     int posEndValue = m_header.find( '\r', posBeginValue ) - 1;
+00544 
+00545     //get charset
+00546     charset.append( m_header.mid( posBeginValue, posEndValue - posBeginValue + 1 ) );
+00547 
+00548     //remove quotes
+00549     charset.remove( '"' );
+00550     //remove all content after the first semicolon (inclusive)
+00551     int posSemicolon = charset.find( ';' );
+00552     charset = charset.left( posSemicolon );
+00553   }
+00554 
+00555   return QString( charset );
+00556 }
+00557 
+00558 QString ShowRecordElem::getTransferEncoding( ) const
+00559 {
+00560   QString encoding;
+00561 
+00562   //get the position of the first occurance of "charset="
+00563   int posEncoding = m_header.find( "Content-Transfer-Encoding:", 0, false );
+00564 
+00565   //continue, if a charset attribute was found
+00566   if( posEncoding >= 0 )
+00567   {
+00568     //calculate positon of the value
+00569     int posBeginValue = posEncoding + 26;
+00570 
+00571     //get end of the value
+00572     int posEndValue = m_header.find( '\r', posBeginValue ) - 1;
+00573 
+00574     //get charset
+00575     encoding.append( m_header.mid( posBeginValue, posEndValue - posBeginValue + 1 ) );
+00576 
+00577     //remove quotes and spaces
+00578     encoding = encoding.stripWhiteSpace();
+00579     encoding.remove( '"' );
+00580   }
+00581 
+00582   return QString( encoding );
+00583 
+00584 }
+00585 
+00586 int ShowRecordElem::showHeader( QString& account )
+00587 {
+00588   //show header
+00589   QString tsubject = subject();
+00590   QString tmailheader = header();
+00591 
+00592   //create and open the window
+00593   ShowHeaderDialog dlg( kapp->mainWidget(), account, tsubject, tmailheader );
+00594   int ret = dlg.exec();
+00595 
+00596   //returns the matching value
+00597   return ret == QDialog::Accepted ? ShowRecordElem::continueShowHeaders : ShowRecordElem::cancelShowHeaders;
+00598 }
+00599 
+00600 
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/showrecordelem_8h-source.html b/doc/html/showrecordelem_8h-source.html new file mode 100644 index 0000000..fdce890 --- /dev/null +++ b/doc/html/showrecordelem_8h-source.html @@ -0,0 +1,202 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/showrecordelem.h Source File + + + + + + + +

showrecordelem.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           showrecord.h  -  description
+00003                              -------------------
+00004     begin                : Thu Dec 28 2000
+00005     copyright            : (C) 2000-2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef SHOWRECORDELEM_H
+00019 #define SHOWRECORDELEM_H
+00020 
+00021 //Qt headers
+00022 #include <qdom.h>
+00023 #include <qstring.h>
+00024 #include <qlistview.h>
+00025 #include <qdatetime.h>
+00026 
+00027 //KDE headers
+00028 #include <klocale.h>
+00029 #include <kglobal.h>
+00030 #include <kdebug.h>
+00031 #include <mimelib/datetime.h>
+00032 #include <kmdcodec.h>
+00033 
+00034 //KShowmail headers
+00035 #include "showlistviewitem.h"
+00036 #include "decodeRFC2047.h"
+00037 #include "constants.h"
+00038 #include "kshowmailview.h"
+00039 #include "showheaderdialog.h"
+00040 #include "headerfilter.h"
+00041 #include "filterlog.h"
+00042 
+00043 using namespace Constants;
+00044 
+00045 //forward class declarations
+00046 class KshowmailView;
+00047 class FilterElem;
+00048 
+00061 class ShowRecordElem
+00062 {
+00063 
+00064   public:
+00065 
+00070     static const int continueShowHeaders;
+00071 
+00076     static const int cancelShowHeaders;
+00077 
+00081         ShowRecordElem ();
+00082 
+00089     ShowRecordElem( int number, QString& uid, bool isNew );
+00090 
+00096     void setHeader( const QString& header );
+00097 
+00102     QString header() const;
+00103 
+00108     QString from() const;
+00109 
+00114     QString to() const;
+00115 
+00120     QString subject() const;
+00121 
+00126     QString content() const;
+00127 
+00128 
+00134     QString date() const;
+00135 
+00142     QString strUnixTime () const;
+00143 
+00148     QDateTime sentDateTime() const;
+00149 
+00154     void setUIDL( const QString& uid );
+00155 
+00160     QString uidl() const;
+00161 
+00166     void setSize( int size );
+00167 
+00172     int size() const;
+00173 
+00178     QString strSize () const;
+00179 
+00183     QString strSizePrefix() const;
+00184 
+00189     void setNew( bool isnew );
+00190 
+00196     bool isNew() const;
+00197 
+00203     QString state() const;
+00204 
+00209     void setNumber( int n );
+00210 
+00215     int number() const;
+00216 
+00223     void setViewItem( ShowListViewItem* item );
+00224 
+00231     ShowListViewItem* viewItem() const;
+00232 
+00246     FilterAction_Type applyHeaderFilter( HeaderFilter* filter, QString account, QString& mailbox, FilterLog* log = NULL );
+00247 
+00255     void readOptions( QDomElement& elem );
+00256 
+00263     void saveOptions( QDomDocument& doc, QDomElement& parent );
+00264 
+00270     bool isSelected() const;
+00271 
+00283     QString decodeMailBody( QByteArray body, bool preferHTML ) const;
+00284 
+00291     int showHeader( QString& account );
+00292 
+00299     void writeToMoveLog( FilterLog* log, QString account, QString mailbox );
+00300 
+00306     void writeToDeleteLog( FilterLog* log, QString account );
+00307 
+00311     void setMarkAtNextViewRefresh();
+00312 
+00313   private:
+00314 
+00318     QCString m_header;
+00319 
+00323     QCString m_from;
+00324 
+00328     QCString m_to;
+00329 
+00333     QCString m_subject;
+00334 
+00338     QDateTime m_unixDate;
+00339 
+00343     QCString m_content;
+00344 
+00348     QString m_uid;
+00349 
+00353     int m_size;
+00354 
+00358     bool m_new;
+00359 
+00363     int m_nNumber;
+00364 
+00371     bool markAtViewRefresh;
+00372 
+00378     ShowListViewItem* m_pItem;
+00379 
+00386     FilterElem* m_pFilter;
+00387 
+00399     QCString scanHeader( const QString& item ) const;
+00400 
+00405     void setFrom( const QCString& from );
+00406 
+00411     void setTo( const QCString& to );
+00412 
+00417     void setSubject( const QCString& subject );
+00418 
+00423     void setDate( const QCString& date );
+00424 
+00429     void setContent( const QCString& content );
+00430 
+00436     void setFilter( FilterElem* filter );
+00437 
+00443     QString getBoundary() const;
+00444 
+00450     QString getCharset() const;
+00451 
+00458     QString getTransferEncoding() const;
+00459 
+00460 };
+00461 
+00462 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/tab_b.gif b/doc/html/tab_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d623483ffdf5f9f96900108042a7ab0643fe2a3 GIT binary patch literal 35 ncmZ?wbhEHbWMp7uXkcJy*>IeJfk6j|fqX^=1|}vKMh0sDa2W*H literal 0 HcmV?d00001 diff --git a/doc/html/tab_l.gif b/doc/html/tab_l.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b1e6337c9299a700401a2a78a2c6ffced475216 GIT binary patch literal 706 zcmZ?wbhEHbZT`}F1e&(Gg}Y(8=I;HA5#Z$3JI=gGB)FQ#odI(O&E^@q;x zK6mr*m3xOS-#u~t!I@i+u0DKm^U160k6t`|^WpV}&n+8{U%dD9&a>B#U%!9-@yol< zU%&tQ{rk_K|NsC0`}dE5ET99@1@a36+kb~?0UJ*yc&I3X_m z!ND^5$O7$#8OFRuDhG}!?8z?cdZK&!`PWjdR;Aj^wZ` zeK{IEYHBJ)6K8VIp1`BVt++swf6j+=L{p1*nO(VhE`pFexG@5$|>uaCcd z`0m=9m+yak{QmXN#Sc$^{$X9h9&q2jiKAI|&T)a;PPx2K9p`YIdw8HtR5k2Q$2-O2 z*;3y{MQ-RnJTgJfI&R5|O)AHxDf_00XbPvDZPy4t=hHd)nfLPvms&O`Ok(sD()5v$ z5U@&h;a=#xbxVbo2~X&Xj0Ie(f{v>vERH+qC+nTG=B8Nca=wU-O$?1&vUgV~9=!H; zx>3p9Yn%*<>t~sk+&0xfyS8RsPfYBd<~wWK%j-LmpU>O7yX^h#UCp1x-p#i7@bE;py8XI6 zmY<)m>~)W~yIWcMVoiPg{duuf<*)9qZ9l$m*Ph&W&$jlv*Vpa+{pH@n=IQ$L?0$ax ec60Ul|8o2P|NVbd{6P)#weSbE3}s?04AuZvx_~SI literal 0 HcmV?d00001 diff --git a/doc/html/tab_r.gif b/doc/html/tab_r.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce9dd9f533cb5486d6941844f442b59d4a9e9175 GIT binary patch literal 2585 zcmbV}`9Bkk1ILFF--w5zJc=ZZT(zjE=;2|_S)Qm~rCWz1Pc)KPl;jv%A#&v2*x}yc zmf2~Jm~&=xjJY?PqwIN}f8qQ2{r$uH{c*nJbmr{cR5??*egHrs-B=MzCF`3%e{FAW z{oL5xTHn~5TM{jaB;@|_Ue5F&Zb@p(kMyG{*;gWDg zyeL|eZf7Qd8=#bXzSiR{yzRgLSj-fJS8>lBjVHN z^o-0eS=nE6a`W;LChBs=`+QAJP~{b93>H^eRb5kCSC1zUNezun%`L5M?RDzv#%jk7 zYVRX=vATPD`+oEfum^{RM@GjuP?-r=yh0!p;Vx^T9G7~`7%5ydH%70=jyJ;;`d;hv92x3R=z{xp+Lg2!*@OK*K15-t&okoPtSED)h&$RLxdbA zseWm^C3d%-yRNi-ryk^!ek+C`n&~cd$#ZWct_cUL{l~i+Nzx^5d!n94(>bW-iL~Rl z&8r)?q|1DIo=0=judQ{FaGcfLERz8gfn3-Qt<2lksh{mzpT}DXxUuR^z=^key&q4! z+wWI45vL0k$R^(F#{qfqhUsN@WA+w-V?LPH33!Q?WFSB3)WBojE@hK41Nb?KfS+Qo zXgrzfsP$wr4Qzy*{OD>uJBjdgGM@VMml5)2f~_}lD*YyOb}Hjeobhz#4c`w(l^>KK zr?Ud;W~Z}*w;%hZ|2^p^+f06gJDJQD zeIhGADbDmm&6arh(q>EZ<7mjzg7l|z$hRL8=1>)Nv=S7CY$B}iYJ&*T_-T_OG*L1q ztZ3Lana33?y3AKnyq^YCF|4x%Rb5WU&2qcl{TFKey%QJeMxn^SdT!hZ5+0i1zeusiYVp-phBl7b5+Px-X&LhByq z0F&<;K0l2+v>qiHlXb#$jXMv$uK-dEGE9L~qtdU(XeRXmvu*K2Q&6!fD**JxYP4b4BR7FdJ$Qx9G9`J%-_X!a#LGpp3g9)VWytGCa;7`S1_e8F~!R+aSJ zOF17p2`H?2kPs8Q`_;U}+D%3p zs2-0BTqFwpUoBk`?P;iPQ(IbEA|JmMx!P&YYG|R@S=5Mnw;-?A6rEEVyV%d7{iU4a zNk`i!%F(Ykpm`}#oH;BjY->@b8vQedv;pza2FL&*6ufjd+*3Ute&>kes~TU?^KkojsTh(o~(3tk1Y6>4(yn( z#U*ID9@eg-beKo1B;HXe+}{Z%n@7m0+yxivuqk9~;!1LGQlah)xYK4>wgL}l6dsaN zIxlRlq`*`j9PG4*0hD6YV_b_2w5b#)o7J?`q#{GjvvKlD`T*dWcZx<-s(ZvLB44E# z=!|sw!?)@%y$oRNL#25WS3lzdii}TuQ3?CLnvQ1_n};2sT_;Y;#d3=+-(O% zMN$>O!3;ke(UuLR%h_&)N zs^!-@A>QR}4yB1bPp`9S19ikTbZ~O{&FF-yHK{En;mmShDUIEw03`j(DBIsM}Rjki2J#SQa3gFZTKBPDeIiLt9Z z%bL3(B@Qw%(B`wSMS~dPh$=R`(}lBoFXKy(s|*{#ru$wjsBc_O#zxNk9w+UUHmx(U zmJ8+M+ndtnZ<7|VU9Mbt61zpo9T&3%Wx&XII=#QJxjR`CZf22ac3d51Z?GD%LEe_&*t46Qf;4`bZ7p2K(Ab5>GfT^}4! zBT&HZD`^PEgWoI&{~o-ID0F?O`75sm(87x%A{(}Ch1)QlzdJ)1B-eqe5a(weg0`4lQIf1evjvbBY50DVbzO7CLf|vP z2#0(U-|jZ`H{y5N^o7%iK6H>_HEGN->U6^!)1{XpJV!!4(Ig7wzZQ*9WYF4X1rG0x z=1uA@i`rIAciubDC{;~b(|&|A@xkjRP5aRcvRU9tvIm}jDB6J eQ0-6-y)mpwdT=ayS0tBxKDA*~;EWmo literal 0 HcmV?d00001 diff --git a/doc/html/tabs.css b/doc/html/tabs.css new file mode 100644 index 0000000..a61552a --- /dev/null +++ b/doc/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI#current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI#current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.nav +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/doc/html/types_8h-source.html b/doc/html/types_8h-source.html new file mode 100644 index 0000000..1577e33 --- /dev/null +++ b/doc/html/types_8h-source.html @@ -0,0 +1,105 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/types.h Source File + + + + + + + +

types.h

Go to the documentation of this file.
00001 //
+00002 // C++ Interface: types
+00003 //
+00004 // Description:
+00005 // All specail types for KShowMail
+00006 //
+00007 //
+00008 // Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2007
+00009 //
+00010 // Copyright: See COPYING file that comes with this distribution
+00011 //
+00012 //
+00013 
+00014 #ifndef TYPES_H
+00015 #define TYPES_H
+00016 
+00017 //Qt headers
+00018 #include <qvaluelist.h>
+00019 #include <qmap.h>
+00020 #include <qstring.h>
+00021 
+00022 using namespace std;
+00023 
+00027 namespace Types
+00028 {
+00032      enum State_Type {idle,                  
+00034                       deleting,              
+00036                       configure,             
+00040                       executing,             
+00042                       showing,               
+00044                       refreshing             
+00045      };
+00046 
+00050      enum AccountState_Type
+00051      {
+00052        AccountIdle,         
+00054        AccountDeleting,     
+00056        AccountDownloading,  
+00058        AccountRefreshing    
+00059      };
+00060 
+00064      typedef QValueList<int> MailNumberList_Type;
+00065 
+00071      typedef QMap<QString, bool> AccountTaskMap_Type;
+00072 
+00076      enum FilterAction_Type
+00077      {
+00078        FActPass,           
+00079        FActDelete,         
+00080        FActMark,           
+00081        FActMove,           
+00082        FActSpamcheck,      
+00083        FActIgnore,         
+00084        FActNone            
+00085      };
+00086 
+00091      struct DownloadActionParams_Type
+00092      {
+00093        FilterAction_Type action;  
+00094        QString mailbox;            
+00095      };
+00096 
+00101      typedef QMap<int, DownloadActionParams_Type> MailToDownloadMap_Type;
+00102 
+00106      struct FilterCriteria_Type
+00107      {
+00108        int source;       
+00109        int condition;    
+00110        uint numValue;    
+00111        QString txtValue; 
+00112        bool cs;          
+00113      };
+00114 
+00118     typedef list<FilterCriteria_Type> FilterCriteriaList_Type;
+00119 
+00120 }
+00121 
+00122 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/html/uniqueapp_8cpp-source.html b/doc/html/uniqueapp_8cpp-source.html new file mode 100644 index 0000000..841c2e5 --- /dev/null +++ b/doc/html/uniqueapp_8cpp-source.html @@ -0,0 +1,99 @@ + + +kshowmail: kshowmail/uniqueapp.cpp Source File + + + + + + +

uniqueapp.cpp

00001 /***************************************************************************
+00002                           uniqueapp.cpp  -  description
+00003                              -------------------
+00004     begin                : Mon Nov 19 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #include "uniqueapp.h"
+00019 #include <iostream>
+00020 
+00021 
+00022 UniqueApp::UniqueApp()
+00023 {
+00024        m_pApp = NULL;
+00025 }
+00026 
+00027 UniqueApp::~UniqueApp()
+00028 {}
+00029 
+00030 int UniqueApp::newInstance ()
+00031 {
+00032   //start our application
+00033   //---------------------
+00034 
+00035   //at the first invoke of newInstance() create a new instance of kshowmail
+00036   if (m_pApp == NULL)
+00037   {
+00038     m_pApp = new KShowMailApp ();
+00039   }
+00040 
+00041   //frage das ConfigList-Objekt, ob die KShowMail beim Starten
+00042   //normal oder nur in der Taskleiste gezeigt werden soll
+00043   if( m_pApp->m_ConfigList.startMinimized() )
+00044   {
+00045     //lege die App auf die Taskleiste
+00046     m_pApp->showMinimized ();
+00047     m_pApp->hide();
+00048   }
+00049   else
+00050   {
+00051     //zeige das Hauptfenster
+00052     m_pApp->showNormal ();
+00053     m_pApp->raise();
+00054   }
+00055 
+00056   //Kommandozeile-Argumente auswerten
+00057   //---------------------------------
+00058 
+00059   //die in main() eingelesenen Kommandozeile-Argumente in ein
+00060   //KCmdLineArgs-Objekt ablegen
+00061   KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+00062 
+00063   //wenn als Kommandozeilen-Argument "config" übergeben wurde,
+00064   //starte jetzt den Konfigurationsdialog
+00065   if ( args->isSet( CMDLINE_CONFIG ) )
+00066     m_pApp->slotSetup();
+00067 
+00068   //wenn als Kommandozeile-Argument "refresh" übergeben wurde,
+00069   //schaue sofort nach neue Mails
+00070   if ( args->isSet ( CMDLINE_REFRESH ) )
+00071     m_pApp->slotRefresh();
+00072 
+00073   //lösche alle Kommandozeilen-Argumente im Objekt
+00074   args->clear ();
+00075 
+00076   return 0;
+00077 }
+

Generated on Thu Jul 5 19:36:07 2007 for kshowmail by  + +doxygen 1.5.0
+ + diff --git a/doc/html/uniqueapp_8h-source.html b/doc/html/uniqueapp_8h-source.html new file mode 100644 index 0000000..5a26d9b --- /dev/null +++ b/doc/html/uniqueapp_8h-source.html @@ -0,0 +1,75 @@ + + +kshowmail.kdevelop: Daten/Documents/programmieren/kshowmail/kshowmail/kshowmail/uniqueapp.h Source File + + + + + + + +

uniqueapp.h

Go to the documentation of this file.
00001 /***************************************************************************
+00002                           uniqueapp.h  -  description
+00003                              -------------------
+00004     begin                : Mon Nov 19 2001
+00005     copyright            : (C) 2001 by Eggert Ehmke
+00006     email                : eggert.ehmke@berlin.de
+00007  ***************************************************************************/
+00008 
+00009 /***************************************************************************
+00010  *                                                                         *
+00011  *   This program is free software; you can redistribute it and/or modify  *
+00012  *   it under the terms of the GNU General Public License as published by  *
+00013  *   the Free Software Foundation; either version 2 of the License, or     *
+00014  *   (at your option) any later version.                                   *
+00015  *                                                                         *
+00016  ***************************************************************************/
+00017 
+00018 #ifndef UNIQUEAPP_H
+00019 #define UNIQUEAPP_H
+00020 
+00021 //KDE-Header
+00022 #include <kwin.h>
+00023 #include <kcmdlineargs.h>
+00024 #include <kuniqueapplication.h>
+00025 
+00026 //KShowMail-Header
+00027 #include "kshowmail.h"
+00028 #include "constants.h"
+00029 
+00030 using namespace Constants;
+00031 
+00037 class UniqueApp : public KUniqueApplication  {
+00038 
+00039 public: 
+00040   
+00044   UniqueApp();
+00045   
+00049   ~UniqueApp();
+00050   
+00054   virtual int newInstance ();
+00055   
+00056   
+00057 private:
+00058   
+00062   KShowMailApp* m_pApp;
+00063 };
+00064 
+00065 #endif
+

Generated on Tue Apr 1 21:59:49 2008 for kshowmail.kdevelop by  + +doxygen 1.5.0
+ + diff --git a/doc/hu/Makefile.am b/doc/hu/Makefile.am new file mode 100644 index 0000000..857fbfb --- /dev/null +++ b/doc/hu/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = hu +KDE_DOCS = kshowmail + diff --git a/doc/hu/index.docbook b/doc/hu/index.docbook new file mode 100644 index 0000000..7bca91e --- /dev/null +++ b/doc/hu/index.docbook @@ -0,0 +1,481 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +A Kshowmail Kézikönyv + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +Eggert Ehmke + + + +&FDLNotice; + + + +09/10/2003 +3.0.6 + + + + + +Ez a kézikönyv a Kshowmail 3.0.6 verzióját írja le + + + + + + +KDE +kshowmail +kmail +pop3 +üzenet ellenôrzô + + +
+ + + + +Bevezetés + + + + +Kshowmail egy KDE eszköz amely a POP3 szerverre beérkezô üzeneteket figyeli. +Az üzenetek fejléce és az üzenet teljes tartalma megtekinthetô anélkül, hogy letöltenénk +ôket a helyi levelezôrendszerbe. +A nemkívánatos üzenetek törölhetôk a szerverrôl. +Az üzenetek listája idôkapcsolók beállítával frissíthetô. +Szûrôk hozhatók létre az ismert reklámüzenetek és egyéb más nemkívánatos üzenetek kijelölésére. +A szûrôk által kijelölt üzenetek automatikusan törölhetôk. +Új üzenetek érkezésekor hangjelzés játszható. +Felhasználói parancsok, mint például fetchmail vagy sendmail konfigurálható a parancs menü segítségével. +Speciális parancs definiálható reklamáló levelek küldésére nemkívánatos reklámüzenetekre válaszul. +A program támogatja több póstaláda egyidejû figyelését. + + + + +A Kshowmail használata + + + + +A Kshowmail asználata általánosságbanban + +Adj meg néhány póstaláda bejelentkezést az "Beállítások" dialógus segítségével. Kapcsolódj rá az internetre. +Az "Üzenetek frissítése" gomb megnyomásával listázhatod a POP3 póstaládákban található üzeneteket. +Minden más menüpont és menü elem magétól értetôdô. + +Jó szórakozást ! + + + + Gyorsbillentyûk + + A program a következô gyorsbillentyûket használja: + + F2 + + A kiválasztott üzenet fejlécének megjelenítése + + + + F3 + + A kiválasztott üzenet teljes tartalmának megjelenítése + + + + F5 + + Üzenetek frissítése + + + + Shift-F5 + + Az üsszes üzenet frissítése + + + + F10 + + Póstaláda bejelentkezések beállítása + + + + Del + + A kijelölt üzenetek törlése a szerverrôl + + + + Ctrl-C + + Üzenetlista tisztítása. + (Az üzenete nem keülnek törlésre a szerverrôl) + + + + + + + Szûrôk + + A reklámüzenetek és egyéb nemkívánatos üzenetek kiválasztására szûrôket használhatunk. + Tetszôleges számú szûrô definiálására van lehetôség a programban. + A szûrôk az üzenetlista frissítésekor kerülnek alkalmazásra minden bejövô üzeneten. + + + A "Szûrôk beállítása" párbeszédablakban kiválaszthatsz egy szûrôállapotot. + "Ki"-kapcsolt jelöli, ha minden szûrô ki van kapcsolva. + "Be"-kapcsolt jelöli, ha minden szûrô be van kapcsolva. + A kiszûrt levelek kiválaszthatók az üzenetlistáról és kézzel törölhetôk. + "Automatikus törlés" állapotban az összes kiszûrt üzenet azonnal törlésre kerül. + Nagyon óvatosan bánjunk ezzel az állapottal! + Ajánlatos az új szûrôket egy ideig a "be"-kapcsolt állapotban tesztelni. + Az automatikusan törlésre került üzeneteket a ~/.kde/share/apps/kshowmail/kshowmail.log állományban kísérhetjük figyelemmel. + + + + A szûrôk egy vagy két egyeztetési mintát tartalmaznak, amelyek összekapcsolhatók. + Különösen hatékony minták definiálhatók szabványos kifejezések segítségével. + Ebben a programban a Qt-könyvtár szabványos kifejezéseit használjuk; + részletes leírást a KRegExpEditor dokumentációjában vagy az interneten + elérhetô, szabványos kifejezésekrôl szóló dokumentumokban találhatsz. + + Mi az, hogy Szabványos Kifejezés? + + + + + Példák Szabványos Kifejezésekre + + MS Corporation|Microsoft: Egyezik "MS Corporation"-nal vagy "Microsoft"-tal. + + + (mail|message) delivery: Egyezik "mail delivery"-vel vagy "message delivery"-vel. + + + ms (program )?security: Egyezik "ms security"-val vagy "ms program security"-val. + + + [\x0100-\xffff]: Egeyzik minden karakterrel az ami az ASCII karakterkészleten kívül esik. (Kínai és Koreai karakterek) + + + Ezek a minták tetszôlegesen kombinálhatók. + + + + + +Parancsértelmezô paraméterek + +A lekérdezendô póstaláda megadható a program indításakor mint paraméter. +Amennyiben a -config kapcsóló szerepel a paraméterként, a "Beállítások" párbeszédablak azonnal megnyílik a programindítás után. +Ez akkor lehet hasznos, ha a "Lépj ki a programból, ha nincs új üzenet" módot állítottuk be elôzôleg. +A -refresh kapcsoló megadása esetén a program indítása után azonnal elindul a frissítési eljárás. + + + +Külsô programok + +Ha külsô programot - mint például a fetchmail - akarunk indítani, adjunk egy bejegyzést a parancs menühöz. +A így megadott parancsok nevei a "Tevékenységek" menüpontban jelennek meg. Amennyiben a parancs neve tartalmazza a '&' karaktert, +az azt követô betû használható a parancshoz mint gyorsbillentyû. + +A következô hivatkozások használhatók a parancs megadásokor. Ezek a futtatás során az aktuális értékekre fognak cserálôdni: + <user> A felhasználó neve + <passwd> Jelszó + <server> Szerver + <header> Az üzenetfejléc egy átmeneti állományban kerül tárolásra. Ennek az állománynak a neve kerül ide behelyettesítésre. + <body> Az üzenet tartalma egy átmeneti állományban kerül tárolásra. Ennek az állománynak a neve kerül ide behelyettesítésre. + + + Reklamálólevél küldése + +A reklamálólevél küldése egy nagyon speciális parancs. +Hogy a maximális rugalmasságot biztosítsuk, szintén külsô parancsként került megvalósításra. +Javasolnám hogy Daniel Stenberg spam.pl nevû perl programjának 0.20 vagy késôbbi verzióját használjuk. +Innen tölthetô le: http://spam.sourceforge.net. +Összekapcsolása a Kshowmail-lel a következô módon történik: + +1. Installáljuk a spam.pl-t egy megfelelô könyvtárban, pl. a /usr/local/bin-ben. +Hozzunklétre két állományt a ~/.spam/friends -t és a ~/.spam/from -t. +Részleteket a spam.pl dokumentációjában találhatsz. +Hozzunk létre egy bejegyzést a kshowmail "parancs" menüjében. +A bejegyzés nevének "complain"-nek kell lennie, egyébként nem fogja megfelelôen felismerni a parancsot! +Adjuk meg a következô szöveget, mint parancssort: + spam.pl -d < <body> + Ez elküldi az üzenet tartalmát a spam.pl programnak. + +A nyomkövetés -d kapcsoló késôbb kitörölhetô, ha a dolgok jól mûködnek. +A reklamálólevelek ténylegesen csak ezután kerülnek elküldésre. + +Szükség szerint egyéb kapcsolók is használhatók. +Körültekintôen válsszuk meg a bejegyzéseket ~/.spam/friends állományban. +Legalább a helyi domain-nek szerepelnie kell benne. + +Ennek a lehetôségnek a használata a saját felelôsséged! +A "Reklamáció küldése" gomb megnyomásakor minden kijelölt üzenetre válaszul +egy reklamáló levél készül és kerül azonnal elküldésre. +A reklamálólevél címzettjét a spam.pl program határozza meg. +Ameddig a -d kapcsoló aktív, csak egy üzenet jelenik meg ami leírja, hogy mi történne a valójában ebben az esetben. +A szolgáltatás bekapcsolásához töröljük a nyomkövetés kapcsolót. + Más reklámlevél azonosító program beállítása is hasonlóan történik. +Üzenjetek, ha valami gond van! + + + + +Kérdések és Válaszok + + + +&reporting.bugs; +&updating.documentation; + + + + +Fejlesztés alatt. + + +Fejlesztés alatt. + + + + + + + + + +Szerzôk és Licnec + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +További szerzôtársak: + + + +Nicolas Vignal nicolas.vignal@fnac.net Aki RedHat RPM-eket és a +Francia fordítást adta. + + + + +Edgardo Garcia edyx@mindless.com aki a spanyol fordítást adta + + + + +Mattias Newzella newzella@swipnet.se aki a svéd fordítást adta + + + + +Sok felhasználó segített a program tesztelésében +és adott rengeteg ötletet, amelyek most már a kshowmail részei. + +Köszönet Mindannyiuknak! + + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Telepítés + + +Honnan szerezhetjük meg a Kshowmail-t? + + +The actual version is to be found on + +http://sourceforge.net/projects/kshowmail +or on +http://freshmeat.net + + + + + +Futtatási feltételek + + + + + A fejlesztés és tesztelés SuSE 8.2 disztribúció alatt történik. + A kshowmail használatához KDE 3.1.x and Qt 3.1.x.-re van szükséged. + + + + +A változások listáját itt találhatod meg: + +http://sourceforge.net/projects/kshowmail + + + + +Fordítás és telepítés + + + A kshowmak fordításához és telepítéséhez gépeld be a következô parancsokat a kshowmail alapkönyvtárában: + + % ./configure + vagy akár: + % ./configure --prefix=$KDEDIR + + % make + + root-ként: + % make install + + Hasznos lehet a KDEDIR körneyzeti változó beállítása, mielôtt nekikezdenénk ezeknek a lépéseknek. + + + + Mivel Kshowmail az autoconf-ot és az automake-t használja, nem valószínû hogy gond lesz a fordítással. + Amennyiben mégis elôfordulna, kérlek írjatok. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/it/Makefile.am b/doc/it/Makefile.am new file mode 100644 index 0000000..6e84e23 --- /dev/null +++ b/doc/it/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = it +KDE_DOCS = kshowmail + diff --git a/doc/it/index.docbook b/doc/it/index.docbook new file mode 100644 index 0000000..a4145b4 --- /dev/null +++ b/doc/it/index.docbook @@ -0,0 +1,523 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +Il Manuale di KShowmail + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +Eggert Ehmke + + + +&FDLNotice; + + + +31/01/2004 +3.1.1 + + + + + + Questo manuale descrive l'utilizzo di KShowmail 3.1.1 + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker + + +
+ + + + +Introduzione + + + + + KShowmail è uno strumento di KDE per monitorare le email su un server POP3. + Possono essere visualizzate sia solo le intestazioni che le email complete senza il bisogno + di scaricarle con il programma di posta. + Le email indesiderate possono essere cancellate direttamente dal server. + La lista delle email visualizzate può essere aggiornata automaticamente + attraverso dei timer configurabili. + I filtri possono essere impostati per segnalare spam e messaggi indesiderati. + I messaggi segnalati dai filtri possono essere eliminati dal server automaticamente . + Puòessere eseguito un suono all'arrivo di nuovi messaggi. + Un menu dei comandi permette di eseguire comandi definiti dall'utente come ad esempio + i comandi dcop per lanciare kmail. + Può essere definito un comando speciale per inviare un email di lamentele contro lo spam. + Sono supportati account multipli. + + + + +Utilizzo di Kshowmail + + + + +Utilizzo generale + + Aggiungi alcuni account nel dialogo di configurazione "Opzioni". Connettiti ad internet. + Ora puoi visualizzare la lista dei messaggi presenti sui server pop2 cliccando sul bottone "Aggiorna". + Tutti gli altri bottoni ed elementi dei menu dovrebbero essere autoesplicativi. + Divertiti! + + + + Scorciatoie da tastiera + + Sono predefinite queste scorciatoie da tastiera: + + F2 + + Visualizza le intestazioni dei messaggi selezionati + + + + F3 + + Visualizza completamente i messaggi selezionati + + + + F5 + + Aggiorna la lista dei messaggi presenti sul server + + + + Shift-F5 + + Forza l'aggiornamento + + + + F10 + + Configura gli account + + + + Del + + Elimina dal server la posta selezionata + + + + Ctrl-C + + Cancella la lista dei messaggi. + (Non verrà cancellato alcun messaggio.) + + + + + + + Filtri + + I filtri possono essere usati per selezionare lo spam conosciuto e altri messaggi indesiderati. + Puoi definire quanti filtri ti pare. + Tali filtri verranno applicati a tutte le email ogni volta che aggiornerai la lista dei messaggi. + + + Nel Dialogo "Filtri" puoi selezionarne lo stato. + Nello stato "Non attivi" tutti i filtri sono disattivati. + Nello stato "Attivi" tutti i filtri sono in funzione. + I messaggi filtrati sono selezionati nella lista dei messaggi e possono essere eliminati manualmente. + Nello stato "Elimina Automaticamente" tutti i messaggi filtrati sono eliminati immediatamente. + Sii prudente quando selezioni questo stato! + Potrebbe essere utile testare prima i nuovi filtri alcune volte nello stato "Attivi". + Nel file ~/.kde/share/apps/kshowmail/kshowmail.log puoi controllare i messaggi che sono stati eliminati automaticamente. + + + + Ogni filtro contiene una o due condizioni che possono essere collegate insieme. + Usando le espressioni regolari è possibile creare delle condizioni estremamente potenti. + In questo programma vengono utilizzate le espressioni regolari delle librerie Qt, + per informazioni dettagliate si può guardare la documentazione della classe KRegExpEditor, + o uno dei numerosi testi presenti su internet riguardanti le espressioni regolari. + + Che cos'è un'espressione regolare? + + + + + Esempi di Espressioni Regolari: + + MS Corporation|Microsoft: sia "MS Corporation" che "Microsoft" saranno riconosciute. + + + (mail|message) delivery: sia "mail delivery" che "message delivery" saranno riconosciute. + + + ms (program )?security: sia "ms security" che "ms program security" saranno riconosciute. + + + [\x0100-\xffff]: tutti i caratteri al di fuori del set di caratteri ASCII saranno riconosciuti (caratteri cinesi e koreani). + + + Questi esempi possono essere combinati a piacere. + + + + + +Parametri da linea di comando + + Puoi fornire attraverso la linea di comando l'account da selezionare. + Se è settata l'opzione -config sulla linea di comando, il dialogo di configurazione partirà immediatamente all'avvio del programma. + Questo può essere utile se è attivata la funzione "Termina in caso di nessun nuovo messaggio". + L'opzione -refresh può essere utilizzata per avviare l'aggiornamento immediatamente all'avvio del programma. + + + + +Programmi esterni + +Per avviare programmi esterni tipo kmail, aggiungi un elemento al menu dei comandi. +I nomi dei comandi sono presenti nel menu Azioni. Se contengono il carattere '&', la lettera seguente +sarà utilizzata come scorciatoia da tastiera. + +I seguenti parametri sono segnaposto e saranno sostituiti dai valori reali: + <user> Nome utente + <passwd> Password + <server> Server + <header> L'intestazione del messaggio sarà copiata in un file temporaneo, qui verrà sostituito il nome del file. + <body> Il corpo del messaggio sarà copiato in un file temporanea, qui verrà sostituito il nome del file. + + Un utilizzo veramente interessante è rappresentato dal comando dcop che premette di richiamare + le funzioni selezionate di altri programmi KDE. + È possibile creare un comando che richiama KMail e scarica i messaggi dal server: + + + dcop kmail KMailIface checkMail + + + Il programma di KDE kdcop è utile per provare le funzioni di altri programmi KDE. + + + +Mandare messaggi di lamentele + + Il comando per invare messaggi di lamentele, è, un comando speciale. + Per mantenere una certa flessibilità, è stato implementato anch'esso come comando esterno. + Suggerisco di usare il programma perl "spam.pl" versione 0.20 o successive di Danel Stenberg. + Può essere scaricato all'indirizzo http://spam.sourceforge.net. + Per farlo partire seguite questi passi: + + + 1. Installate spam.pl in una directory opportuna, diciamo /usr/local/bin. + + + 2. Create i files ~/.spam/friends e ~/.spam/from. + Sono disponibili maggiori dettagli nella documentazione di spam.pl. + + + 3. Create un elemento nel menu dei comandi di kshowmail. + Il nome dell'elemento deve essere "complain" ! + Altrimenti il comando non verrà riconosciuto correttamente. + Inserite questo testo come linea di comando: + + + + spam.pl -d < <body> + + + Ciò provoca che il corpo del messaggio venga rediretto a spam.pl. + + + L'opzione di debug -d dovrebbe essere rimossa successivamente, se sei soddisfatto dei risultati. + Solo dopo verranno effettivamente inviati i messaggi di protesta. + Aggiungi altre opzioni a piacimento. + + + Scegli attentamente gli elementi giusti nel file ~/.spam/friends. + Come minimo dovrebbe essere inserito almeno il dominio locale. + Usate questa funzione a vostro rischio e pericolo ! + + + + Quando clicchi il tasto "Invia email di lamentele", per ogni messaggio + selezionato verranno generati ed inviati immediatamente uno o più messaggi. + Il destinatario di questi messaggi è determinato automaticamente da spam.pl. + Quando l'opzione -d è attivata, verrà visualizzato solo un messaggio di quello che succederebbe. + Per attivare la funzione, rimuovere il flag di debug. + + + Se preferisci un altro programma anti spam, prova a configurarlo in una maniera simile. + Contattami se c'è qualche problema. + + + + + + +Domande e risposte + + + +&reporting.bugs; +&updating.documentation; + + + + +Da aggiungere + + +Da aggiungere. + + + + + + + + + +Riconoscimenti e Licenza + + +&kapp; + + +Copyright del programma 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Hanno contribuito: + + + +Nicolas Vignal nicolas.vignal@fnac.net che ha fornito l'RPM per RedHat +e la traduzione in francese. + + + + +Edgardo Garcia edyx@mindless.com che ha fornito la traduzione in spagnolo. + + + + +Mattias Newzella newzella@swipnet.se che ha fornito la traduzione in svedese. + + + + +Sandor Laza slaza@xs4all.nl who provided the hungarian translation + + + + +Gabriele Postorino g.posto@tin.it who provided the italian translation + + + + +Molti utenti hanno portato avanti molti test e proposto nuove idee +che ora sono parte di kshowmail. +Voglio dire "Grazie" a tutti voi ! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installazione + + +Come ottenere KShowmail + + +L'ultima versione può essere scaricata da: + +http://sourceforge.net/projects/kshowmail +o da +http://freshmeat.net + + + + + +Requisiti + + + + + Sviluppato e testato su SuSE 8.2. + Per usare con successo KShowmail hai bisono di KDE 3.1.x e di Qt 3.1.x + + + + +Puoi trovare la lista dei cambiamenti qui: + +http://sourceforge.net/projects/kshowmail + + + + +Compilazione ed installazione + + +Per compilare ed installare KShwomail sul tuo sistema, digita i seguenti comandi nella cartella +dei sorgenti di KShowmail: + + % ./configure + oppure: + % ./configure --prefix=$KDEDIR + + % make + + come root: + % make install + + Potrebbe essere utile settare la variabile d'ambiende KDEDIR prima di questi passi. + + + + + Dato che KShowmail utilizza autoconf e automake, non dovresti avere problemi nel compilarlo. + Se incappi in qualche problema, per favore fammelo sapere. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/ru/Makefile.am b/doc/ru/Makefile.am new file mode 100644 index 0000000..c8b53ac --- /dev/null +++ b/doc/ru/Makefile.am @@ -0,0 +1,10 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = ru +KDE_DOCS = kshowmail + diff --git a/doc/ru/index.docbook b/doc/ru/index.docbook new file mode 100644 index 0000000..ae32c1f --- /dev/null +++ b/doc/ru/index.docbook @@ -0,0 +1,517 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +Руководство по Kshowmail + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +2004 +2005 +Eggert Ehmke + + + +&FDLNotice; + + + +01/02/2004 +3.1.1 + + + + + +Это руководство описывает использование Kshowmail версии 3.1.1 + + + + + + +KDE +kshowmail +kmail +pop3 +mail checker + + +
+ + + + +Введение + + + + +Kshowmail - KDE-программа для мониторинга почты на POP3-сервере. +Просмотр заголовка и сообщений целиком возможен без загрузки их в почтовый клиент. +Нежелательная почта может быть удалена с сервера. +Интервал опроса серверов может быть изменен в настройках. +Фильтры используеются для пометки спама и нежелательных сообщений. +Помеченные фильтрами сообщения могут быть автоматически удалены. +При получении новой почты возможно воспроизведение звукового сигнала. +A command menu allows user configurable commands like dcop commands to launch kmail. +Командное меню позволяет использовать пользовательские команды (например, вызов kmail через dcop). +Возможно определение специальной команды для отправки жалоб на спам-письма. +Поддерживаются множественные почтовые ящики. + + + + +Использование Kshowmail + + + + +Общие принципы + +Добавьте несколько почтовых ящиков в диалоге "Настройки". Подключитесь к интернету. Теперь вы +можете просмотреть почту, имеющуюся на заданных pop3-серверах, нажатием кнопки "Обновить". +Действие остальных кнопок и пунктов меню должно быть понятно из их названий :) . +Приятной работы! + + + + Клавиатурные комбинации + + Используются следующие клавиатурные комбинации: + + F2 + + Показать заголовки выбранных писем + + + + F3 + + Показать полностью выбранные письма + + + + F5 + + Обновить список писем + + + + Shift-F5 + + Принудительное обновление списка писем + + + + F10 + + Настройки почтовых ящиков + + + + Del + + Удалить выбранные сообщения с сервера + + + + Ctrl-C + + Очистить список сообщений. + (Письма не будут удалены с сервера) + + + + + + + Фильтры + + Фильтры используются для пометки спама и нежелательных сообщений. + Вы можете задать любое количество фильтров, + они будут применены ко всем письмам при каждом обновлении списка сообщений. + + + В диалоге "Фильтры" вы можете указать состояние фильтров - включены, выключены или + настроены на "автоматическое удаление". В последнем режиме все помеченные фильтрами сообщения + будут автоматически удалены с сервера. Пожалуйства, проверяйте свои фильтры перед активацией + данного режима! Возможно, полезным будет предварительное тестирование фильтров во "включенном" + состоянии без непосредственного удаление писем. + В файле ~/.kde/share/apps/kshowmail/kshowmail.log вы можете найти информацию обо всех автоматически + удаленных сообщениях. + + + + Каждый фильтр состоит из одного или двух условий, которые могут быть связаны + друг с другом. Наиболее широкие возможности предоставляет использование регулярных + выражений. Для работы с регулярными выражениями используется библиотека Qt, для их подробного + описания смотрите документацию класса KRegExpEditor или одно из многочисленных руководств по + регулярным выражениям в интернете. + + Что такое регулярное выражение? + + + + + Примеры регулярных выражений + + MS Corporation|Microsoft: соответствует "MS Corporation" и "Microsoft" + + + (mail|message) delivery: соответствует "mail delivery" и "message delivery" + + + ms (program )?security: соответствует "ms security" и "ms program security" + + + [\x0100-\xffff]: соответствует всем символам за пределами ASCII (китайские, корейские символы) + + + Также приведенные шаблоны могут совмещены друг с другом.. + + + + + +Параметры командной строки + +Вы можете указать в командной строке требуемый почтовый ящик. +При указании опции -config в командной строке, будет немедленно запущен конфигурационный диалог.. +Это может быть полезно, если выбрана функция "Выход, если нет новой почты". +Параметр -refresh может быть использовать для немедленного начала проверки почты после старта. + + + +Внешние программы + +Для запуска внешней программы (например, kmail), добавьте пункт в командное меню. +Названия команд показываются в меню "Действия". Если название содержит символ '&', следующая за ним буква будет +использована как горячая клавиша для данного пункта. + + Следующие параметры заменяются на их действительные значения: + <user> Имя пользователя + <passwd> Пароль + <server> Сервер + <header> Заголовки сообщения будут скопированы во временный файл, имя которого будет передано в данном параметре. + <body> Тело сообщения будет скопировано во временный файл, имя которого будет передано в данном параметре. + + Очень эффективным является использование DCOP-команд, которые позволяет вызывать выбранные функции + других KDE-программ. + Вы можете создать команду, которая вызовет KMail для получения почты с сервера: + + + dcop kmail KMailIface checkMail + + + Программа kdcop полезна для исследования функций другий KDE-программ. + + + + Отправка писем-жалоб на спам + + Команда для отправки писем-жалоб является особенной командой. + Для большей гибкости, она была реализована как внешняя команда. + Рекомендуется использовать программу на perl "spam.pl" версии 0.20 или выше, ее автор - Daniel Stenberg. + Загрузить ее можно со страницы http://spam.sourceforge.net. + Чтобы настроить spam.pl для работы с kshowmail, следуйте инструкциям: + + + 1. Установите spam.pl в соответствующий каталог, например /usr/local/bin. + + + 2. Создайте файлы ~/.spam/friends и ~/.spam/from. + Подробности - в документации spam.pl. + + + 3. Создайте пункт в командном меню kshowmail. + Название пункта должно быть указано в виде "complain"! + В противном случае команда не будет распознана. + Введите данный текст как командную строку: + + + spam.pl -d < <body> + + + В результате тело сообщения будет передано spam.pl. + + + Отладочный параметр -d может быть удален впоследствие, когда вы будет удовлетворены полученными результатами. + Только после этого письма со спам-жалобами будет реально отправляться. + Также вы можете добавить прочие необходимые вам опции. + + + Внимательное заполняйте файл ~/.spam/friends. + Как минимум, в нем должен быть указан ваш локальный домен. + + + После нажатия кнопки "Отправить спам-жалобы", для каждого выделенного сообщения будут созданы и немедленно отправлены + одно или несколько писем со спам-жалобами. + Получатель писем определяется spam.pl. + Пока опция -d присутствует, будет только показано сообщение с описанием предполагаемых действий. + Чтобы активировать отправку, удалите отладочный флаг. + + + Если вы предпочитаете использовать другие анти-спам программы, попытайтесь настроить их аналогичным образом. Вы можете + связаться с разработчиками, если у вас возникнул какие-либо затруднения. + + + + + +Вопросы и ответы + + + +&reporting.bugs; +&updating.documentation; + + + + +в следующей версии + + +в следующей версии + + + + + + + + + +Авторы и лицензия + + +&kapp; + + +Program copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Contributors: + + + +Nicolas Vignal nicolas.vignal@fnac.net who provided RPMs for RedHat, +and the french translation. + + + + +Edgardo Garcia edyx@mindless.com who provided the spanish translation + + + + +Mattias Newzella newzella@swipnet.se who provided the swedish translation + + + + +Sandor Laza slaza@xs4all.nl who provided the hungarian translation + + + + +Gabriele Postorino g.posto@tin.it who provided the italian translation + + + + +Oleg Ivanov saruman@unigsm.com who provided the russian translation + + + + +Много пользователей тестировали программу и предлагали различные идеи, которые +теперь вошли в kshowmail. Авторы благодарят их всех! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Установка + + +Как загрузить Kshowmail + + +Последнюю версию можно найти на странице + +http://sourceforge.net/projects/kshowmail + + + + + +Системные требования + + + + + Разработавалась и тестировалась на SuSE 8.2 и Gentoo Linux. + Для использования KShowMail необходим KDE 3.4.x. + + + + +Список изменений можно найти на странице + +http://sourceforge.net/projects/kshowmail + + + + +Компиляция и установка + + + Чтобы скомпилировать и установить Kshowmail на вашей системе, зайдите в каталог с распакованным + исходным кодом и наберите: + + % ./configure + или: + % ./configure --prefix=$KDEDIR + + % make + + как пользователь root: + % make install + + Может оказать полезным установить переменную окружения KDEDIR перед этим. + + + + Поскольку Kshowmail использует autoconf и automake, компиляция не должна вызвать проблем на вашей системе. + При их возникновении, пожалуйства, свяжитесь с разработчиками. + + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/doc/sv/Makefile.am b/doc/sv/Makefile.am new file mode 100644 index 0000000..d2baa55 --- /dev/null +++ b/doc/sv/Makefile.am @@ -0,0 +1,9 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = index.docbook + +####### kdevelop will overwrite this part!!! (end)############ + +KDE_LANG = sv +KDE_DOCS = kshowmail diff --git a/doc/sv/index.docbook b/doc/sv/index.docbook new file mode 100644 index 0000000..1925365 --- /dev/null +++ b/doc/sv/index.docbook @@ -0,0 +1,370 @@ + +Kshowmail'> + + + + + + +]> + + + + + + + + + + + +Användarmanual för Kshowmail + + + +Eggert +Ehmke + +
eggert.ehmke@berlin.de
+
+
+ +Allistar +Melville + +
allistar@silvermoon.co.nz
+
+
+
+ + + + +2000 +2001 +2002 +2003 +Eggert Ehmke + + + +&FDLNotice; + + + +02/20/2003 +3.0.4 + + + + + +Den här användarmanualen behandlar Kshowmail version 3.0.4 + + + + + + +KDE +kshowmail +kmail +pop3 +brevkontrollant + + +
+ + + + +Introduktion + + + + +Kshowmail är ett KDE-verktyg för att bevaka brev på en POP3-server. +Brevhuvuden och hela brev kan visas utan att ladda ned dem till den lokala e-postklienten. +Otrevliga brev kan direkt tas bort från servern. +Listan på breven som visas kan uppdateras med inställningsbara tidtagare(timers). +Ett ljud kan spelas upp om nya brev anländer. +En kommandomeny tillåter användaranpassade kommandon som till exempel fetchmail eller sendmail. +Ett specialkommando kan definieras för att skicka klagomålsbrev mot oönskad e-post(spam). +Flera konton stöds. + + + + +Att använda Kshowmail + + + + +Generell användning + +Lägg till några konton i konfigurationsdialogrutan "Inställningar". Anslut till Internet. Nu kan du lista breven på +pop3-servern genom att trycka på knappen "Uppdatera". Alla andra knappar och menyposter är +självförklarande. +Delete-tangenten kan användas för att ta bort brev. +Ha så kul! + + + +Kommandoradsparametrar + +Du kan tillhandahålla det valda kontot på kommandoraden. +Om alternativet -config anges på kommandoraden så startas omedelbart konfigurationsdialogrutan. +Det här kan vara användbart om funktionen "Avsluta Kshowmail om inga nya brev" är aktiverad. +Alternativet -refresh kan användas för att omedelbart starta uppdateringsprocessen. + + + +Externa program + +För att starta externa program som till exempel fetchmail, lägg till en post i Kommandon-menyn. +Kommandonamn visas i menyn Åtgärder. Om de innehåller tecknet "&", kommer följande tecken att +användas som tangentbordsgenväg. + + +Följande parametrar är alias och kommer att ersättas med de faktiska värdena: + <user> Användarnamn + <passwd> Lösenord + <server> Server + <header> Brevhuvudet kommer att kopieras till en temporär fil, namnet på den här filen kommer att ersättas här. + <body> Brevkroppen kommer att kopieras till en temporär fil, namnet på den här filen kommer att ersättas här. + + + Att skicka klagomålsbrev + +Kommandot för att skicka klagomålsbrev är ett speciellt kommando. +För att behålla flexibilitet så har också det blivit implementerat som ett externt kommando. +Jag föreslår att perl-programmet "spam.pl" version 0.20 eller högre av Daniel Stenberg används. +Det kan hämtas på http://spam.sourceforge.net. +För att används det med Kshowmail, följ dessa steg: + +1. Installera spam.pl i en passande katalog, t ex /usr/local/bin. +2. Skapa filerna ~/.spam/friends och ~/.spam/from. +Fler detaljer finns i dokumentationen till spam.pl. +3. Skapa en post i Kshowmails kommandomeny. +Namnet på psoten måste vara "complain"! +Annars kommer inte kommandot att kännas igen. +Ange denna text som en kommandorad: + spam.pl -d < <body> + Det här får brevkroppen att skickas till spam.pl. + + Felsökningsalternativet -d kan senare tas bort om du är nöjd med resultatet. +Endast då kommer klagomålsbrev att skickas. +Lägg till fler alternativ om du så önskar. + +Var försiktig så att du väljer rätt poster i ~/.spam/friends-filen. +Åtminstone ska den lokala domänen skrivas in här. +Använd den här funktionen på egen risk! + + +När du trycker på knappen "Skicka klagomål" kommer det att för varje valt brev genereras +ett eller flera klagomålsbrev som omedelbart kommer att skickas iväg. +Mottagaren av de här breven bestäms av spam.pl. +Så länge som alternativet -d är aktiverat, kommer endast ett meddelande att visas för att visa vad som +egentligen skulle ha hänt. För att aktivera funktionen måste du först ta bort felsökningsalternativet. + + Om du föredrar att använda andra program för att hantera oönskad e-post, försök då att ställa in +dem på ett liknande sätt. Kontakta mig om du stöter på problem. + + + + + +Frågor och Svar + + + +&reporting.bugs; +&updating.documentation; + + + + +Finns ej för tillfället + + +Finns ej för tillfället + + + + + + + + + +Tack till och licens + + +&kapp; + + +Programmet copyright 2000-2003 Eggert Ehmke eggert.ehmke@berlin.de + + +Personer som bidragit: + + + +Nicolas Vignal nicolas.vignal@fnac.net som tillhandahöll RPM:er för RedHat +och den franska översättningen. + + + + +Edgardo Garcia edyx@mindless.com som tillhandahöll den spanska översättningen + + + + +Mattias Newzella newzella@swipnet.se som tillhandahöll den svenska översättningen + + + + +Många användare som gjorde tester och kom med många idèer som nu är implementerade i Kshowmail. +Tack till alla er! + + + + + + + +&underFDL; + + + + +&underGPL; + + + +Installation + + +Att erhålla Kshowmail + + +Den aktuella versionen kan hittas på + +http://sourceforge.net/projects/kshowmail eller på +http://freshmeat.net + + + + + +Krav + + + + +För att kunna använda Kshowmail måste du ha KDE 3.1.x. + + + + +Du kan hitta en lista över ändringar på + +http://sourceforge.net/projects/kshowmail + + + + +Kompilering och installation + + +För att kompilera och installera Kshowmail på ditt system, ange följande i baskatalogen på Kshowmail-distributionen: + +% ./configure +% make +% make install + + + +Eftersom Kshowmail använder autoconf och automake bör du inte ha några problem med att kompilera det. +Om du skulle stöta på problem var då vänlig och rapportera det till mig. + + + + + +&documentation.index; +
+ + + + + + + + + + + + + + diff --git a/kshowmail.lsm b/kshowmail.lsm new file mode 100644 index 0000000..5f84dc4 --- /dev/null +++ b/kshowmail.lsm @@ -0,0 +1,14 @@ +Begin3 +Title: Kshowmail +Version: 2.1 +Entered-date: +Description: +Keywords: +Author: Eggert Ehmke +Maintained-by: Eggert Ehmke +Primary-site: +Home-page: http:// +Original-site: +Platforms: Linux and other Unices +Copying-policy: GNU Public License +End diff --git a/kshowmail.spec b/kshowmail.spec new file mode 100644 index 0000000..f810ee6 --- /dev/null +++ b/kshowmail.spec @@ -0,0 +1,120 @@ +# define for SuSE + +%if %{_vendor} == redhat +%define suse_version 0 +%endif +%if %{_vendor} == Mandriva +%define suse_version 0 +%endif + +%define su10 0 +%if %{suse_version} == 1000 || %{suse_version} == 1010 || %{suse_version} == 1020 || %{suse_version} == 1030 +%define su10 1 +%endif +%define su11 0 +%if %{suse_version} == 1100 +%define su11 1 +%endif +%define su9 0 +%if %{suse_version} == 900 || %{suse_version} == 910 || %{suse_version} == 920 || %{suse_version} == 930 +%define su9 1 +%endif + +%define _prefix /usr +%define configure_opts %nil + +Summary: POP mail checker for KDE +Name: kshowmail +Version: 3.3.1 +Release: 1 +License: GPL +Vendor: Eggert Ehmke +Url: http://www.sourceforge.net/projects/kshowmail + +Packager: D. Scott Barninger +Group: Mail +Source: http://prdownloads.sourceforge.net/kshowmail/%{name}-%{version}.tar.gz +#Patch: %{name}-%{version}-patch +BuildRoot: /var/tmp/kshowmail-root + +%if %{su10} || %{su11} +Requires: qt3 >= 3.3, kdelibs3 >= 3.4 +BuildRequires: qt3-devel >= 3.3, kdelibs3-devel >= 3.4, kdepim3-devel +%else +Requires: qt >= 3.2, kdelibs >= 3.1 +BuildRequires: qt-devel >= 3.2, kdelibs-devel >= 3.1, kdepim3-devel +%endif + +%description +kShowmail is a KDE tool for watching for email on POP3 servers. +Headers and complete email messages can be displayed, and email can +be deleted without downloading. The information can be refreshed via timers, +and a sound can be played when new email arrives. External programs like +fetchmail/sendmail can be called via configurable menu entries or if new mail +arrives. Spam complaints can also be sent via configurable menus. + +# SuSE turns off stripping of binaries by default. In order to get +# stripped packages we must generate debug package. RedHat and Mandriva +# turn debug packages on by default but strip binaries regardless. +%if %{su9} || %{su10} +%debug_package +%endif + +%prep +%setup +#%patch -p1 + +./configure %{configure_opts} + +%build + +make + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +make install DESTDIR=$RPM_BUILD_ROOT + +cd $RPM_BUILD_ROOT +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > $RPM_BUILD_DIR/file.list.kshowmail +find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.kshowmail +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.kshowmail + +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" +rm -rf $RPM_BUILD_DIR/kshowmail-%{version} +rm -rf ../file.list.kshowmail + + +%files -f ../file.list.kshowmail +%doc AUTHORS ChangeLog COPYING README ReleaseNotes + +%changelog +* Sun Apr 20 2008 D. Scott Barninger +- 3.3.0 release, fix if tag for debug package +* Sun Feb 03 2008 D. Scott Barninger +- add debug package to strip suse +* Sat Oct 27 2007 +- add SuSE 10.3 +* Fri Jul 06 2007 +- added docs files +* Sat Apr 21 2007 +- remove parallel build setup +* Sat Apr 14 2007 +- remove all configure options so 64 bit will work +- set prefix to /usr +- move kdepim3-devel to buildrequires +* Fri Mar 30 2007 +- add additional 64 bit configure options +* Sun Mar 18 2007 +- add suse platform detection +- change make install-strip target to make install +* Sun Feb 25 2007 +- add kdepim-devel build requirement +* Sun Dec 17 2006 +- add 64 bit support +* Tue Jan 24 2006 +- patch showrecordelem.cpp for SuSE 10.0 build +- define SuSE prefix to /opt/kde3 +* Sat Sep 13 2003 +- initial spec file modified from original by ian geiser +- for RedHat diff --git a/kshowmail/AlertDlg.ui b/kshowmail/AlertDlg.ui new file mode 100644 index 0000000..506a530 --- /dev/null +++ b/kshowmail/AlertDlg.ui @@ -0,0 +1,114 @@ + +AlertDlg + + + AlertDlg + + + + 0 + 0 + 271 + 127 + + + + KShowmail + + + + unnamed + + + + m_ButtonIgnore + + + Ignore + + + + + m_ButtonOk + + + Show main window + + + + + PixmapLabel2 + + + image0 + + + true + + + + + QLabel_1 + + + + 14 + 1 + 1 + + + + New mail + + + + + QLabel_2 + + + + 14 + 1 + 1 + + + + has arrived ! + + + + + + + 789ced96db4e23471086ef790a8bba4351ade7e81945b98031272fc7656177897231278319836db0394579f7d454550ff6d86683b41b4511db5bb43f4fd3d57fffd53d7c586b7c3dda6fac7d58b91bc7e35eda482fe3dbc65a36b9be7efafd8fdffe5c59758306fdb72cb761affeb2b27a3c6ea48d83c14d5e02b609a0c9ff98ed92ada6955a41c9901bb6e5f9a9b0dd543e17760261489903331eb292ed267d239c289bf97c61331f9c289bf191b01bb8168fdf2fd9b11c5d2f7c346c87fcbc63d8e1f1f0593970f83998dfd7f96058b24be3953bc2aed98f436593df628e9da0c9fb8307257bb69b7abcb9782bec35953f2987c2f024dc0a5b0ef34838b0dc9879c3b08edf638e7dc3cf25fbb6edaade96b01be8f35de16afc99615fd6b3a96cf23f32c7663fb12c0e68394e53c7df0bbbaa0706c2d5efdf08b73c1d7f673890e7a7caa1f27ac981e3653eebc51361df12bf90fd0a5d3f54ffdac2a115bbcc7de1384e84797d611ae7f21cb91e62b75aef8370188632fe4a388e538fb9104e6c9dbf279c1ade14ce6dc987ec47e2ba81aed7136e197fb799b340f5e24038b7251f364b4e3de33f4e84533b93e743655d1f8e8433bbeb3347c2d57c41c9991758eac78e709c8729f35838f5938cc7f7853393afa79c2b17c2b9797ea99c67725f6c19ce653d0fc25d5b18b8feb3dc577f41c6e7a11724cc87c2b1a77e39caea1fa0b0f103bf29c7525f3031acfe5f08a7b1eabb16ce0ce7c2b9591fd767eed37d24e7f748b895e9fe1d0b937fb2de583913467d1e5a7a1f7c5136faba86a5def04638337e5e0957fb9b1ad6fdd4dfefdaa9acffc2b08ecf94631d0fca5da90fe0fb88ccf13c395f1bcaa19ecf4761d22beb15fdb49f5a2f7c5f757d735fe393b0e36abdbbc2aeabfacf94cdfdf85539d5fbec5ad86b0a6328ec9bfb6247d8ec3f26c25d53efb1b2ea43beffbaddea7db52b5cbd5f2e2b167fd795cdfb0c84cdfb01b785cd7a8fc73fb7bde778cff19ee3bf900301e31f1d7339124c31c39c22a596f3cf14bb14171497143d8e2b8a62aaef735c53dc500c28861c23ca728b77351d098ea94d34ee354bd91eaa78c4277ca6b68e1b94c1b47e1591e618d127c03665d99cca11bfaa618bfb6d9ebf873bdcefb28e624a43841dfc887b14fbaca38d0778b840c798669318cf6978e656d067f97434a5a154d0c763caf6094ff033a929739ccee448bea3e10acf74e62f34a37cfa3ae34344ed1b9ed32e37d1521d764d87acfd5e75dcab2ad150cce870f4933ba5417478e853961606eac7ac8e173f8c86172d575a47219e01620f407240cc1aa6fc8004cf21a5c864af209ff3235dd05efc28380ae8aa8a75ad296911cd1a55fdf08d7ecc9c0bb8804bcde12c3917436efd257ed41af4e0aad400e5eacba0bd876bd5f0a5565366fd91e62896f851d7d0861b18d01a47d40f61447ccb3edcc178e65c88e303d660a258e847dd87a21e30610d8f3367dbd4d4b486653a92f97301035a3bf9401aeee1013b544fbbf048fc201a6058d3307c831f5a4bf0844378a20c7d1a1d41b94bebf4a9800dca52f611b4e7bca080cda57ed4cf76af3a171cb045f755edbb053e488b5ef563ea3c900e52401515d1ae44b00d3bb47bec0355c2036e72dfa1756fd0b8ce8c1ffd257ed4efa71efb31a29d296054cec635d6865d9a7b041dee3f963db53de8e8ec13fe39307ec07e4d47fd4c57679b341d704d850b6ba95653d37ecce48817dc4fe65df7720b3ec3e1d4b998f7a1cc70445a2a3fe6742cbc9f66eea86738aeeea785e7a2d440d15fa82359f2ded6905b0a3e2dbd9fc469f3fd3ff7a3d0be2f5a48c3cbfbfbfbfd223fe087b79a1f94a5fd13da692dc71ddec2c9a24627c9a6d1f9db7bf83c9be3780ca7704a7f112d6f87af35d85fd8cefeddbf77df73bce778cff1bfcef1d7af2b7f0349d57768 + + + + + m_ButtonIgnore + clicked() + AlertDlg + reject() + + + m_ButtonOk + clicked() + AlertDlg + accept() + + + m_ButtonOk + clicked() + AlertDlg + slotOk() + + + + m_ButtonOk + m_ButtonIgnore + + + slotOk() + + + diff --git a/kshowmail/Makefile.am b/kshowmail/Makefile.am new file mode 100644 index 0000000..bf6eda0 --- /dev/null +++ b/kshowmail/Makefile.am @@ -0,0 +1,60 @@ +####### kdevelop will overwrite this part!!! (begin)########## +bin_PROGRAMS = kshowmail + +## INCLUDES were found outside kdevelop specific part + +kshowmail_SOURCES = AlertDlg.ui alertdialog.cpp configelem.cpp configlist.cpp \ + decodeRFC2047.cpp encryption.cpp filteritem.cpp filteritemcriteria.cpp filterlog.cpp \ + filterlogentry.cpp headerfilter.cpp kfeedback.cpp kshowmail.cpp kshowmaildoc.cpp \ + kshowmaildock.cpp kshowmailfeedback.cpp kshowmailview.cpp kwalletaccess.cpp main.cpp \ + senderlistfilter.cpp serverdialog.cpp showheaderdialog.cpp showlistviewitem.cpp \ + showmaildialog.cpp showrecord.cpp showrecordelem.cpp uniqueapp.cpp filterlogview.cpp \ + filterlogviewdeleteditem.cpp filterlogviewmoveditem.cpp +kshowmail_LDADD = $(LIB_KUTILS) -lmimelib $(LIB_KFILE) $(LIB_KDEUI) \ + $(LIB_KDECORE) $(LIB_QT) $(LIBSOCKET) + + +EXTRA_DIST = main.cpp kshowmail.cpp kshowmail.h kshowmaildoc.cpp kshowmaildoc.h commandentry.cpp commandentry.h kshowmailview.cpp kshowmailview.h OptionDlg.ui OptionDlg.h optiondialog.cpp optiondialog.h ServerDlg.ui serverdialog.cpp serverdialog.h EditDlg.ui editdialog.cpp editdialog.h commanddialog.cpp commanddialog.h CommandDlg.ui commandlist.cpp commandlist.h CommandEntryDlg.ui commandentrydialog.cpp commandentrydialog.h configelem.cpp configelem.h kshowmaildock.cpp kshowmaildock.h configlist.cpp configlist.h AlertDlg.ui alertdialog.cpp alertdialog.h uniqueapp.cpp uniqueapp.h showrecordelem.cpp showrecordelem.h showrecord.cpp showrecord.h kshowmail.desktop decodeRFC2047.h decodeRFC2047.cpp showlistviewitem.cpp showlistviewitem.h kfeedback.cpp kfeedback.h kshowmailfeedback.cpp filter.cpp filter.h filterelem.cpp filterelem.h filterdialog.cpp filterdialog.h FilterDlg.ui FilterEntryDlg.ui filterentrydialog.cpp filterentrydialog.h filterlist.cpp filterlist.h logger.cpp logger.h + + +####### 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. + +# set the include path for X, qt and KDE +INCLUDES = $(all_includes) + +METASOURCES = AUTO + +# the library search path. +kshowmail_LDFLAGS = $(all_libraries) $(KDE_RPATH) + +rcdir = $(kde_datadir)/kshowmail +rc_DATA = kshowmailui.rc + +messages: rc.cpp + 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`; \ + if test -n "$$LIST"; then \ + $(XGETTEXT) $$LIST -o $(podir)/kshowmail.pot; \ + fi + +noinst_HEADERS = constants.h encryption.h filteritem.h filteritemcriteria.h \ + filterlog.h filterlogentry.h headerfilter.h kshowmail.desktop kwalletaccess.h \ + senderlistfilter.h showheaderdialog.h showmaildialog.h types.h filterlogview.h \ + filterlogviewdeleteditem.h filterlogviewmoveditem.h + +shelldesktopdir = $(kde_appsdir)/Internet +shelldesktop_DATA = kshowmail.desktop + +KDE_ICON = kshowmail +SUBDIRS = kcmconfigs diff --git a/kshowmail/alertdialog.cpp b/kshowmail/alertdialog.cpp new file mode 100644 index 0000000..b80f976 --- /dev/null +++ b/kshowmail/alertdialog.cpp @@ -0,0 +1,39 @@ +/*************************************************************************** + alertdialog.cpp - description + ------------------- + begin : Sun Nov 4 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "alertdialog.h" + +AlertDialog::AlertDialog(QWidget *parent, const char *name ): + AlertDlg(parent,name,true) +{ + // position the dialog at the upper left corner of the main window. + // if the main window is iconized, the last position on screen is used. + setGeometry (parent->x (), parent->y (), width (), height ()); + + // now show the dialog + show (); +} + +AlertDialog::~AlertDialog() +{ +} + +void AlertDialog::slotOk () +{ + emit signalOk (); +} + diff --git a/kshowmail/alertdialog.h b/kshowmail/alertdialog.h new file mode 100644 index 0000000..ba1cb2b --- /dev/null +++ b/kshowmail/alertdialog.h @@ -0,0 +1,40 @@ +/*************************************************************************** + alertdialog.h - description + ------------------- + begin : Sun Nov 4 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 ALERTDIALOG_H +#define ALERTDIALOG_H + +#include +#include "AlertDlg.h" + +/** + *@author Eggert Ehmke + */ + +class AlertDialog : public AlertDlg +{ + Q_OBJECT +public: + AlertDialog(QWidget *parent=0, const char *name=0); + ~AlertDialog(); +public slots: + void slotOk (); +signals: + void signalOk (); +}; + +#endif diff --git a/kshowmail/configelem.cpp b/kshowmail/configelem.cpp new file mode 100644 index 0000000..9941c75 --- /dev/null +++ b/kshowmail/configelem.cpp @@ -0,0 +1,1759 @@ +/*************************************************************************** + ConfigElem.cpp - description + ------------------- + begin : Tue May 9 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "configelem.h" + +int const ConfigElem::continueShowHeaders( 0 ); +int const ConfigElem::cancelShowHeaders( 1 ); + + +ConfigElem::ConfigElem( ) : QObject() +{ + //initialize account + init(); + + //set default values + m_url.setProtocol( "pop3" ); + m_url.setPort( 110 ); + m_bActive = false; + appConfig = NULL; + m_strAccount = ""; +} + +ConfigElem::ConfigElem( ConfigList* config ) : QObject() +{ + //initialize account + init(); + + m_url.setProtocol( "pop3" ); + m_url.setPort (110); + + m_bActive = false; + + appConfig = config; + +} + +ConfigElem::ConfigElem( ConfigElem* pElem ) : QObject() +{ + //initialize account + init(); + + //set active by default + m_bActive = pElem->isActive(); + + //copy some interesting stuff from the sample + //the url object contains all necessary information about the server + m_strAccount = pElem->getAccountName(); + m_url = pElem->getURL(); + appConfig = pElem->appConfig; + +} + +ConfigElem::ConfigElem( ConfigList* config, const QString& account ) : QObject() +{ + //initialize account + init(); + + //set account name + m_strAccount = account; + + //deactivate it by default + m_bActive = false; + + //set the pointer to the general app configuration + appConfig = config; +} + +void ConfigElem::init( ) +{ + //initialize timeout timer + pop3Timer = new QTimer( this ); + connect( pop3Timer, SIGNAL( timeout() ), this, SLOT( slotTimeout() ) ); + + //state is idle + state = AccountIdle; + + //create new empty mail list + m_pshowrecord = new ShowRecord(); + + //the account has no appropriate account list view item yet + m_pViewItem = NULL; + + //set default values + PasswordStorage = DEFAULT_ACCOUNT_PASSWORD_STORAGE; + filterApplied = false; + deletionPerformedByFilters = false; + refreshPerformedByFilters = false; + downloadActionsInvoked = false; + + //initialize counters + moveCounter = 0; + nmbDeletedMailsLastRefresh = 0; + nmbDeletedMailsLastStart = 0; + nmbMovedMailsLastRefresh = 0; + nmbMovedMailsLastStart = 0; + nmbIgnoredMails = 0; +} + + +ConfigElem::~ConfigElem() +{ + // do not delete m_pshowrecord here +} + +void ConfigElem::saveOptions( QDomDocument& doc, QDomElement& parent ) +{ + //get application config + KConfig* config = KApplication::kApplication()->config(); + + //save the active state + config->setGroup( getAccountName() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, m_bActive ); + config->sync(); + + //save the stored mails inside this account + parent.setAttribute( ATTRIBUTE_ACCOUNT_NAME, m_strAccount ); + m_pshowrecord->saveOptions( doc, parent ); +} + +void ConfigElem::readStoredMails( QDomElement& parent ) +{ + //get mails + m_pshowrecord->readStoredMails( parent ); +} + + +int ConfigElem::count() +{ + return m_pshowrecord->count(); +} + +bool ConfigElem::isActive( ) const +{ + return m_bActive; +} + +void ConfigElem::setActive( bool active ) +{ + m_bActive = active; +} + +QString ConfigElem::getAccountName( ) const +{ + return m_strAccount; +} + +void ConfigElem::setAccountName( QString name ) +{ + if( name != NULL ) + m_strAccount = name; +} + +QString ConfigElem::getPassword( ) const +{ + return m_url.pass(); +} + +void ConfigElem::setPassword( const QString& password ) +{ + m_url.setPass( password ); +} + +KURL ConfigElem::getURL( ) const +{ + return m_url; +} + +bool ConfigElem::hasPassword( ) const +{ + return m_url.hasPass(); +} + +void ConfigElem::setListViewItem( QListViewItem* item ) +{ + m_pViewItem = item; +} + +QListViewItem * ConfigElem::getListViewItem( ) +{ + return m_pViewItem; +} + +bool ConfigElem::isSelected( ) const +{ + if( m_pViewItem == NULL ) + + return false; + + else + + return m_pViewItem->isSelected(); +} + +void ConfigElem::clearMailList( ) +{ + if( m_pshowrecord == NULL ) + //there is no mail list yet, create a one + m_pshowrecord = new ShowRecord; + else + //clear the existing mail list + m_pshowrecord->clear(); +} + +void ConfigElem::setHost( const QString& host ) +{ + m_url.setHost( host ); +} + +void ConfigElem::setProtocol( const QString& protocol ) +{ + m_url.setProtocol( protocol ); +} + +void ConfigElem::setPort( unsigned short int port ) +{ + m_url.setPort( port ); +} + +void ConfigElem::setUser( const QString & user ) +{ + m_url.setUser( user ); +} + +QString ConfigElem::getUser( ) const +{ + return m_url.user(); +} + +QString ConfigElem::getHost( ) const +{ + return m_url.host(); +} + +void ConfigElem::deleteSelectedMails( ) +{ + //return if this account has no selected mails or + //the account is not idle or the account is not active + if( !m_pshowrecord->hasSelectedMails() || state != AccountIdle || !isActive() ) + { + emit sigDeleteReady( m_strAccount ); + return; + } + + //check whether we have a password for this account + //if not, ask for it + //return when no password is available + if( !assertPassword() ) + { + emit sigDeleteReady( m_strAccount ); + return; + } + + //get the numbers of all selected mails + MailsToDelete = m_pshowrecord->getSelectedMails(); + if( MailsToDelete.empty() ) + { + kdError() << "ConfigElem::deleteSelectedMails (Account " << m_strAccount << "): The account has selected mails to delete but ShowRecord::getSelectedMails has returned an empty list." << endl; + emit sigDeleteReady( m_strAccount ); + return; + } + + //set account state + state = AccountDeleting; + + //start the deleting of all mails in MailsToDelete + deleteNextMail(); +} + +bool ConfigElem::assertPassword( bool force ) +{ + //is a password stored? + if ( !hasPassword() || force ) + { + //no password found, we will ask the user! + //set normal cursor + while( QApplication::overrideCursor() ) + QApplication::restoreOverrideCursor(); + + QCString password; //for the password dialog to store the password + int result = KPasswordDialog::getPassword( password, i18n( "Please type in the password for %1" ).arg( getAccountName() ) ); + + //set waiting cursor + QApplication::setOverrideCursor( Qt::waitCursor ); + + //let's look, what the user has done :o) + if( result == KPasswordDialog::Accepted ) + { + //the user has clicked OK in the password dialog + //store the password + setPassword( password ); + + //save password in file or KWallet + KConfig* config = KApplication::kApplication()->config(); + config->setGroup( getAccountName() ); + + if( PasswordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ) + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, crypt( m_url ) ); + else + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null ); + + if( PasswordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + KWalletAccess::savePassword( getAccountName(), m_url.pass() ); + + config->sync(); + + //emit configuration changed signal + emit ( sigConfigChanged() ); + + //tell we have a password + return true; + } + else + //the user has clicked Cancel in the password dialog; we don't have a password + return false; + } + else + //we have already a password for this account + return true; + +} + +void ConfigElem::deleteNextMail( ) +{ + //if the list of mails to delete is empty, finalize the deletion and return + if( MailsToDelete.empty() ) + { + if( deletionPerformedByFilters ) + { + applyFiltersDeleted(); + } + else + { + commitDeletion(); + } + return; + } + + //start job + startKIOJob( QString( "/remove/%1" ).arg( *MailsToDelete.begin() ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotMailDeleted( KIO::Job* ) ) ); +} + +void ConfigElem::slotMailDeleted( KIO::Job* job ) +{ + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error is occured, the deletion will be canceled + //or will ask for a new password + if( job->error() == KIO::ERR_COULD_NOT_LOGIN ) + { + //login failed, ask for a new password + job->showErrorDialog(); + bool res = assertPassword( true ); + if( res == false ) + { + //we have not got a new password; cancel delete + if( deletionPerformedByFilters ) + { + applyFiltersDeleted(); + } + else + { + slotFinalizeDeletion( NULL ); + } + return; + } + //if we have got a new password, it jumps to the end of the if-statement + } + else if( job->error() != 0 ) + { + //unknown error, show message and cancel delete + job->showErrorDialog(); + if( deletionPerformedByFilters ) + { + applyFiltersDeleted(); + } + else + { + slotFinalizeDeletion( NULL ); + } + return; + } + else + { + //operation was successful + //remove the deleted mail from the internal mail list + m_pshowrecord->removeMail( *MailsToDelete.begin() ); + + //remove the first item of the list of mails to delete + MailsToDelete.remove( MailsToDelete.begin() ); + + //if the list of mails to delete is empty, finalize the deletion and return + if( MailsToDelete.empty() ) + { + if( deletionPerformedByFilters ) + { + applyFiltersDeleted(); + } + else + { + commitDeletion(); + } + return; + } + } + + //delete next mail in list + deleteNextMail(); + + +} + +void ConfigElem::slotFinalizeDeletion( KIO::Job* ) +{ + //stop timeout time + pop3Timer->stop(); + + //set account state to idle + state = AccountIdle; + + //emit signal to report the deletion is ready + emit sigDeleteReady( m_strAccount ); +} + +void ConfigElem::startKIOJob( const QString & path ) +{ + KIO::MetaData options; //options for the pop3 job + + //set options + options.insert( "progress", "off" ); + options.insert( "pipelining", "off" ); + + if( useTLS ) + options.insert( "tls", "on" ); + else + options.insert( "tls", "off" ); + + //Where is secure login? + //I have decided against a configurable secure login because the used POP3 kioslave + //always tries to login with APOP, if the server has sent a timestap (inside of the greeting string) for this authentification type. + //It just follows the auth-metadata, if the server doesn't support APOP (no timestamp inside of the greeting string). + //But I think, there is no server, which support a SASL authentification without also provide APOP. + //Ulrich Weigelt + + //set the given command and parameters + m_url.setPath( path ); + + //print debug message + kdDebug() << "ConfigElem::startKIOJob: start KIO job on URL " << m_url.url() << endl; + + //start the job and get handle to it + pop3Job = KIO::get( m_url, false, false ); + + //put options to the job + pop3Job->addMetaData( options ); + + //start timeout timer + pop3Timer->start( getTimeoutTime() * 1000, true ); +} + +Types::AccountState_Type ConfigElem::getState( ) +{ + return state; +} + +void ConfigElem::commitDeletion( ) +{ + //start job to commit + startKIOJob( QString( "/commit" ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeDeletion( KIO::Job* ) ) ); +} + +unsigned int ConfigElem::getTimeoutTime( ) +{ + //return default time, if the configuration is not accessable + if( appConfig == NULL ) + return DEFAULT_TIMEOUT_TIME; + + //get time from configuration + unsigned int time = appConfig->getTimeoutTime(); + + //take minimum time, if get time is less + if( time < MINIMUM_TIMEOUT_TIME ) + time = MINIMUM_TIMEOUT_TIME; + + return time; +} + +void ConfigElem::slotTimeout( ) +{ + //kill a running job + if( pop3Job != NULL ) + pop3Job->kill( true ); + + //show error message (during refresh if desired only) + kdError() << "Timeout error!" << endl; + + if( state != AccountRefreshing || appConfig->showConnectionErrors() ) + KMessageBox::error( NULL, QString( i18n( "Time out on %1. The operation could not be finished on time" ) ).arg( m_strAccount ), i18n( "Time Out" ) ); + + //call the appropriate finalize methode + switch( state ) + { + case AccountIdle : break; + case AccountDeleting : slotFinalizeDeletion( NULL ); break; + case AccountDownloading : slotFinalizeShowMail( NULL ); break; + case AccountRefreshing : cancelRefresh(); break; + + default : break; + } +} + +QStringList ConfigElem::getSelectedSubjects( ) const +{ + return m_pshowrecord->getSelectedSubjects(); +} + +bool ConfigElem::hasSelectedMails( ) +{ + return m_pshowrecord->hasSelectedMails(); +} + +void ConfigElem::showSelectedMails( ) +{ + //return if this account has no selected mails or + //the account is not idle or the account is not active + if( !m_pshowrecord->hasSelectedMails() || state != AccountIdle || !isActive() ) + { + emit sigShowBodiesReady( m_strAccount ); + return; + } + + //check whether we have a password for this account + //if not, ask for it + //return when no password is available + if( !assertPassword() ) + { + emit sigShowBodiesReady( m_strAccount ); + return; + } + + //get the numbers of all selected mails + MailsToShow = m_pshowrecord->getSelectedMails(); + if( MailsToShow.empty() ) + { + kdError() << "ConfigElem::showSelectedMails (Account " << m_strAccount << "): The account has selected mails to show but ShowRecord::getSelectedMails has returned an empty list." << endl; + emit sigShowBodiesReady( m_strAccount ); + return; + } + + //set account state + state = AccountDownloading; + + //start the deleting of all mails in MailsToDelete + showNextMail(); + +} + +void ConfigElem::showNextMail( ) +{ + //if the list of mails to show is empty, finalize it and return + if( MailsToShow.empty() ) + { + slotFinalizeShowMail( NULL ); + return; + } + + //clear the class variable mailbody, which contains the downloaded mail body + mailbody.resize( 0 ); + + //start job + startKIOJob( QString( "/download/%1" ).arg( *MailsToShow.begin() ) ); + connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotDataMailBody( KIO::Job*, const QByteArray & ) ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotBodyDownloaded( KIO::Job* ) ) ); + +} + +void ConfigElem::slotBodyDownloaded( KIO::Job * job ) +{ + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error has occured, the download will be canceled + //or will ask for a new password + if( job->error() == KIO::ERR_COULD_NOT_LOGIN ) + { + //login failed, ask for a new password + job->showErrorDialog(); + bool res = assertPassword( true ); + if( res == false ) + { + //we have not got a new password; cancel delete + slotFinalizeShowMail( NULL ); + return; + } + //if we have got a new password, jump to the end of the if-statement + } + else if( job->error() != 0 ) + { + job->showErrorDialog(); + slotFinalizeShowMail( NULL ); + return; + } + else + { + //succesful download + //show mail + int currentMail = *MailsToShow.begin(); + QString tsender = m_pshowrecord->getSenderOf( currentMail ); + QString tdate = m_pshowrecord->getDateOf( currentMail ); + QString tsize = m_pshowrecord->getSizeOf( currentMail ); + QString tsubject = m_pshowrecord->getSubjectOf( currentMail ); + QString tmailbody( m_pshowrecord->decodeMailBody( mailbody, currentMail, appConfig->allowHTML() ) ); + + //emit signal to notify the opening of a window + emit sigMessageWindowOpened(); + + //create and open the window + ShowMailDialog dlg( kapp->mainWidget(), m_strAccount, appConfig->allowHTML(), tsender, tdate, tsize, tsubject, tmailbody ); + int ret = dlg.exec(); + + //emit signal to notify the closing of a window + emit sigMessageWindowClosed(); + + //cancel the download if desired + if( ret == KDialogBase::Rejected ) + { + MailsToShow.clear(); + commitDownloading(); + return; + } + + //remove the first item of the list of mails to show + MailsToShow.remove( MailsToShow.begin() ); + + //if the list of mails is empty, finalize the showing and return + if( MailsToShow.empty() ) + { + commitDownloading(); + return; + } + } + + + //show next mail in list + showNextMail(); +} + +void ConfigElem::slotFinalizeShowMail( KIO::Job* ) +{ + //stop timeout time + pop3Timer->stop(); + + //set account state to idle + state = AccountIdle; + + //emit signal to report the download is ready + emit sigShowBodiesReady( m_strAccount ); +} + +void ConfigElem::slotDataMailBody( KIO::Job *, const QByteArray & datas ) +{ + if( !datas.isEmpty() ) + { + //we get the next part of the mail + //append it + uint lastSize = mailbody.size(); + mailbody.resize( lastSize + datas.size() ); + for( uint i = 0; i < datas.size(); i++ ) + mailbody[ lastSize + i ] = datas[ i ]; + } +} + +void ConfigElem::commitDownloading( ) +{ + //start job to commit + startKIOJob( QString( "/commit" ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeShowMail( KIO::Job* ) ) ); +} + +void ConfigElem::refreshMailList( FilterLog* log ) +{ + //store pointer to log + if( log != NULL ) + FLog = log; + + //return, if account is not active + if( !isActive() ) + { + emit sigRefreshReady( m_strAccount ); + return; + } + + //check whether we have a password for this account + //if not, ask for it + //return when no password is available + if( !assertPassword() ) + { + emit sigRefreshReady( m_strAccount ); + return; + } + + //create a new ShowRecord instance + //When the refresh has finished successfully, this will + //replace the old mail list + tempMailList = new ShowRecord(); + + //set account state + state = AccountRefreshing; + + //init counter + if( !refreshPerformedByFilters ) + { + nmbDeletedMailsLastRefresh = 0; + nmbMovedMailsLastRefresh = 0; + nmbIgnoredMails = 0; + } + + //the first step is to get the UIDs + getUIDs(); +} + +void ConfigElem::getUIDs( ) +{ + //clears the QString list, which contains all received UIDs + receivedUIDs.clear(); + + //start job + startKIOJob( QString( "/uidl" ) ); + connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotReceiveUID( KIO::Job*, const QByteArray & ) ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotUIDsReceived( KIO::Job* ) ) ); + +} + +void ConfigElem::slotReceiveUID( KIO::Job*, const QByteArray& data ) +{ + //return, when data is empty + if( data.isEmpty() ) return; + + //cast the data to QString + QString uid( data ); + + //insert the uid at the end of the UID list + receivedUIDs.append( uid ); +} + +void ConfigElem::slotUIDsReceived( KIO::Job * job ) +{ + int number; //an extracted mail number + QString uid; //an extracted uid + bool corruptData = false; //set to TRUE, if a data is corrupt + bool isNew = false; //state of the received mail + + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error has occured, the refresh will be canceled + //or will ask for a new password + if( job->error() == KIO::ERR_COULD_NOT_LOGIN ) + { + //login failed, ask for a new password + job->showErrorDialog(); + bool res = assertPassword( true ); + if( res == true ) + { + //we have got a new password, try again + delete tempMailList; + refreshMailList(); + } + else + //we have not got a new password; cancel refresh + cancelRefresh(); + + return; + } + else if( job->error() != 0 ) + { + //show error message if desired + if( appConfig->showConnectionErrors() ) + job->showErrorDialog(); + + cancelRefresh(); + return; + } + + //analyze UIDs + if( !receivedUIDs.isEmpty() ) + { + //iterate over all UIDs in the list + for ( QStringList::Iterator it = receivedUIDs.begin(); it != receivedUIDs.end(); ++it ) + { + QString line = *it; + + //every line has the format "number UID", e.g.: 1 bf10d38018de7c1d628d65288d722f6a + //get the position of the separating space + int positionOfSpace = line.find( " " ); + + //if no space was found, the line is corrupt + if( positionOfSpace == -1 ) + { + kdError() << "ConfigElem::slotUIDsReceived: get a corrupt UID from " << dynamic_cast(job)->url().host() << ". No space. : " << line << endl; + corruptData = true; + } + else + { + //extract mail number and uid + bool isNumber; + number = line.left( positionOfSpace ).toInt( &isNumber ); + //check number + if( !isNumber ) + { + //the first part is not a number + kdError() << "ConfigElem::slotUIDsReceived: get a corrupt UID from " << dynamic_cast(job)->url().host() << ". No number found at begin. : " << line << endl; + corruptData = true; + } + else + { + //number is ok; extract uid + uid = line.mid( positionOfSpace + 1 ); + + //determine about new mail or not + if( !m_pshowrecord->hasMail( uid ) ) + { + //the old list doesn't contain a mail with this uid + //the mail is new + isNew = true; + } + else if( ( appConfig->keepNew() || refreshPerformedByFilters ) && m_pshowrecord->isNew( uid ) ) + { + //the mail is already in the old list + //but we will leave the state of formerly new mails, because the user wants it or this refresh is performed by filters + isNew = true; + } + else + isNew = false; + + //append mail to the list + tempMailList->appendNewMail( number, uid, isNew ); + + } + } + } + + //if the data are ok, start the second step: get sizes + //otherwise cancel the refresh + if( !corruptData ) + getSizes(); + else + cancelRefresh(); + } + else + { + //we haven't received any UIDs. The account has no mails. + //finalize the refresh + swapMailLists(); + } + +} + +void ConfigElem::cancelRefresh() +{ + //print error message + kdError() << m_strAccount << ": " << "Refresh canceled" << endl; + + //delete the new mail list + delete tempMailList; + + //delete old mail list and create a new empty one + delete m_pshowrecord; + m_pshowrecord = new ShowRecord(); + + //emit signal + emit sigRefreshReady( m_strAccount ); + + //set account state to idle + state = AccountIdle; + + //we don't need an error message, because the KIO job has shown one +} + +void ConfigElem::slotFinalizeRefresh( KIO::Job* ) +{ + //stop timeout time + pop3Timer->stop(); + + //unset the flag + refreshPerformedByFilters = false; + + //emit signal + emit sigRefreshReady( m_strAccount ); + + //set account state to idle + state = AccountIdle; + + +} + +void ConfigElem::commitRefresh( ) +{ + //start job to commit + startKIOJob( QString( "/commit" ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotFinalizeRefresh( KIO::Job* ) ) ); +} + +void ConfigElem::getSizes( ) +{ + //clears the QString list, which contains all received UIDs + receivedSizes.clear(); + + //start job + startKIOJob( QString( "/index" ) ); + connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotReceiveSize( KIO::Job*, const QByteArray & ) ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotSizesReceived( KIO::Job* ) ) ); + +} + +void ConfigElem::slotSizesReceived( KIO::Job * job ) +{ + int number; //an extracted mail number + long size; //an extracted size + bool corruptData = false; //set to TRUE, if a data is corrupt + + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error has occured, the refresh will be canceled + if( job->error() != 0 ) + { + //show error message if desired + if( appConfig->showConnectionErrors() ) + job->showErrorDialog(); + cancelRefresh(); + return; + } + + //analyze UIDs + if( !receivedSizes.isEmpty() ) + { + //iterate over all sizes in the list + for ( QStringList::Iterator it = receivedSizes.begin(); it != receivedSizes.end(); ++it ) + { + QString line = *it; + + //every line has the format "number size", e.g.: 1 1234 + //get the position of the separating space + int positionOfSpace = line.find( " " ); + + //if no space was found, the line is corrupt + if( positionOfSpace == -1 ) + { + kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast(job)->url().host() << ". No space. : " << line << endl; + corruptData = true; + } + else + { + //extract mail number and size + bool isNumber; + number = line.left( positionOfSpace ).toInt( &isNumber ); + //check number + if( !isNumber ) + { + //the first part is not a number + kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast(job)->url().host() << ". No number found at begin. : " << line << endl; + corruptData = true; + } + else + { + //number is ok; extract size + size = line.mid( positionOfSpace + 1 ).toLong( &isNumber ); + + //check size + if( !isNumber ) + { + //the second part of the string is not a number + kdError() << "ConfigElem::slotSizesReceived: get a corrupt size from " << dynamic_cast(job)->url().host() << ". No size found at end. : " << line << endl; + corruptData = true; + } + else + { + //size is ok + //set it + tempMailList->setSize( number, size ); + } + } + } + } + + //if the data are ok, start the third step: get headers + //otherwise cancel the refresh + if( !corruptData ) + getHeaders(); + else + cancelRefresh(); + } +} + +void ConfigElem::slotReceiveSize( KIO::Job *, const QByteArray & data ) +{ + //return, when data is empty + if( data.isEmpty() ) return; + + //cast the data to QString + QString size( data ); + + //insert the uid at the end of the sizes list + receivedSizes.append( size ); + +} + +void ConfigElem::getHeaders( ) +{ + //get the numbers of all new mails + newMails = tempMailList->getNewMails(); + if( newMails.empty() ) + { + //no new mails available; copy the known headers from the old mail list + copyHeaders(); + return; + } + + //get the headers + getNextHeader(); +} + +void ConfigElem::getNextHeader( ) +{ + //if the list of mails empty, copy the known headers from the old mail list + if( newMails.empty() ) + { + copyHeaders(); + return; + } + + //clear temporary header store + receivedHeader.resize( 0 ); + + //start job + startKIOJob( QString( "/headers/%1" ).arg( *newMails.begin() ) ); + connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), this, SLOT( slotReceiveHeader( KIO::Job*, const QByteArray & ) ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotHeaderDownloaded( KIO::Job* ) ) ); + +} + +void ConfigElem::slotHeaderDownloaded( KIO::Job * job ) +{ + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error is occured, the download will be canceled + if( job->error() != 0 ) + { + //show error message if desired + if( appConfig->showConnectionErrors() ) + job->showErrorDialog(); + + cancelRefresh(); + return; + } + + //store header + tempMailList->setHeader( *newMails.begin(), QString( receivedHeader ) ); + + //remove the first item of the list of new mails + newMails.remove( newMails.begin() ); + + //if the list of new mails is empty, copy the headers of old mails to the new list + if( newMails.empty() ) + { + copyHeaders(); + return; + } + + //get next header + getNextHeader(); +} + +void ConfigElem::copyHeaders( ) +{ + //get the UIDs of the old mails in the temporary mail list + QStringList UIDs = tempMailList->getUIDsOfOldMails(); + + //iterate over all members of the list, + //get the header from the old list and store it in the new one + QStringList::iterator it; + for ( it = UIDs.begin(); it != UIDs.end(); ++it ) + { + QString header = m_pshowrecord->getHeaderOf( *it ); + tempMailList->setHeader( *it, header ); + } + + //now we have the a complete new mail list + swapMailLists(); +} + +void ConfigElem::slotReceiveHeader( KIO::Job *, const QByteArray & data ) +{ + if( !data.isEmpty() ) + { + //we get the next part of the mail + //append it + uint lastSize = receivedHeader.size(); + receivedHeader.resize( lastSize + data.size() ); + for( uint i = 0; i < data.size(); i++ ) + receivedHeader[ lastSize + i ] = data[ i ]; + } +} + +int ConfigElem::getNumberNewMails( ) +{ + return m_pshowrecord->getNumberNewMails(); +} + +int ConfigElem::getNumberMails( ) +{ + return m_pshowrecord->getNumberMails(); +} + +long ConfigElem::getTotalSize( ) +{ + return m_pshowrecord->getTotalSize(); +} + +void ConfigElem::fillMailListView( KshowmailView* view ) +{ + m_pshowrecord->fillMailListView( view, m_strAccount ); +} + +void ConfigElem::refreshAccountListItem( ) +{ + if( m_pViewItem != NULL ) + { + if( isActive() ) + { + m_pViewItem->setText( 4, QString( "%1" ).arg( getNumberMails(), 3 ) ); + m_pViewItem->setText( 5, QString( "%1" ).arg( getTotalSize(), 8 ) ); + } + else + { + m_pViewItem->setText( 4, QString( "???" ) ); + m_pViewItem->setText( 5, QString( "???" ) ); + } + } +} + +void ConfigElem::killPOP3Job( ) +{ + //just try to kill, if it is not idle + if( state != AccountIdle ) + { + //kill a running job + if( pop3Job != NULL ) + pop3Job->kill( true ); + + //stop timeout timer + pop3Timer->stop(); + + //call the appropriate finalize method + switch( state ) + { + case AccountDeleting : slotFinalizeDeletion( NULL ); break; + case AccountDownloading : slotFinalizeShowMail( NULL ); break; + case AccountRefreshing : cancelRefresh(); break; + + default : break; + } + } +} + +int ConfigElem::showSelectedHeaders( ) +{ + //return, if no mails are selected + if( !hasSelectedMails() ) + return ConfigElem::continueShowHeaders; + + //order the mail list to show the headers of the selected mails + int ret = m_pshowrecord->showSelectedHeaders( m_strAccount ); + + return ret == ShowRecord::continueShowHeaders ? ConfigElem::continueShowHeaders : ConfigElem::cancelShowHeaders; +} + +void ConfigElem::printSetup( ) const +{ + kdDebug() << "Setup of " << m_strAccount << ":" << endl; + kdDebug() << "Host: " << m_url.host() << endl; + kdDebug() << "Protocol: " << m_url.protocol() << endl; + kdDebug() << "Port: " << m_url.port() << endl; + kdDebug() << "User: " << m_url.user() << endl; + kdDebug() << "Password: " << m_url.pass() << endl; + + switch( PasswordStorage ) + { + case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE : kdDebug() << "Password Storage: don't save" << endl; break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE : kdDebug() << "Password Storage: save in file" << endl; break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET : kdDebug() << "Password Storage: use KWallet" << endl; break; + default : kdDebug() << "Password Storage: invalid value" << endl; + + } + + kdDebug() << "active: " << m_bActive << endl << endl; + + +} + +void ConfigElem::setPasswordStorage( int storage ) +{ + if( storage == CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE || + storage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE || + storage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + + PasswordStorage = storage; + + else + + PasswordStorage = DEFAULT_ACCOUNT_PASSWORD_STORAGE; +} + +int ConfigElem::getPasswordStorage( ) const +{ + return PasswordStorage; +} + +QString ConfigElem::getProtocol( bool upperCase ) const +{ + if( upperCase ) + return m_url.protocol().upper(); + else + return m_url.protocol(); +} + +unsigned short int ConfigElem::getPort( ) const +{ + return m_url.port(); +} + +void ConfigElem::setTLS( bool tls ) +{ + useTLS = tls; +} + +bool ConfigElem::getTLS( ) const +{ + return useTLS; +} + +void ConfigElem::reloadFilterSettings( ) +{ + headerFilter.load(); +} + +void ConfigElem::applyFilters( ) +{ + //are we executed by the MOVE routines? + if( !downloadActionsInvoked ) + { + //this is the first call (at the current refresh cycle) of this methode + //we get the lists of mails to delete an move and call the MOVE routines if necessary + + //OK, the filters were applied + filterApplied = true; + + //order the mail list to apply the header filters + //it returns lists of mail numbers which shall be deleted or moved + //the marking will be done by the mail list itself + //the mail list removes all mails which shall be ignored itself + MailsToDelete.clear(); + m_pshowrecord->applyHeaderFilter( &headerFilter, getAccountName(), MailsToDelete, MailsToDownload, nmbIgnoredMails, FLog ); + nmbDeletedMailsLastRefresh += MailsToDelete.count(); + nmbDeletedMailsLastStart += MailsToDelete.count(); + + //This part will be executed, if mails shall be downloaded + if( !MailsToDownload.empty() ) + { + downloadActionsInvoked = true; + doDownloadActions(); + + //we quit this methode at this point, because after the bodies are downloaded and written this methode will recalled. + //At this time the else branch of this IF-statement will be executed and the methode continues + return; + } + + } + else + { + //this is the second call (at the current refresh cycle) of this methode. + //it is called by the Move routines. + //the downloading of the mailbodies and writing it to the mailboxes has ended. + //A second call was just exceuted, if there was mails to move + downloadActionsInvoked = false; + + //after an move error there are maybe some mails leftover in MailsToMove + MailsToDownload.clear(); + } + + + + //we have get the list of mails to delete and the all mails to move are written to its mailboxes + //now we delete this mails (the moved mails too) + + if( !MailsToDelete.empty() ) + { + //there are mails to delete + //we delete they + //after the delete cycle has done its job, it will call applyFiltersDeleted() + deletionPerformedByFilters = true; //this is set to indicate the deletion is performed by filters and not by user + //the deletion methodes need it to decide on branch targets + deleteNextMail(); + } + else + { + //if we need not to start a second refresh cycle (no mails was deleted or moved) + //we just commit the refresh and let the filter applied flag to false for the next regular refresh + commitRefresh(); + filterApplied = false; + } +} + +void ConfigElem::swapMailLists( ) +{ + //delete old mail list + delete m_pshowrecord; + + //assign the new list + if( tempMailList != NULL ) + m_pshowrecord = tempMailList; + else + m_pshowrecord = new ShowRecord(); + + //if the filters were not applied yet, we do it now + //applyFilters() will either start a second refresh cycle if it did some deletions + //or call commitRefresh() to commit the refresh cycle. + //if the filters were already applied we commit the refresh. + if( filterApplied | !headerFilter.isActive() ) + { + commitRefresh(); + filterApplied = false; + return; + } + else + { + applyFilters(); + return; + } +} + +void ConfigElem::applyFiltersDeleted( ) +{ + //unset the flag + deletionPerformedByFilters = false; + + //start the second refresh cycle + refreshPerformedByFilters = true; + + //this sends a commit and restart the refresh + commitBeforeRefresh(); + return; + //refreshMailList(); +} + + +bool ConfigElem::writeToMailBox( const QString & mail, const QString & box ) +{ + QDir mailDir( box ); + + //check whether the given path is a maildir + if( !isMailDir( mailDir ) ) + { + //show an error message + KMessageBox::error( NULL, i18n( QString( "%1 is not a mailbox." ).arg( box ) ) ); + return false; + } + + //create unique file name according http://cr.yp.to/proto/maildir.html + QString partTime = QString::number( time( NULL ) ); //left part, output of time() + + char hname[256]; //right part, the hostname + QString partHostname; + if( gethostname( hname, 255 ) == 0 ) + partHostname = QString( hname ); + else + { + //the hostname is not readable + //show an error message and exit + KMessageBox::error( NULL, i18n( QString( "Can't read the hostname of your computer. But KShowmail need it to write a mail into the mailbox." ) ) ); + return false; + } + + QString partPID = QString::number( getpid() ); //middle part, the PID + + QString partCounter = QString::number( moveCounter++ ); + + QString uniqueName( partTime + "." + partPID + partCounter + "." + partHostname ); + + //build absolute path + mailDir.cd( "tmp" ); + QString absFile = mailDir.filePath( uniqueName ); + + //and writing! + QFile file( absFile ); + if( file.open( IO_WriteOnly ) ) + { + QTextStream stream( &file ); + stream << mail << endl; + file.close(); + } + else + { + KMessageBox::detailedError( NULL, i18n( QString( "Could not file a mail to %1." ) ).arg( box ), i18n( file.errorString() ) ); + return false; + } + + //now we move it to the "new" subdirectory + mailDir.cdUp(); + mailDir.cd( "new" ); + QString absNewFile = mailDir.filePath( uniqueName ); + + if( rename( absFile.ascii(), absNewFile.ascii() ) == -1 ) + { + KMessageBox::error( NULL, i18n( QString( "Could not move a mail from %1 to %2." ) ).arg( absFile ).arg( absNewFile ) ); + return false; + } + + //the writing was successful + return true; +} + +void ConfigElem::doDownloadActions() +{ + //get first mail + getNextMailForDownloadActions(); +} + +bool ConfigElem::isMailDir( const QDir & path ) +{ + //get a list of all subdirectories in this directory + const QStringList entries = path.entryList( QDir::Dirs | QDir::Readable | QDir::Writable | QDir::Hidden, QDir::Name | QDir::IgnoreCase | QDir::LocaleAware ); + + //a maildir folder must contains the folders "cur", "new" and "tmp" + bool curFound = false; + bool newFound = false; + bool tmpFound = false; + + //iterate over all directories and look for the three necessary dirs + QStringList::const_iterator it = entries.begin(); + while( it != entries.end() && !( curFound && newFound && tmpFound ) ) + { + if( *it == "tmp" ) + tmpFound = true; + else if( *it == "cur" ) + curFound = true; + else if( *it == "new" ) + newFound = true; + + ++it; + } + + return curFound && newFound && tmpFound; +} + +void ConfigElem::getNextMailForDownloadActions() +{ + //if the list of mails to move is empty return to applyFilters + if( MailsToDownload.empty() ) + { + applyFilters(); + return; + } + + //clear the class variable mailbody, which contains the downloaded mail body + mailbody.resize( 0 ); + + //start job + startKIOJob( QString( "/download/%1" ).arg( MailsToDownload.begin().key() ) ); + connect( pop3Job, SIGNAL( data( KIO::Job*, const QByteArray & ) ), SLOT( slotDataMailBody( KIO::Job*, const QByteArray & ) ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotMailDownloadedForAction( KIO::Job* ) ) ); + +} + +void ConfigElem::slotMailDownloadedForAction(KIO::Job * job) +{ + //stop timeout timer + pop3Timer->stop(); + + //check for errors + //if an error has occured, the download will be canceled + //or will ask for a new password + if( job->error() == KIO::ERR_COULD_NOT_LOGIN ) + { + //login failed, ask for a new password + job->showErrorDialog(); + bool res = assertPassword( true ); + if( res == false ) + { + //we have not got a new password; cancel delete + applyFilters(); + return; + } + //if we have got a new password, jump to the end of the if-statement + } + else if( job->error() != 0 ) + { + job->showErrorDialog(); + applyFilters(); + return; + } + else + { + //succesful download + //do action + MailToDownloadMap_Type::Iterator firstMail = MailsToDownload.begin(); + int currentMailNumber = firstMail.key(); //get mail number + QString currentMailBox( firstMail.data().mailbox ); //get mailbox + QString mail( mailbody ); //convert mailtext + FilterAction_Type action = firstMail.data().action; //get action + + bool resultMove = false; //TRUE - mail is written into the mailbox + bool resultSpam = false; //TRUE - mail is Spam + bool deleteIt = false; //TRUE - mail shall be deleted + bool resultAction = false; //True - the action was succesful performed + + switch( action ) + { + case FActMove : resultMove = writeToMailBox( mail, currentMailBox ); + //log entry is made by ShowRecordElem::applyHeaderFilter + if( resultMove == true ) + { + nmbMovedMailsLastRefresh++; + nmbMovedMailsLastStart++; + + resultAction = true; + deleteIt = true; + } + else + { + resultAction = false; + deleteIt = false; + } + break; + + case FActSpamcheck : resultSpam = isSpam( mailbody ); //it is spam? + if( resultSpam == true ) //yes, it is spam! Arrgghh! Torture it!!! + { + switch( appConfig->getSpamAction() ) + { + case FActMove : resultMove = writeToMailBox( mail, appConfig->getSpamMailbox() ); + if( resultMove == true ) + { + nmbMovedMailsLastRefresh++; + nmbMovedMailsLastStart++; + + if( FLog != NULL ) + m_pshowrecord->writeToMoveLog( FLog, currentMailNumber, getAccountName(), appConfig->getSpamMailbox() ); + resultAction = true; + deleteIt = true; + } + else + { + resultAction = false; + deleteIt = false; + } + break; + + case FActMark : m_pshowrecord->setMarkAtNextViewRefresh( currentMailNumber ); + resultAction = true; + deleteIt = false; + break; + + case FActDelete : if( FLog != NULL ) + m_pshowrecord->writeToDeleteLog( FLog, currentMailNumber, getAccountName() ); + + nmbDeletedMailsLastRefresh++; + nmbDeletedMailsLastStart++; + resultAction = true; + deleteIt = true; + break; + + default : kdError() << "invalid action for spam mail" << endl; + resultAction = false; + deleteIt = false; + break; + + } + } + else //mail is not spam + { + resultAction = true; + deleteIt = false; + } + break; + + default : deleteIt = false; + resultAction = false; + + } + + if( resultAction == true ) + { + //Action was successful + //remove this mail from the list + MailsToDownload.remove( firstMail ); + + //maybe add this mail to list of mails to delete + if( deleteIt ) + MailsToDelete.append( currentMailNumber ); + } + else + { + //Action was not successful + //returns to applyFilters() to continue the filtering + applyFilters(); + return; + } + + + //if the list of mails is empty, return to applyFilters() to continue the filtering + if( MailsToDownload.empty() ) + { + applyFilters(); + return; + } + } + + + //show next mail in list + getNextMailForDownloadActions(); +} + +bool ConfigElem::isSpam( QByteArray mail ) const +{ + //check for a running spamassassin + if( !isSpamAssassinRunning() ) + { + KMessageBox::information( NULL, i18n( "You want to check your mails for spam, but SpamAssassin is not running.\nKShowmail skips the spam check." ), i18n( "SpamAssassin is not running" ), "ConfigElemNoSpamAssassinRunning" ); + return false; + } + + //append an \0 at the end of the string + int size = mail.size(); + if( mail[ size - 1 ] != '\0' ) + { + mail.resize( size + 1 ); + mail[ size ] = '\0'; + } + + //calls spmac and get an file pointer to stdin of it + FILE *write_fp; + write_fp = popen( "spamc -E", "w" ); + + //forward the mail to SpamAssassin + if( write_fp != NULL ) + { + fwrite( mail.data(), sizeof( char), mail.size(), write_fp ); + + //check exit code of spamc and return result + int excode = pclose( write_fp ); + if( excode == 0 ) + return false; + else + return true; + } + else + { + kdError() << "Could not call the command spamc of SpamAssassin." << endl; + return false; + } + + return false; +} + +bool ConfigElem::isSpamAssassinRunning( ) const +{ + FILE *read_fp; + char buffer[ BUFSIZ + 1 ]; + int chars_read; + bool found = false; + + memset( buffer, '\0', sizeof( buffer ) ); + read_fp = popen( "ps -eo comm", "r" ); + if( read_fp != NULL ) + { + chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp ); + while( chars_read > 0 ) + { + buffer[ chars_read - 1 ] = '\0'; + QString output( buffer ); + found = output.contains( NAME_SPAMASSASSIN_DAEMON ) > 0; + chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp ); + } + pclose( read_fp ); + } + + return found; +} + +int ConfigElem::numberDeletedMailsLastRefresh( ) +{ + return nmbDeletedMailsLastRefresh; +} + +int ConfigElem::numberDeletedMailsStart( ) +{ + return nmbDeletedMailsLastStart; +} + +int ConfigElem::numberMovedMailsLastRefresh( ) +{ + return nmbMovedMailsLastRefresh; +} + +int ConfigElem::numberMovedMailsStart( ) +{ + return nmbMovedMailsLastStart; +} + +int ConfigElem::numberIgnoredMails( ) +{ + return nmbIgnoredMails; +} + +QStringList ConfigElem::getSelectedSenders( ) const +{ + return m_pshowrecord->getSelectedSenders(); +} + + + + +void ConfigElem::commitBeforeRefresh() +{ + //start job to commit + startKIOJob( QString( "/commit" ) ); + connect( pop3Job, SIGNAL( result( KIO::Job* ) ), this, SLOT( slotCommitBeforeRefreshDone( KIO::Job* ) ) ); + +} + +void ConfigElem::slotCommitBeforeRefreshDone(KIO::Job *) +{ + //after a commit was send, we start a new refresh cyle + refreshMailList(); +} \ No newline at end of file diff --git a/kshowmail/configelem.h b/kshowmail/configelem.h new file mode 100644 index 0000000..14f79ca --- /dev/null +++ b/kshowmail/configelem.h @@ -0,0 +1,1097 @@ +/*************************************************************************** + configelem.h - description + ------------------- + begin : Tue May 9 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 CONFIGELEM_H +#define CONFIGELEM_H + +//C headers +#include +#include +#include +#include + +//QT headers +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "showrecord.h" +#include "constants.h" +#include "types.h" +#include "configlist.h" +#include "showmaildialog.h" +#include "decodeRFC2047.h" +#include "kshowmailview.h" +#include "encryption.h" +#include "kwalletaccess.h" +#include "headerfilter.h" +#include "filterlog.h" + + + +using namespace Constants; +using namespace Types; +using namespace Encryption; + +//forward class declarations +class KshowmailView; +class ConfigList; +class ShowRecordElem; +class ShowRecord; + +/** + * @brief Represents a mail account. + * + * Contains all datas of the account like server, user password and so on. + * It also contains the mails read from the server. + * Used in class ConfigList and ConfigAccounts. + * + * @see ShowRecord + * @see ConfigList + * @see ConfigAccounts::Accounts + * @author Eggert Ehmke + * @author Ulrich Weigelt + */ +class ConfigElem : public QObject { + + Q_OBJECT + + public: + + /** + * Returned by showSelectedHeaders(), if the user has + * clicked OK. + */ + static const int continueShowHeaders; + + /** + * Returned by showSelectedHeaders(), if the user has + * clicked Cancel. + */ + static const int cancelShowHeaders; + + /** + * General Constructor + * Warning: The pointer to the application configuration (ConfigList) + * will not be set. + */ + ConfigElem(); + + /** + * Default Constructor + * @param config pointer to the general app configuration + */ + ConfigElem ( ConfigList* config ); + + /** + * Copy Constructor. + * It doesn't copy the mail list but creates a new empty one. + * The pointer to the appropriate account list view item is set + * to NULL.The new account is active by default. + * @param pElem the account which will be copied + */ + ConfigElem( ConfigElem* pElem ); + + /** + * Constructs a account which is called like the given name. + * Creates a empty mail list. Sets the pointer to the appropriate + * account list view item to NULL. The account is deactivated by default. + * The url doesn't contain any server informations. + * @param config pointer to the general app configuration + * @param account name of the new account + */ + ConfigElem( ConfigList* config, const QString& account ); + + /** + * Destructor + * Does nothing. + */ + ~ConfigElem(); + + /** + * Returns whether the account is active. + * @return TRUE - account is active; FALSE - account is not active + */ + bool isActive() const; + + /** + * Sets the account active. + * @param active TRUE - active account; FALSE - deactivate account + */ + void setActive( bool active ); + + /** + * Gets the account name. + * @return account name + */ + QString getAccountName() const; + + /** + * Sets the account name. + * @param name the account name + */ + void setAccountName( QString name ); + + /** + * Gets the account password. + * @return password + */ + QString getPassword() const; + + /** + * Sets the account password. To save it in the configuration file + * call saveOptions(). + * @param password new password + */ + void setPassword( const QString& password ); + + /** + * Returns whether a password is stored. + * @return TRUE - there is password stored; FALSE - no password stored + */ + bool hasPassword() const; + + /** + * Returns the url of this account. + * @return url + */ + KURL getURL() const; + + /** + * Sets the pointer to the item in the account list view item. + * @see m_pViewItem + * @param item account list view item + */ + void setListViewItem( QListViewItem* item ); + + /** + * Returns the pointer to the account list view item. + * @see m_pViewItem + * @return pointer to the appropriate list view item + */ + QListViewItem* getListViewItem(); + + /** + * Returns TRUE, if the appropriate list view item is selected. + * @return TRUE - list view item is selected + * @return FALSE - list view item is not selected + */ + bool isSelected() const; + + /** + * Clears the mail list or creates a new one. + */ + void clearMailList(); + + /** + * Sets the host name. + * @param host host name + */ + void setHost( const QString& host ); + + /** + * Returns the hostname. + * @return the name of the host or QString::null if no host is set + */ + QString getHost() const; + + /** + * Sets the protocol. + * @param protocol the protocol + */ + void setProtocol( const QString& protocol ); + + /** + * Returns the protocol. + * @param upperCase TRUE - transforms the protocol string to upper case + * @return protocol + */ + QString getProtocol( bool upperCase = false ) const; + + /** + * Enable or disable TLS. + * @param tls TRUE: use TLS; FALSE: don't use TLS + */ + void setTLS( bool tls ); + + /** + * Returns whether TLS is enabled. + * @return TRUE: TLS is enabled + * @return FALSE: TLS is disabled + */ + bool getTLS() const; + + /** + * Sets the port. + * @param port the port + */ + void setPort( unsigned short int port ); + + /** + * Returns the port number. + * @return port number + */ + unsigned short int getPort() const; + + /** + * Sets the user. + * @param user username + */ + void setUser( const QString& user ); + + /** + * Returns the user name. + * @return the user name or QString::null if there is no user name + */ + QString getUser() const; + + /** + * Sets the password storage type. + * The Constants are defined in constants.h + * @param storage type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET + */ + void setPasswordStorage( int storage ); + + /** + * Returns the password storage type. + * The Constants are defined in constants.h. + * @return type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET + */ + int getPasswordStorage() const; + + + /** + * Saves the stored mails into the given + * DOM document. It doesn't create a new DOM element but used the given one. + * Saves the setup into the application config. + * @param doc DOM document which contains all application settings, mails and account settings + * @param parent DOM element in which all settings and mails of this account will be saved + */ + void saveOptions( QDomDocument& doc, QDomElement& parent ); + + /** + * Gets the stored mails. + * @param parent DOM element which contains the mails of this account + */ + void readStoredMails( QDomElement& parent ); + + /** + * Returns the number of stored mails. + * @return number of mails + */ + int count(); + + /** + * Deletes all selected mails. + * This just starts the deletion and returns after then. + * When the deletion is ready the signal sigDeleteReady will be emitted. + */ + void deleteSelectedMails(); + + /** + * Downloads and shows the bodies of all selected mails. + * This just starts the download and returns after then. + * When the download is ready and the body is shown the sigShowBodiesReady + * will be emitted. + */ + void showSelectedMails(); + + /** + * Opens a dialog to ask for a password, stores it temporarily in the account settings and + * emits the signal sigConfigChanged. + * Does not open a dialog if a password is already stored in the account settings. + * @param force ask for a new password even if a password is stored + * @return TRUE - a password is available + * @return FALSE - no password is available + */ + bool assertPassword( bool force = false ); + + /** + * Returns the state of the account. + * @return account state + */ + Types::AccountState_Type getState(); + + /** + * Returns the subjects of the selected mails. + * @return subjects of selected mails + */ + QStringList getSelectedSubjects() const; + + /** + * Returns whether there are mails in the list that are selected + * in the list view. + * @return TRUE - there are selected mails + * @return FALSE - there aren't selected mails + */ + bool hasSelectedMails(); + + /** + * Refreshes the mail list. + * This just starts the refresh and returns after then. + * When the refresh is ready, the signal sigRefreshReady + * will be emitted. + * @param log Pointer to the filter log + * @see sigRefreshReady + */ + void refreshMailList( FilterLog* log = NULL ); + + /** + * Returns the number of new mails. + * @return number of new mails + */ + int getNumberNewMails(); + + /** + * Returns the number of mails. + * @return number of mails + */ + int getNumberMails(); + + /** + * Returns the total size of all mails. + * @return total size + */ + long getTotalSize(); + + /** + * Creates for every mail a list view item and insert it + * into the mail list view. + * @param view pointer to the application view + */ + void fillMailListView( KshowmailView* view ); + + /** + * Refreshes the appropriate entry of the account list + * (number of mails and total size) + * Uses the pointer to the list view item stored in m_pViewItem. + */ + void refreshAccountListItem(); + + /** + * Kills a running pop3 job. + */ + void killPOP3Job(); + + /** + * Shows the headers of all selected mails. + * @return continueShowHeaders - the user has clicked OK. The invoking function will show the next header + * @return cancelShowHeaders - the user has clicked Cancel. The invoking function will not show the next header. + * @return continueShowHeaders - no mails of this account are selected + */ + int showSelectedHeaders(); + + /** + * Prints the setup to stdout. + */ + void printSetup() const; + + /** + * Reloads the settings of the filters. + * It just calls the load() methode of the header filter. + */ + void reloadFilterSettings(); + + /** + * Returns the number of deleted mails by last refresh. + * @return number of deleted mails by last refresh + */ + int numberDeletedMailsLastRefresh(); + + /** + * Returns the number of deleted mails since start. + * @return number of deleted mails since start + */ + int numberDeletedMailsStart(); + + /** + * Returns the number of moved mails by last refresh. + * @return number of moved mails by last refresh + */ + int numberMovedMailsLastRefresh(); + + /** + * Returns the number of moved mails since start. + * @return number of moved mails since start + */ + int numberMovedMailsStart(); + + /** + * Returns the number of ignored mails by last refresh. + * @return number of ignored mails by last refresh + */ + int numberIgnoredMails(); + + /** + * Returns the senders of the selected mails + * @return senders of the selected mails + */ + QStringList getSelectedSenders() const; + + + private: + + /** + * Pointer to the configuration of the application. + * Set by the constructors. + */ + ConfigList* appConfig; + + /** + * Pointer to the filter log. + * Will be set by refreshMailList() at every refresh. + */ + FilterLog* FLog; + + /** + * State of the account. + */ + Types::AccountState_Type state; + + /** + * Type of password storage. + * valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET + * The Constants are defined in constants.h + * @see saveOptions() + * @see setPasswordStorage() + */ + int PasswordStorage; + + /** + * TRUE - account is active; FALSE - account is not active + */ + bool m_bActive; + + /** + * Account Name + */ + QString m_strAccount; + + /** + * Pointer to the appropriate item in the account list view. + */ + QListViewItem* m_pViewItem; + + /** + * List which contains all read mails from the server. + */ + ShowRecord* m_pshowrecord; + + /** + * Uniform Resource Locator of the account on the pop3 server. + */ + KURL m_url; + + /** + * Type of secure login. + * See constants.h for valid values (CONFIG_VALUE_ACCOUNT_SECLOGIN_...) + */ + int secureLoginType; + + /** + * False: TLS is enabled + */ + bool useTLS; + + /** + * Contains a downloaded mail body. + * Will be set by slotDataMailBody() and read by slotBodyDownloaded(). + */ + QByteArray mailbody; + + /** + * Contains the numbers of mails which will be deleted. + * Set by deleteSelectedMails() and applyFilters() and used by deleteNextMail() to get + * the number of the next mail to delete. + * @see deleteSelectedMails() + * @see deleteNextMail() + * @see applyFilters() + */ + MailNumberList_Type MailsToDelete; + + /** + * Contains the numbers of the mails shall be moved for actions like moving to mailbox or spam check. + * Contains also some parameters (like mailbox) about the action which have to be performed. + * Set and used by applyFilters(). + * @see applyFilters() + */ + MailToDownloadMap_Type MailsToDownload; + + /** + * Contains the numbers of mails for which the bodies will be shown. + * Set by showSelectedMails() and used by showNextMail() to get + * the number of the next mail to show. + * @see showSelectedMails() + * @see showNextMail() + */ + MailNumberList_Type MailsToShow; + + /** + * Contains the numbers of new mails. + * Set by getHeaders() and used by getNextHeader() to download + * the headers of the new mails. + * @see getHeaders() + * @see getNextHeader() + */ + MailNumberList_Type newMails; + + /** + * Pointer to a launched pop3 job. + */ + KIO::TransferJob* pop3Job; + + /** + * timeout timer. Will be started together with every pop3 job. + * If it runs down, slotTimeout() will be invoked. + */ + QTimer* pop3Timer; + + /** + * While refreshing, this ShowRecord instance will be used to + * build a new mail list. After that this pointer will be assigned + * to m_pshowrecord. + */ + ShowRecord* tempMailList; + + /** + * List of received mail UIDs (unique ID). + * Used by slotReceiveUID() and slotUIDsReceived(). + */ + QStringList receivedUIDs; + + /** + * List of received mail sizes. + * Used by slotReceiveSize() and slotSizesReceived(). + */ + QStringList receivedSizes; + + /** + * A received mail header. + * Set by slotReceiveHeader() and used by slotHeaderDownloaded(). + */ + QByteArray receivedHeader; + + /** + * Every account has is own header filter instance. + */ + HeaderFilter headerFilter; + + /** + * This is a flag whether the filters was applied during a refresh cycle. + * If the some mails was deleted (recommend by the filter), we need a actual + * list of mails from the server. Therefore a second refresh cycle will be started. + * To avoid a never-ending loop this flag will be set to TRUE by applyFilters(). + * If the second refresh is running this one will not invoke the filters. + */ + bool filterApplied; + + /** + * This flag is set by applyFilters() to indicate the deletion cycle is performed by filters and not by user. + * The deletion methodes need it to decide on branch targets + */ + bool deletionPerformedByFilters; + + /** + * This flag is set by applyFiltersDeleted() to indicate the refresh cycle is the second one after a deletion which was performed by filters. + * The refresh cycle need it to hold the remaining mails as new. + */ + bool refreshPerformedByFilters; + + /** + * This flag is set to TRUE by applyFilters() to indicate the mailbodies are downloading and writing to the mailboxes or spam checking. + * When this is ended, applyFilters() will be called again and it reset this flag + */ + bool downloadActionsInvoked; + + /** + * Counter for moving to create an unique file name + */ + int moveCounter; + + /** + * Number of deleted mails by last refresh. + */ + int nmbDeletedMailsLastRefresh; + + /** + * Number of deleted mails since start. + */ + int nmbDeletedMailsLastStart; + + /** + * Number of moved mails by last refresh. + */ + int nmbMovedMailsLastRefresh; + + /** + * Number of moved mails since start. + */ + int nmbMovedMailsLastStart; + + /** + * Number of ignored mails by last refresh. + */ + int nmbIgnoredMails; + + /** + * Initializes the account. + */ + void init(); + + /** + * Deletes the first mail of MailsToDelete. + * After a succesful deletion this mail will be removed from the list + * by slotMailDeleted() and this method will be invoked again. + * If the list is empty, it will call commitDelete. + * @see slotMailDeleted() + * @see MailsToDelete + */ + void deleteNextMail(); + + /** + * Commits the deletion. + * Starts a pop3 job that will do the commit. Its signal + * result is connected with slotFinalizeDeletion(). + * @see slotFinalizeDeletion() + */ + void commitDeletion(); + + /** + * Shows the body of the first mail in MailsToShow. + * After a succesful download and opening of the window this + * mail will be removed from the list by slotBodyDownloaded() and this + * method will be invoked again. + * If the list is empty, it will call commitDownloading(). + * @see commitDownloading() + * @see slotBodyDownloaded() + */ + void showNextMail(); + + /** + * Commits the downloading of mail bodies. + * Starts a pop3 job that will do the commit. Its signal + * result is connected with slotFinalizeShowMail(). + * @see slotFinalizeShowMail() + */ + void commitDownloading(); + + /** + * Creates a POP3 transfer job (KIO Job), which will be stored in pop3Job. + * @param path command and parameters of the job as URL path + */ + void startKIOJob( const QString& path ); + + /** + * Returns the timeout time in seconds which is stored in the + * general configuration of the application. + * Returns POP3_DEFAULT_TIMEOUT_TIME (defined in constants.h), + * if no time is available. + * Returns POP3_MINIMUM_TIMEOUT_TIME (defined in constants.h), + * if the get time is less than POP3_MINIMUM_TIMEOUT_TIME. + * @return seconds to timeout + */ + unsigned int getTimeoutTime(); + + /** + * First step of the refresh cycle. + * Gets the UIDs of the available mails from the server. + * It starts a KIO job to get the UIDs. The UIDs will be stored + * in receivedUIDs by slotReceiveUID(). + * When the job is ready, it will invoke slotUIDsReceived(). + */ + void getUIDs(); + + /** + * Second step of the refresh cycle. + * Gets the sizes of the available mails from the server. + * It starts a KIO job to get these. The Sizes will be temporarily + * stored in receivedSizes by slotReceiveSize(). + * When the job is ready, it will invoke slotSizesReceived(). + */ + void getSizes(); + + /** + * Third step of the refresh cycle. + * Gets the header of the new mails from the server. + */ + void getHeaders(); + + /** + * Get the header of the first mail in newMails. + * After a succesful download this + * mail will be removed from the list by slotHeaderDownloaded() and this + * method will be invoked again. + * If the list is empty, it will call copyHeaders() to get the known + * headers from the old mail list (m_pshowrecord). + * @see copyHeaders() + * @see slotHeaderDownloaded() + */ + void getNextHeader(); + + /** + * Fourth step of the refresh cycle. + * Copies the known headers of the old mails from the + * old mail list to the new one. + * At the end it invokes swapMailLists(). + */ + void copyHeaders(); + + /** + * Sixth step of the refresh cycle. + * Applies the filters to the mails in the mail list. + * Invoked by swapMailLists(). + * This methode maybe starts a new refresh cycle because after a deletion or moving we need a + * actual list of mails on the server. + * To avoid a never-ending loop you must not call this methode during the second refresh cycle. + * Therefore it sets filterApplied to TRUE. + * @see filterApplied + * @see applyFiltersDeleted() + */ + void applyFilters(); + + /** + * If there are mails to delete by filters applyFilters will call the regular deletion cycle of this class with set byFilter-flag. + * Therefore the deletion will not branch to commitDeletion() but to this methode. + * This performs a second refresh cycle to get an effective mail list from the server. + * This new cycle will not apply the filters again, because the flag filterApplied is set to TRUE. + * @see applyFilters() + * @see filterApplied + */ + void applyFiltersDeleted(); + + /** + * Cancels the refresh. Will be invoked, when a pop3 job has + * reported an error. + */ + void cancelRefresh(); + + /** + * Commits the refresh. + * Starts a pop3 job that will do the commit. Its signal + * result is connected with slotFinalizeRefresh(). + * Invoked by copyHeaders() if the filters was applied or applyFilters() + * if not second refresh was necessary. + * @see slotFinalizeRefresh() + * @see applyFilters() + */ + void commitRefresh(); + + /** + * Send a commit and restart the refresh cycle + * We restart the refresh to get a fresh maillist after a deletion performed by the filter. + * We need a commit before because the mails server only after a commit reorders the mail numbers + */ + void commitBeforeRefresh(); + + /** + * Fifth step of the refresh cycle. + * Copies the pointer to the temporary list to m_pshowrecord. + * Invoked by copyHeaders() and slotUIDsReceived(). + * The temporary list will be the current mail list. + * At the end it invokes commitRefresh() if the filters were applied + * (filterApplied == TRUE) or deactive or it invokes + * applyFilters() if the filters were not + * applied (filterApplied == FALSE). + * @see m_pshowrecord + * @see copyHeaders() + * @see slotUIDsReceived() + * @see commitRefresh() + * @see filterApplied + */ + void swapMailLists(); + + /** + * Does all filter actions for which we have to download the mails + * These are: + * Moving, spam check + * It doesn't removes they from the server. + */ + void doDownloadActions(); + + /** + * Gets the body of the first mail in MailsToDownload. + * After a succesful download and writing into the mailbox this + * mail will be removed from the list by slotMailDownloadedforDownloadActions() and this + * method will be invoked again. + * If the list is empty, it will call applyFilters() to continue the filtering. + * @see applyFilters() + * @see slotMailDownloadedforDownloadActions() + */ + void getNextMailForDownloadActions(); + + /** + * Returns whether the given directory is a maildir directory + * @param path the directory for test + * @return TRUE - directory is a maildir directory + */ + bool isMailDir( const QDir& path ); + + /** + * Writes the given mail into the mailbox. + * @param mail the Mail + * @param box path to the mailbox + * @return TRUE - Writing was succesful + */ + bool writeToMailBox( const QString& mail, const QString& box ); + + private slots: + + /** + * Connected with signal result of the launched pop3 job. + * Removes the deleted mail from the internal mail list (m_pshowrecord). + * Removes the first mail from MailsToDelete and invokes + * deleteNextMail() again to delete the next mail. + * If the list is empty after it has removed the first item, it will call + * commitDelete(). + * If an error is occured, it will call slotFinalizeDeletion(). + * @param job job which has emit the result signal + * @see deleteNextMail() + * @see MailsToDelete + * @see pop3Job + * @see slotFinalizeDeletion() + */ + void slotMailDeleted( KIO::Job* job ); + + /** + * Connected with the signal result of the job which commits the deletion. + * Finalizes the deletion of mails. + * Emits signal sigDeleteReady. + * @see deleteNextMail() + * @see slotMailDeleted() + * @see sigDeleteReady + */ + void slotFinalizeDeletion( KIO::Job* ); + + /** + * Connected with signal result of the launched pop3 job to + * download a mail body. + * Opens a window (class ShowMailDialog) with the downloaded mail body. + * Removes the first mail from MailsToShow and invokes showNextMail() + * again to show the next mail. + * If the list is empty after it has removed the first item, it will call + * commitDownloading(). + * If an error is occured, it will call slotFinalizeShowMail(). + * @param job job which has emit the result signal + * @see showNextMail() + * @see commitDownloading() + * @see MailsToShow + * @see pop3Job + * @see slotFinalizeShowMail() + * @see ShowMailDialog + */ + void slotBodyDownloaded( KIO::Job* job ); + + /** + * Connected with signal result of the launched pop3 job to + * download a mail to write it into a mailbox or do a spam check. + * Maybe it puts the number of the downloaded mail into the list of mails to delete (MailsToDelete). + * Removes the first mail from MailsToMove and invokes getNextMailForMove() + * again to get and write the next mail. + * If the list is empty after it has removed the first item, it will call + * applyFilters() to continue the filtering. + * If an error is occured the current mail will not put into MailsToDelete. And it returns + * to applyFilters() immediately. + * @param job job which has emit the result signal + * @see MailsToDownload + * @see getNextMailForDownloadActions() + * @see applyFilters() + */ + void slotMailDownloadedForAction( KIO::Job* job ); + + /** + * Connected with signal data of the launched pop3 job to + * download a mail body. + * Receives the downloaded data from the job. This lot will be called + * several times during the donwload. At the last one the array is empty. + * It extracts the body from the downloaded data and stores it in DownloadedMailBody. + * @param datas the downloaded mail + */ + void slotDataMailBody( KIO::Job*, const QByteArray & datas ); + + /** + * Connected with the signal result of the job which commits the download + * of the mail bodies. + * Finalizes the downloading and showing of the selected mails. + * Emits signal sigShowBodiesReady and sets account state to idle. + * @see showNextMail() + * @see slotBodyDownloaded() + * @see sigShowBodiesReady + */ + void slotFinalizeShowMail( KIO::Job* ); + + /** + * Connected with signal timeout() of the timeout timer pop3Timer. + * Will be called when the timer is run down, if the pop3 job + * has not ended on time. + * It kills a running pop3 job and invokes the appropriate finalize slot + * of the running operation. + */ + void slotTimeout(); + + /** + * Connected with the signal "data" of the pop3 transfer job which gets mail + * UIDs (Unique ID). Therefore it will be called when the job has received + * an UIDL from the server. Every received UID causes a call of this slot. + * When the job ends, it causes a last call but with an empty data array. + * The UIDs will be stored in receivedUIDs. + * @param data received data, which contain an uid + */ + void slotReceiveUID( KIO::Job*, const QByteArray& data ); + + /** + * Connected with signal result of the launched pop3 job to get the UIDs. + * Will be invoked, when all UIDs are received and stored in receivedUIDs. + * Analyzes the received UID datas and creates new ShowRecordElem instances + * in the new mail list accordingly. + * @param job job which has emitted the result signal + */ + void slotUIDsReceived( KIO::Job* job ); + + /** + * Connected with the signal "data" of the pop3 transfer job which gets mail + * Sizes. Therefore it will be called when the job has received + * a size from the server. Every received size causes a call of this slot. + * When the job ends, it causes a last call but with an empty data array. + * The UIDs will be stored in receivedSizes. + * @param data received data, which contain a size + */ + void slotReceiveSize( KIO::Job*, const QByteArray& data ); + + /** + * Connected with signal result of the launched pop3 job to get the Sizes. + * Will be invoked, when all Sizes are received and stored in receivedSizes. + * Analyzes the received datas and writes these in the appropriate mail instances. + * @param job job which has emitted the result signal + */ + void slotSizesReceived( KIO::Job* job ); + + + /** + * Connected with signal result of the job which commits the refresh. + * Finalizes a succesful refresh. + * Emits sigRefreshReady and sets account state to idle + */ + void slotFinalizeRefresh( KIO::Job* ); + + /** + * Connected with signal result of the launched pop3 job. + * Stores the received headers into the appropriate instance of the mail list. + * Removes the first mail from newMails and invokes + * getNextHeader() again to get the next header. + * If the list is empty after it has removed the first item, it will call + * copyHeaders(). + * If an error has occured, it will call cancelRefresh(). + * @param job job which has emit the result signal + * @see getNextHeader() + * @see newMails + * @see pop3Job + * @see cancelRefresh() + * @see copyHeaders() + */ + void slotHeaderDownloaded( KIO::Job* job ); + + /** + * Connected with the signal "data" of the pop3 transfer job which gets a mail + * header. Therefore it will be called when the job has received + * a part of the header from the server. + * When the job ends, it causes a last call but with an empty data array. + * The complete header will be stored in receivedHeader. + * @param data received data, which contains a header part + */ + void slotReceiveHeader( KIO::Job*, const QByteArray& data ); + + /** + * Connected with the result signal of the pop3 job launched by commitBeforeRefresh() + * Restarts a second refresh cycle after a deletion performed by the filter. + * @see commitBeforeRefresh + * @see applyFiltersDeleted + */ + void slotCommitBeforeRefreshDone( KIO::Job* ); + + + signals: + + /** + * Will be emitted when all selected mails are deleted. + * @param account name of the account, which has emitted this signal + */ + void sigDeleteReady( QString account ); + + /** + * Will be emitted when the bodies of all selected mails are + * downloaded and shown. + * @param account name of the account, which has emitted this signal + */ + void sigShowBodiesReady( QString account ); + + /** + * Will be emitted when the settings have been changed. + */ + void sigConfigChanged(); + + /** + * Will be emitted, when a window to show a message was opened. + */ + void sigMessageWindowOpened(); + + /** + * Will be emitted, when a window to show a message was closed. + */ + void sigMessageWindowClosed(); + + /** + * Will be emitted, when the mail list was refreshed. + * @param account name of the account, which has emitted this signal + */ + void sigRefreshReady( QString account ); + + protected: + + /** + * Forwards the given mail to SpamAssassin and returns the test result + * @param mail the mail to test + * @return TRUE - mail is spam + */ + bool isSpam( QByteArray mail ) const; + + /** + * Looks for a running spamd daemon of SpamAssassin. + * @return TRUE - SpamAssassin is running + */ + bool isSpamAssassinRunning() const; + + + +}; +#endif diff --git a/kshowmail/configlist.cpp b/kshowmail/configlist.cpp new file mode 100644 index 0000000..0098550 --- /dev/null +++ b/kshowmail/configlist.cpp @@ -0,0 +1,1203 @@ +/*************************************************************************** + configlist.cpp - description + ------------------- + begin : Tue May 9 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.de + + 26 Sep 2002 - Allow for columns to be hidden. Allistar Melville + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include "configlist.h" + +ConfigList::ConfigList() : QObject() +{ + setAutoDelete (true); + + //assume, no window to show a mail is open at beginning + ctrOpenMessageWindows = 0; + + //set default values + m_bShowMessage = DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW; + m_bShowMainWindow = DEFAULT_ACTION_NEW_MAIL_MAINWINDOW; + m_bBeep = DEFAULT_ACTION_NEW_MAIL_BEEP; + m_bSound = DEFAULT_ACTION_NEW_MAIL_SOUND; + m_bCommand = DEFAULT_ACTION_NEW_MAIL_COMMAND; + m_bMinimize = DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE; + m_bTerminate = DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE; + + m_bConfirmClose = DEFAULT_CONFIRM_CLOSE; + m_bConfirmDelete = DEFAULT_CONFIRM_DELETE; + m_bStartMinimized = DEFAULT_START_MINIMIZED; + m_bCloseMinimizes = DEFAULT_CLOSE_TO_TRAY; + m_bMinimizeToTray = DEFAULT_MINIMIZE_TO_TRAY; + m_bShowConnectionErrors = DEFAULT_SHOW_CONNECTION_ERRORS; + m_bKeepNew = DEFAULT_KEEP_NEW; + m_nInitTimer = DEFAULT_INITIAL_TIME; + m_nIntervalTimer = DEFAULT_INTERVAL_TIME; + m_nPop3Timer = DEFAULT_TIMEOUT_TIME; + +} + +int ConfigList::compareItems( QCollection::Item item1, QCollection::Item item2 ) +{ + ConfigElem* p1 = (ConfigElem*)item1; + ConfigElem* p2 = (ConfigElem*)item2; + + return strcmp( p1->getAccountName(), p2->getAccountName() ); +} + +QCollection::Item ConfigList::newItem( QCollection::Item item ) +{ + return new ConfigElem( (ConfigElem*)item ); +} + +void ConfigList::saveOptions () +{ + kdDebug () << "ConfigList::saveOptions" << endl; + + //create XML document + QDomDocument doc( "KShowmail" ); + + //create root element + QDomElement accounts = doc.createElement( ROOT_ELEMENT ); + + //create for every account an element + //the account saves its mails into this element + //after that the element will be appended to the root element + int i = 0; + ConfigElem* account = NULL; //current processed account + QPtrListIterator it( *this ); //iterator for the account list + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + //save mails + QDomElement accElem = doc.createElement( QString( ACCOUNT_ELEMENT ) + QString( "%1" ).arg( i++ ) ); + account->saveOptions( doc, accElem ); //account saves the mails into given XML document and the setup into the application config file + accounts.appendChild( accElem ); + + } + + //append root element to XML document + doc.appendChild( accounts ); + + //save XML document + QCString str = doc.toCString(); //convert XML document to a string + QString cachefilename = locateLocal( "config", MAIL_FILE ); //get file path + KSaveFile file( cachefilename, 0600 ); //create file + + if( file.status() != 0 ) + { + kdError() << "Couldn't save mail cache. " << strerror( file.status() ); + return; + } + + //write data + file.file()->writeBlock( str.data(), str.length() ); + + //close file + if( !file.close() ) + { + kdError () << "Couldn't save mail cache. " << strerror(file.status()); + return; + } +} + + +void ConfigList::setList (QListView* list) +{ + QPixmap pix (::locate ("data", "kshowmail/pics/ok.png")); + list->clear (); + int nIndex = at (); + QListViewItem* last = NULL; + for (ConfigElem* pElem = first(); pElem; pElem = next()) + { + last = new QListViewItem (list, last, "", pElem->getAccountName(), pElem->getURL().host(), pElem->getURL().user(), "?"); + pElem->setListViewItem( last ); + if (pElem->isActive()) + pElem->getListViewItem()->setPixmap (0, pix); + } + + if (nIndex >= 0) + { + at (nIndex); +// list->setCurrentItem (nIndex); + } +} + + +bool ConfigList::setItem (const char* item) +{ + int nPos = at (); + ConfigElem* pActive = new ConfigElem (this, item); + bool result = (find (pActive) >= 0); + delete pActive; + if (result) + return true; + else + { + at (nPos); + return false; + } +} + +void ConfigList::beep () +{ + if (m_bBeep) + kapp->beep (); +} + +void ConfigList::playSound () +{ + if (m_bSound) + playSound (m_strSoundFile); +} + +void ConfigList::playSound (const char* file) +{ + KAudioPlayer::play(file); +} + +int ConfigList::getRefreshTimeInterval( ) const +{ + return m_nIntervalTimer; +} + +void ConfigList::setRefreshTimeInterval( unsigned int interval ) +{ + m_nIntervalTimer = interval; +} + +bool ConfigList::AutoRefreshOn( ) const +{ + return ( m_nIntervalTimer > 0 ); +} + +bool ConfigList::hasActiveAccounts( ) +{ + bool activeAccountFound = false; //when a active account was found, this will be set to TRUE + ConfigElem* currentAccount; //saved current account + ConfigElem* Account; //used by the search + + //save the current account + currentAccount = current(); + + //get the first account + Account = first(); + + //looking for an active account + while( Account != NULL && !activeAccountFound ) + { + //have we found one? + activeAccountFound = Account->isActive(); + + //get next account + Account = next(); + } + + //set the saved account to current + if( currentAccount != NULL ) + findRef( currentAccount ); + + //return the result + return activeAccountFound; +} + + +uint ConfigList::getTimeoutTime( ) const +{ + return m_nPop3Timer; +} + +void ConfigList::setTimeoutTime( uint time ) +{ + if( time < MINIMUM_TIMEOUT_TIME ) + m_nPop3Timer = MINIMUM_TIMEOUT_TIME; + else + m_nPop3Timer = time; +} + +ConfigElem* ConfigList::getSelectedAccount( ) +{ + //get the first account in the list + ConfigElem* account = first(); + + //return NULL if there are no accounts + if( account == NULL ) + return NULL; + + //return the account, if it is selected + if( account->isSelected() ) + return account; + + //iterate over all accounts + bool selectedAccountFound = false; //is TRUE, if a selected account was found + while( account != NULL && !selectedAccountFound ) + { + //get next account + account = next(); + + //is the account selected? + if( account != NULL ) + selectedAccountFound = account->isSelected(); + else + selectedAccountFound = false; + } + + //return the current account if we have found a selected account + //otherwise return FALSE + if( selectedAccountFound ) + return account; + else + return NULL; +} + +void ConfigList::deleteSelectedMails( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //clear the map, which contains the names of the accounts, + //which have gotten an order to delete + AccountDeletionMap.clear(); + + //refresh connects + connectAccounts(); + + //inserts an item for every account which will get an order to delete + //its selected mails. The key is the account name and the data is TRUE. + //it is important to do this in a seperate iteration because this avoids + //race conditions + while( ( account = it.current() ) != NULL ) + { + //insert item + AccountDeletionMap.insert( account->getAccountName(), true ); + + //get next account + ++it; + } + + //order all accounts to delete its selected mail + it.toFirst(); + while( ( account = it.current() ) != NULL ) + { + account->deleteSelectedMails(); + + //get next account + ++it; + } +} + +void ConfigList::slotAccountConfigChanged( ) +{ + emit sigConfigChanged(); +} + +void ConfigList::slotCheckDeletionState( QString account ) +{ + bool accountDeleting = false; //set to TRUE if an account is still deleting + AccountTaskMap_Type::Iterator it; //iterator over the account deletion map + + //set the appropriate item in AccountDeletionMap to FALSE + AccountDeletionMap[ account ] = false; + + //iterate over the account deletion map to check, whether all accounts + //are ready + for ( it = AccountDeletionMap.begin(); it != AccountDeletionMap.end(); ++it ) + { + if( *it == true ) + accountDeleting = true; + } + + //emit sigDeleteReady if all accounts are ready + if( !accountDeleting ) + emit sigDeleteReady(); +} + +void ConfigList::connectAccounts( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to connect + + while( ( account = it.current() ) != NULL ) + { + //disconnect old connections + account->disconnect(); + + //connect + connect( account, SIGNAL( sigConfigChanged() ), this, SLOT( slotAccountConfigChanged() ) ); + connect( account, SIGNAL( sigDeleteReady( QString ) ), this, SLOT( slotCheckDeletionState( QString ) ) ); + connect( account, SIGNAL( sigShowBodiesReady( QString ) ), this, SLOT( slotCheckShowBodiesState( QString ) ) ); + connect( account, SIGNAL( sigMessageWindowOpened() ), this, SLOT( slotMessageWindowOpened() ) ); + connect( account, SIGNAL( sigMessageWindowClosed() ), this, SLOT( slotMessageWindowClosed() ) ); + connect( account, SIGNAL( sigRefreshReady( QString ) ), this, SLOT( slotCheckRefreshState( QString ) ) ); + + //get next account + ++it; + } +} + +void ConfigList::setConfirmDeletion( bool confirm ) +{ + m_bConfirmDelete = confirm; +} + +bool ConfigList::confirmDeletion( ) +{ + return m_bConfirmDelete; +} + +QStringList ConfigList::getSelectedSubjects( ) const +{ + QStringList subjects; //contains all subjects + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //current account + + while( ( account = it.current() ) != NULL ) + { + //get subjects of the current account and append them to the list + subjects += account->getSelectedSubjects(); + + //get next account + ++it; + } + + return subjects; +} + +bool ConfigList::hasSelectedMails( ) +{ + bool foundSelected = false; //set to TRUE, when an account with selected mails was found + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //current account + + while( ( account = it.current() ) != NULL && !foundSelected ) + { + foundSelected = account->hasSelectedMails(); + + //get next account + ++it; + } + + return foundSelected; + +} + +void ConfigList::showSelectedMails( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //clear the map, which contains the names of the accounts, + //which have gotten an order to show mails + AccountShowBodiesMap.clear(); + + //refresh connects + connectAccounts(); + + //inserts an item for every account which will get an order to show + //its selected mails. The key is the account name and the data is TRUE. + //it is important to do this in a seperate iteration because this avoids + //race conditions + while( ( account = it.current() ) != NULL ) + { + //insert item + AccountShowBodiesMap.insert( account->getAccountName(), true ); + + //get next account + ++it; + } + + //order all accounts to show its selected mail + it.toFirst(); + while( ( account = it.current() ) != NULL ) + { + account->showSelectedMails(); + + //get next account + ++it; + } + +} + +void ConfigList::slotCheckShowBodiesState( QString account ) +{ + bool accountDownloading = false; //set to TRUE if an account is downloading mail body yet + AccountTaskMap_Type::Iterator it; //iterator over the account map + + //set the appropriate item in AccountShowBodiesMap to FALSE + AccountShowBodiesMap[ account ] = false; + + //iterate over the account map to check, whether all accounts + //are ready + for ( it = AccountShowBodiesMap.begin(); it != AccountShowBodiesMap.end(); ++it ) + { + if( *it == true ) + accountDownloading = true; + } + + //emit sigShowBodiesReady if all accounts are ready + //and assume all windows to show the mails are closed + if( !accountDownloading ) + { + emit sigShowBodiesReady(); + ctrOpenMessageWindows = 0; + } +} + +void ConfigList::setAllowHTML( bool allowHTML ) +{ + m_bAllowHTML = allowHTML; +} + +bool ConfigList::allowHTML( ) const +{ + return m_bAllowHTML; +} + +void ConfigList::slotMessageWindowOpened( ) +{ + //increment the window counter + ctrOpenMessageWindows++; + + //if the counter was incremented from zero + //(the first window was opened), emit the + //signal + if( ctrOpenMessageWindows == 1 ) + emit sigMessageWindowOpened(); +} + +void ConfigList::slotMessageWindowClosed( ) +{ + //decrement the window counter + ctrOpenMessageWindows--; + if( ctrOpenMessageWindows < 0 ) + ctrOpenMessageWindows = 0; + + //if counter is zero (all windows was closed), + //emit signal + if( ctrOpenMessageWindows == 0 ) + emit sigAllMessageWindowsClosed(); +} + +void ConfigList::refreshMailLists( FilterLog* log ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //return, if no accounts available + if( count() == 0 ) + { + emit sigRefreshReady(); + return; + } + + //clear the map, which contains the names of the accounts, + //which have gotten an order to show mails + AccountRefreshMap.clear(); + + //refresh connects + connectAccounts(); + + //inserts an item for every account which will get an order to refresh + //its mail list. The key is the account name and the data is TRUE. + //it is important to do this in a seperate iteration because this avoids + //race conditions + while( ( account = it.current() ) != NULL ) + { + //insert item + AccountRefreshMap.insert( account->getAccountName(), true ); + + //get next account + ++it; + } + + //order all accounts to refresh their mail lists + it.toFirst(); + while( ( account = it.current() ) != NULL ) + { + account->refreshMailList( log ); + + //get next account + ++it; + } + +} + +void ConfigList::slotCheckRefreshState( QString account ) +{ + bool accountRefreshing = false; //set to TRUE if an account is still refreshing + AccountTaskMap_Type::Iterator it; //iterator over the account map + + //set the appropriate item in AccountRefreshMap to FALSE + AccountRefreshMap[ account ] = false; + + //iterate over the account map to check whether all accounts + //are ready + for ( it = AccountRefreshMap.begin(); it != AccountRefreshMap.end(); ++it ) + { + if( *it == true ) + accountRefreshing = true; + } + + //emit sigRefreshReady if all accounts are ready + if( !accountRefreshing ) + { + emit sigRefreshReady(); + } + +} + +int ConfigList::getNumberNewMails( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + int number = 0; //number of new mails + + //iterate over all accounts and sum up the number of new mails + while( ( account = it.current() ) != NULL ) + { + if( account->isActive() ) + number += account->getNumberNewMails(); + + //get next account + ++it; + } + + return number; +} + +int ConfigList::getNumberMails( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + int number = 0; //number of mails + + //iterate over all accounts and sum up the number of mails + while( ( account = it.current() ) != NULL ) + { + if( account->isActive() ) + number += account->getNumberMails(); + + //get next account + ++it; + } + + return number; +} + +long ConfigList::getTotalSize( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + long size = 0; //total size of all mails + + //iterate over all accounts and sum up the size of all mails + while( ( account = it.current() ) != NULL ) + { + if( account->isActive() ) + size += account->getTotalSize(); + + //get next account + ++it; + } + + return size; +} + +void ConfigList::fillMailListView( KshowmailView * view ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //iterate over all accounts and order the active accounts to fill their mails + //into the list view + while( ( account = it.current() ) != NULL ) + { + if( account->isActive() ) + account->fillMailListView( view ); + + //get next account + ++it; + } + +} + +bool ConfigList::showMainWindowForNewMails( ) +{ + return m_bShowMainWindow; +} + +bool ConfigList::showAlertMessageForNewMails( ) +{ + return m_bShowMessage; +} + +bool ConfigList::quitNoNewMails( ) +{ + return m_bTerminate; +} + +bool ConfigList::minimizeMainWindowNoNewMails( ) +{ + return m_bMinimize; +} + +int ConfigList::getInitTime( ) +{ + return m_nInitTimer; +} + +void ConfigList::setInitTime( int time ) +{ + if( time >= 0 ) + m_nInitTimer = time; + else + m_nInitTimer = 0; +} + +bool ConfigList::hasInitTime( ) +{ + return m_nInitTimer > 0; +} + +void ConfigList::refreshAccountList( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //iterate over all accounts and order the account to refresh its + //account list view item + while( ( account = it.current() ) != NULL ) + { + account->refreshAccountListItem(); + + //get next account + ++it; + } + +} + +void ConfigList::killPOP3Jobs( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + + //iterate over all accounts and order the account to kill + //a running pop3 job + while( ( account = it.current() ) != NULL ) + { + account->killPOP3Job(); + + //get next account + ++it; + } +} + +void ConfigList::showSelectedHeaders( ) +{ + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //account to process + int showNextHeader = ConfigElem::continueShowHeaders; //return value of ConfigElem::showSelectedHeaders + + //iterate over all accounts and order the account to show + //the headers of all selected mails. + while( ( account = it.current() ) != NULL && showNextHeader == ConfigElem::continueShowHeaders ) + { + if( account->hasSelectedMails() ) + showNextHeader = account->showSelectedHeaders(); + + //get next account + ++it; + } +} + +void ConfigList::refreshSetup( KListView* view ) +{ + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //read actions group + config->setGroup( CONFIG_GROUP_ACTIONS ); + + m_bShowMessage = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW, DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW ); + m_bShowMainWindow = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_MAINWINDOW, DEFAULT_ACTION_NEW_MAIL_MAINWINDOW ); + m_bBeep = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_BEEP, DEFAULT_ACTION_NEW_MAIL_BEEP ); + m_bSound = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_SOUND, DEFAULT_ACTION_NEW_MAIL_SOUND ); + m_strSoundFile = config->readEntry( CONFIG_ENTRY_NEW_MAIL_SOUNDPATH ); + m_bCommand = config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_COMMAND, DEFAULT_ACTION_NEW_MAIL_COMMAND ); + m_strCommandPath = config->readEntry( CONFIG_ENTRY_NEW_MAIL_COMMANDPATH ); + m_bMinimize = config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE, DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE ); + m_bTerminate = config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE, DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE ); + + //read general group + config->setGroup( CONFIG_GROUP_GENERAL ); + m_bConfirmClose = config->readBoolEntry( CONFIG_ENTRY_CONFIRM_CLOSE, DEFAULT_CONFIRM_CLOSE ); + m_bConfirmDelete = config->readBoolEntry( CONFIG_ENTRY_CONFIRM_DELETE, DEFAULT_CONFIRM_DELETE ); + m_bStartMinimized = config->readBoolEntry( CONFIG_ENTRY_START_MINIMIZED, DEFAULT_START_MINIMIZED ); + m_bCloseMinimizes = config->readBoolEntry( CONFIG_ENTRY_CLOSE_TO_TRAY, DEFAULT_CLOSE_TO_TRAY ); + m_bMinimizeToTray = config->readBoolEntry( CONFIG_ENTRY_MINIMIZE_TO_TRAY, DEFAULT_MINIMIZE_TO_TRAY ); + m_bShowConnectionErrors = config->readBoolEntry( CONFIG_ENTRY_SHOW_CONNECTION_ERRORS, DEFAULT_SHOW_CONNECTION_ERRORS ); + m_bKeepNew = config->readBoolEntry( CONFIG_ENTRY_KEEP_NEW, DEFAULT_KEEP_NEW ); + + m_nInitTimer = config->readNumEntry( CONFIG_ENTRY_INITIAL_TIME, DEFAULT_INITIAL_TIME ); + m_nIntervalTimer = config->readNumEntry( CONFIG_ENTRY_INTERVAL_TIME, DEFAULT_INTERVAL_TIME); + m_nPop3Timer = config->readNumEntry( CONFIG_ENTRY_TIMEOUT_TIME, DEFAULT_TIMEOUT_TIME ); + + //read display group + config->setGroup( CONFIG_GROUP_VIEW ); + m_bAllowHTML = config->readBoolEntry( CONFIG_ENTRY_VIEW_USE_HTML, DEFAULT_VIEW_USE_HTML ); + + //read Spam configs + config->setGroup( CONFIG_GROUP_SPAMCHECK ); + int intSpamAction = config->readNumEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ); + + switch( intSpamAction ) + { + case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : spamAction = FActDelete; break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : spamAction = FActMark; break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : spamAction = FActMove; break; + default : + kdError() << "Invalid value in " << CONFIG_ENTRY_SPAMCHECK_ACTION << ". Set default value." << endl; + switch( DEFAULT_SPAMCHECK_ACTION ) + { + case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : spamAction = FActDelete; break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : spamAction = FActMark; break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : spamAction = FActMove; break; + default : spamAction = FActMark; break; + } + + } + + if( spamAction == FActMove ) + spamMailbox = config->readEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX, DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ); + + + //read account configuration and setup accounts + //--------------------------------------------- + + //get account names from the config file + config->setGroup( CONFIG_GROUP_ACCOUNTS ); + QStringList accounts = config->readListEntry( CONFIG_ENTRY_ACCOUNTS_LIST, QStringList() ); + + //remove deleted accounts from the account list + //accounts are deleted, if the are in ConfigList yet, but not in the list of the config file (accounts) + ConfigElem* accountDel = NULL; //current processed account + QPtrListIterator iter( *this ); //iterator for the account list (ConfigList) + + //iterate over all accounts (ConfigList) + while( ( accountDel = iter.current() ) != NULL ) + { + //increment iterator to get next account + ++iter; + + //search for the current account in the account list of the config file + QStringList::Iterator foundAccount = accounts.find( accountDel->getAccountName() ); + + //remove account from ConfigList, if it is not in the list of the config file + if( foundAccount == accounts.end() ) + remove( accountDel ); + } + + //add or edit accounts + ConfigElem* acc; + //iterate over all items of the account list of the config file + for( QStringList::Iterator it = accounts.begin(); it != accounts.end(); ++it ) + { + //create a new account, if it is not in the list yet (ConfigList) + //or get the account + if( !hasAccount( *it ) ) + { + //create new account + acc = new ConfigElem( this, *it ); + inSort( acc ); + + //the pointer list inserts a copy of the new account object + //we have to delete the original + delete acc; + } + + //get account from ConfigList + acc = getAccount( *it ); + + //get the setup of the account from the config file and setup the account + config->setGroup( *it ); + + acc->setHost( config->readEntry( CONFIG_ENTRY_ACCOUNT_SERVER, DEFAULT_ACCOUNT_SERVER ) ); + + //set protocol and security + //if the read protocol is POP3 and SSL is enabled, the account protocol will set to "pop3s" + QString proto = config->readEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, DEFAULT_ACCOUNT_PROTOCOL ).lower(); + int secureTransfer = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, DEFAULT_ACCOUNT_SECTRANSFER ); + + if( proto == "pop3" && secureTransfer == CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL ) + { + acc->setProtocol( "pop3s" ); + } + else + { + acc->setProtocol( proto ); + } + + if( secureTransfer == CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ) + acc->setTLS( true ); + else + acc->setTLS( false ); + + + acc->setPort( config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PORT, DEFAULT_ACCOUNT_PORT_POP3 ) ); + acc->setUser( config->readEntry( CONFIG_ENTRY_ACCOUNT_USER, DEFAULT_ACCOUNT_USER ) ); + acc->setActive( config->readBoolEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, DEFAULT_ACCOUNT_ACTIVE ) ); + int StorageType = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + + switch( StorageType ) + { + case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE: + acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ); + acc->setPassword( QString::null ); + break; + + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE: + acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ); + acc->setPassword( Encryption::decrypt( config->readEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, DEFAULT_ACCOUNT_PASSWORD ) ) ); + break; + + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET: + acc->setPasswordStorage( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ); + acc->setPassword( KWalletAccess::getPassword( *it ) ); + break; + + default: + acc->setPasswordStorage( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + acc->setPassword( QString::null ); + } + + //order the account to reloads its filter setup + acc->reloadFilterSettings(); + } + + //connect the signals of the accounts with ConfigList + connectAccounts(); + + //refresh account list view + setList( view ); +} + +void ConfigList::executeNewMailCommand( ) +{ + if( m_bCommand ) + { + if( m_strCommandPath != QString::null && m_strCommandPath != "" ) + { + KShellProcess proc; //process handler to execute the binary + + proc << m_strCommandPath; + + proc.start( KShellProcess::DontCare ); + } + } +} + +bool ConfigList::keepNew( ) +{ + return m_bKeepNew; +} + +bool ConfigList::confirmClose( ) const +{ + return m_bConfirmClose; +} + +bool ConfigList::startMinimized( ) const +{ + return m_bStartMinimized; +} + +bool ConfigList::closeToTray( ) const +{ + return m_bCloseMinimizes; +} + +bool ConfigList::minimizesToTray( ) const +{ + return m_bMinimizeToTray; +} + +bool ConfigList::showConnectionErrors( ) const +{ + return m_bShowConnectionErrors; +} + +bool ConfigList::hasAccount( const QString & name ) const +{ + bool found = false; //TRUE if we have found the given account + ConfigElem* account; //account from which we want to get its name + QPtrListIterator it( *this ); //iterator for the account list + + //iterate over all accounts + while( ( account = it.current() ) != NULL && !found ) + { + //increment iterator to next account + ++it; + + //if current account is the searched one set found to TRUE + if( account->getAccountName() == name ) + found = true; + } + + return found; +} + +ConfigElem * ConfigList::getAccount( const QString & name ) const +{ + bool found = false; //TRUE if we have found the given account + ConfigElem* account = NULL; //account from which we want to get its name + QPtrListIterator it( *this ); //iterator for the account list + ConfigElem* returnValue = NULL; + + //iterate over all accounts + while( ( account = it.current() ) != NULL && !found ) + { + //increment iterator to next account + ++it; + + //if current account is the searched one set found to TRUE + if( account->getAccountName() == name ) + { + found = true; + returnValue = account; + } + } + + return returnValue; +} + +void ConfigList::printSetup( ) +{ + ConfigElem* account = NULL; //account from which we want to print the setup + QPtrListIterator it( *this ); //iterator for the account list + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + //print setup + account->printSetup(); + } +} + +void ConfigList::readStoredMails( ) +{ + //open file + QString MailFileName = locateLocal( "config", MAIL_FILE ); + QFile file( MailFileName ); + bool fileOpen = file.open( IO_ReadOnly ); + + //return, if the file could not be opened + if( !fileOpen ) + { + kdError() << "ConfigList::readStoredMails: File " << MailFileName << " could not be opened." << endl; + return; + } + + //create DOM document with the content read from the file + QDomDocument doc( MAIL_FILE_DOCTYPE ); + QString* errorMsg = new QString(); + + bool success = doc.setContent( &file ); + if( !success ) + { + kdError() << "ConfigList::readStoredMails: Invalid content in " << MAIL_FILE << ". " << *errorMsg << endl; + } + + //get the root element + QDomElement accounts = doc.namedItem ( ROOT_ELEMENT ).toElement(); + + //get the first account element + QDomNode accNode = accounts.firstChild(); + + //get all account elements + while( !accNode.isNull() ) + { + //convert account node to DOM element + QDomElement accElem = accNode.toElement(); + + //get the account name + QString accName = accElem.attribute( ATTRIBUTE_ACCOUNT_NAME ); + + //get the proper account object + ConfigElem* account = getAccount( accName ); + + //order the account to read its stored mails + account->readStoredMails( accElem ); + + //get next account node + accNode = accNode.nextSibling(); + } + + //close file + file.close(); +} + +FilterAction_Type ConfigList::getSpamAction( ) +{ + return spamAction; +} + +QString ConfigList::getSpamMailbox( ) +{ + return spamMailbox; +} + +int ConfigList::numberDeletedMailsLastRefresh( ) +{ + ConfigElem* account = NULL; + QPtrListIterator it( *this ); //iterator for the account list + int number = 0; + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + number += account->numberDeletedMailsLastRefresh(); + } + + return number; +} + +int ConfigList::numberDeletedMailsStart( ) +{ + ConfigElem* account = NULL; + QPtrListIterator it( *this ); //iterator for the account list + int number = 0; + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + number += account->numberDeletedMailsStart(); + } + + return number; +} + +int ConfigList::numberMovedMailsLastRefresh( ) +{ + ConfigElem* account = NULL; + QPtrListIterator it( *this ); //iterator for the account list + int number = 0; + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + number += account->numberMovedMailsLastRefresh(); + } + + return number; +} + +int ConfigList::numberMovedMailsStart( ) +{ + ConfigElem* account = NULL; + QPtrListIterator it( *this ); //iterator for the account list + int number = 0; + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + number += account->numberMovedMailsStart(); + } + + return number; +} + +int ConfigList::numberIgnoredMails( ) +{ + ConfigElem* account = NULL; + QPtrListIterator it( *this ); //iterator for the account list + int number = 0; + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + number += account->numberIgnoredMails(); + } + + return number; +} + +QStringList ConfigList::getSelectedSenders( ) const +{ + QStringList senders; //contains all senders + QPtrListIterator it( *this ); //to iterate over all accounts + ConfigElem* account; //current account + + while( ( account = it.current() ) != NULL ) + { + //get senders of the current account and append them to the list + senders += account->getSelectedSenders(); + + //get next account + ++it; + } + + return senders; +} + +void ConfigList::refreshFilterSetup( ) +{ + ConfigElem* account; //account + QPtrListIterator it( *this ); //iterator for the account list + + //iterate over all accounts + while( ( account = it.current() ) != NULL ) + { + //increment iterator to next account + ++it; + + //reload filter setup of the current account + account->reloadFilterSettings(); + } + +} + + diff --git a/kshowmail/configlist.h b/kshowmail/configlist.h new file mode 100644 index 0000000..97418cd --- /dev/null +++ b/kshowmail/configlist.h @@ -0,0 +1,734 @@ +/*************************************************************************** + configlist.h - description + ------------------- + begin : Tue May 9 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + (C) 2007 by Ulrich Weigelt + email : eggert.ehmke@berlin.de + ulrich.weigelt@gmx.de + + 26 Sep 2002 - Allow for columns to be hidden. Allistar Melville + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 CONFIGLIST_H +#define CONFIGLIST_H + +//Qt header +#include +#include +#include + +//KDE headers +#include +#include +#include + +//KShowmail headers +#include "configelem.h" +#include "constants.h" +#include "kshowmailview.h" +#include "types.h" +#include "encryption.h" +#include "kwalletaccess.h" +#include "filteritem.h" +#include "headerfilter.h" +#include "filterlog.h" + +using namespace Constants; +using namespace Types; +using namespace Encryption; + +class ConfigElem; +class KshowmailView; + +/** + * Contains the application and account settings. The account + * settings are stored in ConfigElem objects. + * @author Eggert Ehmke + * @author Ulrich Weigelt + */ +class ConfigList : public QObject, public QPtrList +{ + + Q_OBJECT + + public: + + /** + * Constructor. + */ + ConfigList (); + + /** + * Destructor + */ + virtual ~ConfigList () {}; + + /** + * Reads the setup from the configuration file (kshowmailrc) and + * sets the properties. + * @param view pointer to the account list view + */ + void refreshSetup( KListView* view ); + + /** + * Reloads the filter settings + */ + void refreshFilterSetup(); + + /** + * Returns the auto refresh time interval. + * @return refresh time interval [minutes] + */ + int getRefreshTimeInterval() const; + + /** + * Sets the auto refresh time interval. + * @param interval the new time interval [minutes] + */ + void setRefreshTimeInterval( unsigned int interval ); + + /** + * Returns whether auto refresh is on. + * @return TRUE - auto refresh is on; FALSE - auto refresh is off + */ + bool AutoRefreshOn() const; + + /** + * Sets whether the user has to confirm a deletion. + * @param confirm TRUE - user has to confirm; FALSE - the user does not have to confirm + */ + void setConfirmDeletion( bool confirm ); + + /** + * Returns whether the user has to confirm a deletion. + * @return TRUE - the user has to confirm + * @return FALSE - the user does not have to confirm + */ + bool confirmDeletion(); + + /** + * Returns whether the user has to confirm window close. + * @return TRUE - user has to confirm + * @return FALSE - user does not have to confirm + */ + bool confirmClose() const; + + /** + * Returns whether the app shall start minimized. + * @return TRUE - start minimized + * @return FALSE - don't start minimized + */ + bool startMinimized() const; + + /** + * Returns whether the close button leaves the application running in tray. + * @return TRUE - leaves running + * @return FALSE - app will be closed + */ + bool closeToTray() const; + + /** + * Returns whether minimizes to the tray rather than to the taskbar. + * @return TRUE - minimizes to the tray + * @return FALSE - minimizes to the taskbar + */ + bool minimizesToTray() const; + + /** + * Returns whether connection errors will be shown during refresh. + * @return TRUE - show errors + * @return FALSE - don't show errors + */ + bool showConnectionErrors() const; + + /** + * Sets whether the mail show dialog has to use HTML. + * @param allowHTML TRUE - the dialog has to use HTML; FALSE - the dialog must not use HTML + * @see m_bAllowHTML + * */ + void setAllowHTML( bool allowHTML ); + + /** + * Returns whether the mail show dialog has to use HTML. + * @return TRUE - the dialog has to use HTML + * @return FALSE - the dialog must not use HTML + * @see m_bAllowHTML + */ + bool allowHTML() const; + + /** + * Returns whether there are active accounts. + * Doesn't set the current account. + * @return TRUE - Yes, there are active accounts (at least one :o) ); FALSE - no active accounts + */ + bool hasActiveAccounts(); + + /** + * Returns the number of seconds the application will be wait for a pop3 job. + * @return seconds to timeout + */ + uint getTimeoutTime() const; + + /** + * Sets the number of seconds the application will be wait for a pop3 job. + * Minimum time is POP3_MINIMUM_TIMEOUT_TIME seconds. + * @param time seconds to timeout + * @see constants.h + */ + void setTimeoutTime( uint time ); + + /** + * Returns the first account, for which an appropriate item is + * selected in the account list view. + * @return pointer to the selected account object + * @return NULL - no account is selected + */ + ConfigElem* getSelectedAccount(); + + /** + * Deletes all selected mails from the servers and the mail lists. + * This just starts the deletion and returns after then. When all + * accounts are ready the signal sigDeleteReady will be emitted. + */ + void deleteSelectedMails(); + + /** + * Connects the signals of the accounts with the slots of this + * class. + * It is necessary to do this after an account has been appended to the + * list and it is a good idea to call this method before you invoke + * an operation on an account that may emit a signal. + * The reason is that the pointer list seemingly often changes the + * adresses of the inserted accounts. After that the connections are corrupt. + */ + void connectAccounts(); + + /** + * Returns the subjects of the selected mails. + * @return subjects of selected mails + */ + QStringList getSelectedSubjects() const; + + /** + * Returns whether there are mails in this list which are selected + * in the list view. + * @return TRUE - there are selected mails + * @return FALSE - there aren't selected mails + */ + bool hasSelectedMails(); + + /** + * Downloads and shows the bodies of the selected mails. + * This just starts the download and returns after then. When all + * bodies are downloaded and shown the signal sigShowBodiesReady will be + * emitted. + */ + void showSelectedMails(); + + /** + * Refreshes the mail list of all accounts. + * This just starts the refresh and returns after then. When all + * accounts have refreshed their mail list the signal sigRefreshReady will be + * emitted. + * @param log Pointer to the filter log. + */ + void refreshMailLists( FilterLog* log = NULL ); + + /** + * Returns the number of new mails. + * @return number of new mails + */ + int getNumberNewMails(); + + /** + * Returns the number of mails. + * @return number of mails + */ + int getNumberMails(); + + /** + * Returns the total size of all mails. + * @return total size + */ + long getTotalSize(); + + /** + * Creates for every mail a list view item and inserts it + * into the mail list view. + * @param view pointer to the application view + */ + void fillMailListView( KshowmailView* view ); + + /** + * Returns whether the main window will be shown, if + * new mails was received. + * @return TRUE - main window will be shown + * @return FALSE - main window will not be shown + */ + bool showMainWindowForNewMails(); + + /** + * Returns whether an alert message will be shown if + * new mails were received. + * @return TRUE - will be shown + * @return FALSE - will not be shown + */ + bool showAlertMessageForNewMails(); + + /** + * Returns whether the app will be terminated if + * no new mails were received. + * @return TRUE - will be terminated + * @return FALSE - will not be terminated + */ + bool quitNoNewMails(); + + /** + * Returns whether the main window will be minimized, if + * no new mails were received. + * @return TRUE - main window will be minimized + * @return FALSE - main window will not be minimized + */ + bool minimizeMainWindowNoNewMails(); + + /** + * Returns the configured time to the first refresh. + * @return time to the first refresh (seconds) + */ + int getInitTime(); + + /** + * Sets the time to the first refresh. + * @param time time (seconds) to the first refresh + */ + void setInitTime( int time ); + + /** + * Returns whether a time to first refresh is configured. + * @return TRUE - init time configured + * @return FALSE - no init time configured + */ + bool hasInitTime(); + + /** + * Refreshes the account list (number of mails and total size). + */ + void refreshAccountList(); + + /** + * Kills all running pop3 jobs. + */ + void killPOP3Jobs(); + + /** + * Shows the headers of all selected mails. + */ + void showSelectedHeaders(); + + /** + * Executes the configure new mail command. + * Does nothing, if the command option is switched off (m_bCommand == false). + */ + void executeNewMailCommand(); + + /** + * Returns whether all new mails will keep new status until the app is closed. + * @return TRUE - mails keep new status at next refresh + * @return FALSE - mails don't keep new status at next refresh + */ + bool keepNew(); + + /** + * Prints the setup. + */ + void printSetup(); + + /** + * Saves the current mails data and the account setups. + * The mails data will be saved into an XML file (kshowmail.xml). + * The account setups will be saved into the application config file (kshowmailrc). + */ + void saveOptions(); + + /** + * Reads stored mails data. + * At every setup saving (e.g. at exit) the mails data will be stored into the file kshowmail.xml. + * At application start we read this file to identify mails which are not new at first refresh. + */ + void readStoredMails(); + + /** + * Returns the action to used on spam mails + * @return action to used on spam mails + */ + FilterAction_Type getSpamAction(); + + /** + * Returns the mailbox for spam mails + * @return mailbox for spam + */ + QString getSpamMailbox(); + + /** + * Returns the number of deleted mails by last refresh. + * @return number of deleted mails by last refresh + */ + int numberDeletedMailsLastRefresh(); + + /** + * Returns the number of deleted mails since start. + * @return number of deleted mails since start + */ + int numberDeletedMailsStart(); + + /** + * Returns the number of moved mails by last refresh. + * @return number of moved mails by last refresh + */ + int numberMovedMailsLastRefresh(); + + /** + * Returns the number of moved mails since start. + * @return number of moved mails since start + */ + int numberMovedMailsStart(); + + /** + * Returns the number of ignored mails by last refresh. + * @return number of ignored mails by last refresh + */ + int numberIgnoredMails(); + + /** + * Returns the senders of the selected mails + * @return senders of the selected mails + */ + QStringList getSelectedSenders() const; + + bool setItem (const char* item); + void setList (QListView* list); + void beep (); + void playSound (); + void playSound (const char* file); + + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Time in minutes to the next automatic refresh. + */ + int m_nIntervalTimer; + + /** + * Number of seconds the application will wait for a pop3 job to complete. + */ + uint m_nPop3Timer; + + /** + * This map is used by the delete methods. + * deleteSelectedMails() clears it and after that inserts for every account + * an item. The Key is the account name and the data is TRUE. + * When slotCheckDeletionState() is invoked by a signal sent by an account, + * this slot will set the appropriate item data to FALSE. If the data of all + * items are set to FALSE, the method will know all accounts have ended the + * deletion and will emit sigDeleteReady. + * @see deleteSelectedMails() + * @see slotCheckDeletionState() + */ + AccountTaskMap_Type AccountDeletionMap; + + /** + * This map is used by the methods to show the mail body. + * showSelectedMails() clears it and after that inserts for every account + * an item. The Key is the account name and the data is TRUE. + * When slotCheckShowBodiesState() is invoked by a signal sent by an account, + * this slot will set the appropriate item data to FALSE. If the data of all + * items are set to FALSE, the method will know all accounts have shown the + * mail body and will emit sigShowBodiesReady. + * @see showSelectedMails() + * @see slotCheckShowBodiesState() + */ + AccountTaskMap_Type AccountShowBodiesMap; + + /** + * This map is used by the methods to refresh the account mail lists. + * refreshMailLists() clears it and after that inserts for every account + * an item. The Key ist the account name and the data is TRUE. + * When slotCheckRefreshState() is invoked by a signal sent by an account, + * this slot will set the appropriate item data to FALSE. If the data of all + * items are set to FALSE, the method will know all accounts have refreshed their + * mail list and will emit sigRefreshReady. + * @see refreshMailLists() + * @see slotCheckRefreshState() + */ + AccountTaskMap_Type AccountRefreshMap; + + /** + * TRUE - the user has to confirm a deletion, + * FALSE - the user does not have to confirm a deletion + */ + bool m_bConfirmDelete; + + /** + * TRUE - allow HTML formatting in the mail show dialog box + * FALSE - don't allow HTML formatting + * @see setAllowHTML() + * @see allowHTML() + */ + bool m_bAllowHTML; + + /** + * Number of windows, which have been opened by the accounts to show mails. + * Used by slotMessageWindowOpened() and slotMessageWindowClosed(). + * @see slotMessageWindowOpened + * @see slotMessageWindowClosed + */ + int ctrOpenMessageWindows; + + /** + * Contains the time (seconds) to first refresh. + * @see setInitTime() + * @see getInitTime() + */ + int m_nInitTimer; + + /** + * TRUE - If a new mail is arrived an alert window will be shown. + */ + bool m_bShowMessage; + + /** + * TRUE - If a new mail is arrived the main window will be shown. + */ + bool m_bShowMainWindow; + + /** + * TRUE - If a new mail is arrived the system will beep. + */ + bool m_bBeep; + + /** + * TRUE - If a new mail is arrived a sound will be played. + */ + bool m_bSound; + + /** + * Sound file which will be played if a new mail is arrived. + */ + QString m_strSoundFile; + + /** + * TRUE - If a new mail is arrived a command will be executed. + */ + bool m_bCommand; + + /** + * Path to command which will be executed if a new mail is arrived. + */ + QString m_strCommandPath; + + /** + * TRUE - If no new mail is arrived the application will be ended. + */ + bool m_bTerminate; + + /** + * TRUE - If no new mail is arrived the main window will be minimized. + */ + bool m_bMinimize; + + /** + * TRUE - If a connection error occures during refresh an error message will be shown. + */ + bool m_bShowConnectionErrors; + + /** + * TRUE - The user has to confirm window close. + */ + bool m_bConfirmClose; + + /** + * TRUE - the app starts minimized. + */ + bool m_bStartMinimized; + + /** + * TRUE - the close button leaves the application running in tray + */ + bool m_bCloseMinimizes; + + /** + * TRUE - minimizes to the tray rather than to the taskbar + */ + bool m_bMinimizeToTray; + + /** + * TRUE - mails keep new until termination + */ + bool m_bKeepNew; + + /** + * Mailbox for Spam, if configured + */ + QString spamMailbox; + + /** + * Action which shall be done, if the mail is Spam + */ + FilterAction_Type spamAction; + + + protected: + + /** + * Makes a copy from the given account object and returns the pointer to it. + * Reimplementation of QPtrList::newItem(). + * Used by QPtrList to add new items. + * @param item account object + * @return pointer to the new account object + */ + virtual QCollection::Item newItem( QCollection::Item item ); + + /** + * Compares two ConfigElem objects. + * Reimplementation of QPtrList::compareItems(). Used by inSort(). + * @param item1 account 1 + * @param item2 account 2 + * @return 0 if account name 1 == account name 2 + * @return nonzero if account name 2 != account name 2 + */ + virtual int compareItems( QCollection::Item item1, QCollection::Item item2 ); + + /** + * Returns whether the given account is in the list + * @param name name of the searched account + * @return TRUE - account is existent + * @return FALSE - account is not existent + */ + bool hasAccount( const QString& name ) const; + + /** + * Returns the pointer to the account named like the given name. + * @param name of the searched account + * @return account or NULL, if the account was not found + */ + ConfigElem* getAccount( const QString& name ) const; + + protected slots: + + /** + * Connected with signal sigConfigChanged of all accounts. + * Emits the signal sigConfigChanged. + */ + void slotAccountConfigChanged(); + + /** + * Connected with signal sigDeleteReady of all accounts. + * When an account has sent this signal its appropriate item + * in AccountDeletionMap will set to FALSE. + * When all accounts have done the deletion it will emit signal + * sigDeleteReady. + * @param account name of the account which has emitted the signal + * @see AccountDeletionMap + */ + void slotCheckDeletionState( QString account ); + + /** + * Connected with signal sigShowBodiesReady of all accounts. + * When an account has sent this signal its appropriate item + * in AccountShowBodiesMap will set to FALSE. + * When all accounts have shown the mail it will emit signal + * sigShowBodiesReady. + * @param account name of the account which has emitted the signal + * @see AccountShowBodiesMap + */ + void slotCheckShowBodiesState( QString account ); + + /** + * Connected with signal sigMessageWindowOpened of all accounts. + * When an account has sent this signal the counter ctrOpenMessageWindows + * will be incremented. + * When the counter was incremented from zero (the first window was opened) + * the signal sigMessageWindowOpened will be emitted. + * @see ctrOpenMessageWindows + * @see sigMessageWindowOpened + */ + void slotMessageWindowOpened(); + + /** + * Connected with signal sigMessageWindowClosed of all accounts. + * When an account has sent this signal the counter ctrOpenMessageWindows + * will be decremented. + * When the counter has reached zero the signal sigAllMessageWindowsClosed + * will be emitted. + * @see ctrOpenMessageWindows + * @see sigAllMessageWindowsClosed + */ + void slotMessageWindowClosed(); + + /** + * Connected with signal sigRefreshReady of all accounts. + * When an account has sent this signal its appropriate item + * in AccountRefreshMap will set to FALSE. + * When all accounts have refreshed their mail list it will emit + * signal sigRefreshReady. + * @param account name of the account which has emitted the signal + * @see AccountRefreshMap + */ + void slotCheckRefreshState( QString account ); + + signals: + + /** + * Will be emitted when the configuration of an account or of the app + * was changed. + */ + void sigConfigChanged(); + + /** + * Will be emitted when all selected mails are deleted. + */ + void sigDeleteReady(); + + /** + * Will be emitted when all selected mails are shown. + */ + void sigShowBodiesReady(); + + /** + * Will be emitted by slotMessageWindowOpened when an account has + * opened a window to show a mail. + * @see slotMessageWindowOpened + */ + void sigMessageWindowOpened(); + + /** + * Will be emitted by slotMessageWindowClosed when all accounts have + * closed their windows to show mails. + * @see slotMessageWindowClosed + */ + void sigAllMessageWindowsClosed(); + + /** + * Will be emitted, when all accounts have refreshed their mail list. + */ + void sigRefreshReady(); + +}; + +#endif diff --git a/kshowmail/constants.h b/kshowmail/constants.h new file mode 100644 index 0000000..fe91a2a --- /dev/null +++ b/kshowmail/constants.h @@ -0,0 +1,367 @@ +// +// C++ Interface: constants +// +// Description: +// Containts all constants. +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef CONSTANTS_H +#define CONSTANTS_H + +/** + * Contains all constants. + */ +namespace Constants +{ + /** + * Command Line Options + */ + //option for show config dialog at start + #define CMDLINE_CONFIG "configure" + #define CMDLINE_CONFIG_SHORT "c" + //option for looking for new mails at start + #define CMDLINE_REFRESH "refresh" + #define CMDLINE_REFRESH_SHORT "r" + + /** + * Defaults + */ + //general defaults + #define DEFAULT_CONFIRM_CLOSE false + #define DEFAULT_CONFIRM_DELETE true + #define DEFAULT_START_MINIMIZED false + #define DEFAULT_CLOSE_TO_TRAY true + #define DEFAULT_MINIMIZE_TO_TRAY true + #define DEFAULT_SHOW_CONNECTION_ERRORS true + #define DEFAULT_KEEP_NEW false + + #define DEFAULT_INITIAL_TIME 0 + #define DEFAULT_INTERVAL_TIME 0 + #define MINIMUM_TIMEOUT_TIME 5 + #define DEFAULT_TIMEOUT_TIME 30 + + //default actions + #define DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW true + #define DEFAULT_ACTION_NEW_MAIL_MAINWINDOW false + #define DEFAULT_ACTION_NEW_MAIL_BEEP false + #define DEFAULT_ACTION_NEW_MAIL_SOUND false + #define DEFAULT_ACTION_NEW_MAIL_COMMAND false + #define DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE false + #define DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE false + + //default display options + #define DEFAULT_DISPLAY_ACCOUNT_ACTIVE true + #define DEFAULT_DISPLAY_ACCOUNT_ACCOUNT true + #define DEFAULT_DISPLAY_ACCOUNT_SERVER true + #define DEFAULT_DISPLAY_ACCOUNT_USER true + #define DEFAULT_DISPLAY_ACCOUNT_MESSAGES true + #define DEFAULT_DISPLAY_ACCOUNT_SIZE true + #define DEFAULT_DISPLAY_MESSAGE_NUMBER true + #define DEFAULT_DISPLAY_MESSAGE_ACCOUNT true + #define DEFAULT_DISPLAY_MESSAGE_FROM true + #define DEFAULT_DISPLAY_MESSAGE_TO true + #define DEFAULT_DISPLAY_MESSAGE_SUBJECT true + #define DEFAULT_DISPLAY_MESSAGE_DATE true + #define DEFAULT_DISPLAY_MESSAGE_SIZE true + #define DEFAULT_DISPLAY_MESSAGE_CONTENT true + #define DEFAULT_DISPLAY_MESSAGE_STATE true + + //default view options + #define DEFAULT_VIEW_USE_HTML false + + //default column widthes + #define DEFAULT_WIDTH_ACCOUNT_ACTIVE 50 + #define DEFAULT_WIDTH_ACCOUNT_ACCOUNT 100 + #define DEFAULT_WIDTH_ACCOUNT_SERVER 100 + #define DEFAULT_WIDTH_ACCOUNT_USER 100 + #define DEFAULT_WIDTH_ACCOUNT_MESSAGES 80 + #define DEFAULT_WIDTH_ACCOUNT_SIZE 80 + #define DEFAULT_WIDTH_MESSAGE_NUMBER 50 + #define DEFAULT_WIDTH_MESSAGE_ACCOUNT 100 + #define DEFAULT_WIDTH_MESSAGE_FROM 200 + #define DEFAULT_WIDTH_MESSAGE_TO 200 + #define DEFAULT_WIDTH_MESSAGE_SUBJECT 350 + #define DEFAULT_WIDTH_MESSAGE_DATE 100 + #define DEFAULT_WIDTH_MESSAGE_SIZE 80 + #define DEFAULT_WIDTH_MESSAGE_CONTENT 80 + #define DEFAULT_WIDTH_MESSAGE_STATE 50 + + //account defaults + #define DEFAULT_ACCOUNT_NAME "" + #define DEFAULT_ACCOUNT_SERVER "" + #define DEFAULT_ACCOUNT_PROTOCOL "POP3" + #define DEFAULT_ACCOUNT_PORT_POP3 110 + #define DEFAULT_ACCOUNT_PORT_POP3SSL 995 + #define DEFAULT_ACCOUNT_USER "" + #define DEFAULT_ACCOUNT_PASSWORD "" + #define DEFAULT_ACCOUNT_PASSWORD_STORAGE 1 + //1: don't save, 2: save in file, 3: use KWallet + #define DEFAULT_ACCOUNT_ACTIVE true + #define DEFAULT_ACCOUNT_SECTRANSFER 1 + //1: no secure transfer, 2: SSL, 3: TLS + + //filter defaults + #define DEFAULT_FILTER_ACTIVE false + #define DEFAULT_FILTER_OTHERS_ACTION 1 + //1: Pass, 2: Delete, 3: Mark, 4: Move to Mailbox, 5: Spamcheck, 6: Ignore + #define DEFAULT_FILTER_BLACKLIST_ACTION 1 + //1: Delete, 2: Mark + #define DEFAULT_FILTER_NAME "New Filter" + #define DEFAULT_FILTER_CRITERIA_LINKAGE 1 + //1: Match all (AND); 2: Match any (OR) + #define DEFAULT_FILTER_CRITERIA_SOURCE 1 + //1: From, 2: To, 3: Size (Bytes), 4: Subject, 5: Header, 6: Account + #define DEFAULT_FILTER_CRITERIA_COND_TEXT 1 + //1: contains, 2: doesn't contains, 3: equals, 4: doesn't equal, 5: matches regular expression, 6: doesn't match regular expression + #define DEFAULT_FILTER_CRITERIA_COND_NUM 3 + //1: is equal to, 2: is not equal to, 3: is greater than, 4: is greater than or equal to, 5: is less than, 6: is less than or equal to + #define DEFAULT_FILTER_CRITERIA_SIZE 20000 + #define DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE false + #define DEFAULT_FILTER_ACTION 1 + //1: Pass, 2: Delete, 3: Mark, 4: Move to Mailbox, 5: Spamcheck, 6: Ignore + #define DEFAULT_FILTER_ACTION_MOVE_MAILBOX "" + + //Spam check defaults + #define DEFAULT_SPAMCHECK_ACTION 3 + //2: Delete, 3: Mark, 4: Move to Mailbox + #define DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX "" + + + //Log Defaults + #define DEFAULT_LOG_LOG_DELETED_MAILS true + #define DEFAULT_LOG_LOG_MOVED_MAILS true + //the log entires will be deleted after some days (constant value is "days") or at app exit (value is "exit") + #define DEFAULT_LOG_REMOVE_DELETED_MAILS "days" + #define DEFAULT_LOG_REMOVE_MOVED_MAILS "exit" + //number of days the entries will be stored + #define DEFAULT_LOG_HOLDDAYS_DELETED_MAILS 7 + #define DEFAULT_LOG_HOLDDAYS_MOVED_MAILS 7 + + /** + * XML file to store mails + */ + #define MAIL_FILE "kshowmail.xml" + #define MAIL_FILE_DOCTYPE "KShowmail" + #define ROOT_ELEMENT "accounts" + #define ACCOUNT_ELEMENT "account" + #define ATTRIBUTE_ACCOUNT_NAME "account" + #define ATTRIBUTE_MAIL_UID "uidl" + #define ATTRIBUTE_MAIL_SIZE "size" + #define ATTRIBUTE_MAIL_NUMBER "number" + #define ITEM_MAIL_HEADER "header" + #define ITEM_MESSAGE "message" + + /** + * Log + */ + #define LOG_FILE "kshowmaillog.xml" + #define LOG_DOCTYPE "KShowmailLog" + #define LOG_ROOT_ELEMENT "DeletedMails" + #define LOG_ENTRY_ELEMENT "LogEntry" + #define LOG_ENTRY_ATTRIBUTE_DATETIME "DateTime" + #define LOG_ENTRY_ATTRIBUTE_SENDER "Sender" + #define LOG_ENTRY_ATTRIBUTE_ACCOUNT "Account" + #define LOG_ENTRY_ATTRIBUTE_SUBJECT "Subject" + + /** + * Geometry + */ + //Size of the view, which shows the mail text + #define WIDTH_VIEW_MAILBODY 500 + #define HEIGHT_VIEW_MAILBODY 400 + + //Size of the view, which shows the mail header + #define WIDTH_VIEW_MAILHEADER 500 + #define HEIGHT_VIEW_MAILHEADER 400 + + //Size of the text comparative value line of the filter criteria widget + #define WIDTH_FILTER_TEXT_VALUE_LINE 300 + + /** + * Configuration file + */ + #define CONFIG_GROUP_GENERAL "General" + #define CONFIG_ENTRY_CONFIRM_CLOSE "confirmClose" + #define CONFIG_ENTRY_CONFIRM_DELETE "confirmDelete" + #define CONFIG_ENTRY_START_MINIMIZED "startMinimized" + #define CONFIG_ENTRY_CLOSE_TO_TRAY "closeToTray" + #define CONFIG_ENTRY_MINIMIZE_TO_TRAY "minimizeToTray" + #define CONFIG_ENTRY_SHOW_CONNECTION_ERRORS "showConnectionErrors" + #define CONFIG_ENTRY_KEEP_NEW "keepMailsNew" + #define CONFIG_ENTRY_INITIAL_TIME "InitialTime" + #define CONFIG_ENTRY_INTERVAL_TIME "IntervalTime" + #define CONFIG_ENTRY_TIMEOUT_TIME "TimeoutTime" + + #define CONFIG_GROUP_ACTIONS "Actions" + #define CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW "showAlertMessageIfNewMail" + #define CONFIG_ENTRY_NEW_MAIL_MAINWINDOW "showMainWindowIfNewMail" + #define CONFIG_ENTRY_NEW_MAIL_BEEP "beepIfNewMail" + #define CONFIG_ENTRY_NEW_MAIL_SOUND "playSoundIfNewMail" + #define CONFIG_ENTRY_NEW_MAIL_SOUNDPATH "PathToSoundFile" + #define CONFIG_ENTRY_NEW_MAIL_COMMAND "executeCommandIfNewMail" + #define CONFIG_ENTRY_NEW_MAIL_COMMANDPATH "Command" + #define CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE "exitIfNoNewMails" + #define CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE "minimizeMainWindowIfNoNewMails" + + #define CONFIG_GROUP_VIEW "View" + #define CONFIG_ENTRY_VIEW_USE_HTML "useHTML" + + #define CONFIG_GROUP_ACCOUNT_LIST "LayoutAccountList" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE "showAccountListActiveColumn" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT "showAccountListAccountColumn" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER "showAccountListServerColumn" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_USER "showAccountListUserColumn" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES "showAccountListMessagesColumn" + #define CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE "showAccountListSizeColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE "oldWidthAccountListActiveColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT "oldWidthAccountListAccountColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER "oldWidthAccountListServerColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER "oldWidthAccountListUserColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES "oldWidthAccountListMessagesColumn" + #define CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE "oldWidthAccountListSizeColumn" + + + #define CONFIG_GROUP_MESSAGE_LIST "LayoutMessageList" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER "showMessageListNumberColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT "showMessageListAccountColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_FROM "showMessageListFromColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_TO "showMessageListToColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT "showMessageListSubjectColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_DATE "showMessageListDateColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE "showMessageListSizeColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT "showMessageListContentColumn" + #define CONFIG_ENTRY_DISPLAY_MESSAGE_STATE "showMessageListStateColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER "oldWidthMessageListNumberColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT "oldWidthMessageListAccountColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM "oldWidthMessageListFromColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO "oldWidthMessageListToColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT "oldWidthMessageListSubjectColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE "oldWidthMessageListDateColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE "oldWidthMessageListSizeColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT "oldWidthMessageListContentColumn" + #define CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE "oldWidthMessageListStateColumn" + + #define CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE 1 + #define CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE 2 + #define CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET 3 + #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE 1 + #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL 2 + #define CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS 3 + + #define CONFIG_GROUP_ACCOUNTS "Accounts" + #define CONFIG_ENTRY_ACCOUNTS_LIST "NamesList" + + #define CONFIG_ENTRY_ACCOUNT_NAME "Name" + #define CONFIG_ENTRY_ACCOUNT_SERVER "Server" + #define CONFIG_ENTRY_ACCOUNT_PROTOCOL "Protocol" + #define CONFIG_ENTRY_ACCOUNT_PORT "Port" + #define CONFIG_ENTRY_ACCOUNT_USER "User" + #define CONFIG_ENTRY_ACCOUNT_PASSWORD "Password" + #define CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE "PasswordStorage" + #define CONFIG_ENTRY_ACCOUNT_ACTIVE "Active" + #define CONFIG_ENTRY_ACCOUNT_SECTRANSFER "SecureTransfer" + + + //general filter + #define CONFIG_GROUP_FILTER "Filter" + + #define CONFIG_ENTRY_FILTER_ACTIVE "Active" + + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS 1 + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE 2 + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK 3 + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE 4 + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK 5 + #define CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE 6 + + #define CONFIG_ENTRY_FILTER_OTHERS_ACTION "ActionForOthers" + #define CONFIG_ENTRY_FILTER_OTHERS_MAILBOX "MailboxForOthers" + + #define CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE 1 + #define CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK 2 + + #define CONFIG_ENTRY_FILTER_BLACKLIST_ACTION "ActionBlacklist" + #define CONFIG_ENTRY_FILTER_BLACKLIST "Blacklist" + #define CONFIG_ENTRY_FILTER_WHITELIST "Whitelist" + #define CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS "NumberFilters" + + //single filter + #define CONFIG_ENTRY_FILTER_NAME "Name" + #define CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE "CriteriaLinkage" + #define CONFIG_ENTRY_FILTER_CRITERIA_NUMBER "CriteriaNumber" + #define CONFIG_ENTRY_FILTER_CRITERIA_SOURCE "CriteriaSource" + #define CONFIG_ENTRY_FILTER_CRITERIA_CONDITION "CriteriaCondition" + #define CONFIG_ENTRY_FILTER_CRITERIA_VALUE "CriteriaValue" + #define CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE "CriteriaCaseSensitive" + #define CONFIG_ENTRY_FILTER_ACTION "Action" + #define CONFIG_ENTRY_FILTER_MOVE_MAILBOX "Mailbox" + + #define CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL 1 + #define CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY 2 + + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM 1 + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO 2 + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE 3 + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT 4 + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER 5 + #define CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT 6 + + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS 1 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS 2 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS 3 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS 4 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR 5 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR 6 + + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL 1 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL 2 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER 3 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL 4 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS 5 + #define CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL 6 + + #define CONFIG_VALUE_FILTER_ACTION_PASS 1 + #define CONFIG_VALUE_FILTER_ACTION_DELETE 2 + #define CONFIG_VALUE_FILTER_ACTION_MARK 3 + #define CONFIG_VALUE_FILTER_ACTION_MOVE 4 + #define CONFIG_VALUE_FILTER_ACTION_SPAMCHECK 5 + #define CONFIG_VALUE_FILTER_ACTION_IGNORE 6 + + //Spamcheck + #define CONFIG_GROUP_SPAMCHECK "Spamcheck" + + #define CONFIG_ENTRY_SPAMCHECK_ACTION "Action" + #define CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX "Mailbox" + + #define CONFIG_VALUE_SPAMCHECK_ACTION_DELETE 2 + #define CONFIG_VALUE_SPAMCHECK_ACTION_MARK 3 + #define CONFIG_VALUE_SPAMCHECK_ACTION_MOVE 4 + + //Log + #define CONFIG_GROUP_LOG "Log" + #define CONFIG_ENTRY_LOG_LOG_DELETED_MAILS "LogDeletedMails" + #define CONFIG_ENTRY_LOG_LOG_MOVED_MAILS "LogMovedMails" + #define CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS "RemoveEventOfDeletedMails" + #define CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS "RemoveEvendOfMovedMails" + #define CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS "HoldDaysOfDeletedMails" + #define CONFIG_ENTRY_LOG_HOLDDAYS_MOVED_MAILS "HoldDaysOfMovedMails" + + #define CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT "exit" + #define CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS "days" + + //Status Bar + #define STATUSBAR_FIELD_STATE 1 + #define STATUSBAR_FIELD_FILTER 2 + #define STATUSBAR_FIELD_NEXT_REFRESH 3 + #define STATUSBAR_FIELD_LAST_REFRESH 4 + + //Misc + #define NAME_SPAMASSASSIN_DAEMON "spamd" +} +#endif diff --git a/kshowmail/decodeRFC2047.cpp b/kshowmail/decodeRFC2047.cpp new file mode 100644 index 0000000..adf53de --- /dev/null +++ b/kshowmail/decodeRFC2047.cpp @@ -0,0 +1,182 @@ +/*************************************************************************** + decodeRFC2047.cpp - description + ------------------- + begin : Mon Jan 28 2002 + copyright : (C) 2002 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + + +#include "decodeRFC2047.h" + +/* + * These functions have been adapted from the KMail program + */ + +QCString decodeQuotedPrintable(const QCString& aStr) +{ + QCString bStr = aStr; + if (aStr.isNull()) + bStr = ""; + + DwString dwsrc(bStr.data()); + DwString dwdest; + + DwDecodeQuotedPrintable(dwsrc, dwdest); + return dwdest.c_str(); +} + +QCString decodeBase64(const QCString& aStr) +{ + QCString bStr = aStr; + if (aStr.isNull()) + bStr = ""; + while (bStr.length() < 16) bStr += "="; + + DwString dwsrc(bStr.data(), bStr.length()); + DwString dwdest; + QCString result; + + DwDecodeBase64(dwsrc, dwdest); + result = dwdest.c_str(); + return result; +} + +QTextCodec* codecForName(const QCString& _str) +{ + if (_str.isEmpty()) return NULL; + if (_str.lower() == "shift_jis" || _str.lower() == "shift-jis") + return QTextCodec::codecForName("sjis"); + return QTextCodec::codecForName(_str.lower().replace( + QRegExp("windows"), "cp") ); +} + +QString Codecs::decodeRFC2047(const QCString& aStr) +{ + QString result; + QCString charset; + char *pos, *beg, *end, *mid; + QCString str, cstr, LWSP_buffer; + char encoding, ch; + bool valid, lastWasEncodedWord=FALSE; + const int maxLen=200; + int i; + + if (aStr.find("=?") < 0) + return QString::fromLocal8Bit(aStr).replace(QRegExp("\n[\t ]")," "); + + for (pos=aStr.data(); *pos; pos++) + { + // line unfolding + if ( pos[0] == '\r' && pos[1] == '\n' ) { + pos++; + continue; + } + if ( pos[0] == '\n' ) + continue; + // collect LWSP after encoded-words, + // because we might need to throw it out + // (when the next word is an encoded-word) + if ( lastWasEncodedWord && ( pos[0] == ' ' || pos[0] == '\t' ) ) + { + LWSP_buffer += pos[0]; + continue; + } + // verbatimly copy normal text + if (pos[0]!='=' || pos[1]!='?') + { + result += LWSP_buffer + pos[0]; + LWSP_buffer = 0; + lastWasEncodedWord = FALSE; + continue; + } + // found possible encoded-word + beg = pos+2; + end = beg; + valid = TRUE; + // parse charset name + charset = ""; + for (i=2,pos+=2; i=maxLen) valid = FALSE; + else + { + // get encoding and check delimiting question marks + encoding = toupper(pos[1]); + if (pos[2]!='?' || (encoding!='Q' && encoding!='B')) + valid = FALSE; + pos+=3; + i+=3; + } + if (valid) + { + mid = pos; + // search for end of encoded part + while (i=maxLen || !*pos) + valid = FALSE; + } + if (valid) + { + // valid encoding: decode and throw away separating LWSP + ch = *pos; + *pos = '\0'; + str = QCString(mid).left((int)(mid - pos - 1)); + if (encoding == 'Q') + { + // decode quoted printable text + for (i=str.length()-1; i>=0; i--) + if (str[i]=='_') + str[i]=' '; + cstr = decodeQuotedPrintable(str); + } + else + { + // decode base64 text + cstr = decodeBase64(str); + } + QTextCodec *codec = codecForName(charset); + if (!codec) + codec = codecForName(KGlobal::locale()->encoding()); + if (codec) + result += codec->toUnicode(cstr); + else + result += QString::fromLocal8Bit(cstr); + lastWasEncodedWord = TRUE; + + *pos = ch; + pos = end -1; + } + else + { + // invalid encoding, keep separating LWSP. + //result += "=?"; + //pos = beg -1; // because pos gets increased shortly afterwards + pos = beg - 2; + result += LWSP_buffer; + result += *pos++; + result += *pos; + lastWasEncodedWord = FALSE; + } + LWSP_buffer = 0; + } + return result; +} + diff --git a/kshowmail/decodeRFC2047.h b/kshowmail/decodeRFC2047.h new file mode 100644 index 0000000..d4822a9 --- /dev/null +++ b/kshowmail/decodeRFC2047.h @@ -0,0 +1,51 @@ +/*************************************************************************** + decodeRFC2047.h - description + ------------------- + begin : Mon Jan 28 2002 + copyright : (C) 2002 by Eggert Ehmke + email : eggert.ehmke@berlin.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 DECODE_RFC2047_H +#define DECODE_RFC2047_H + +#include +#include + +//Qt header +#include +#include +#include +#include + +//KDE header +#include +#include +#include + + +/** + * Contains functions to decode and encode parts of a mail. + */ +namespace Codecs +{ + + /** + * Decodes a string which is coded according RFC 2047. + * Adapted from KMail. + * @param aStr the coded string + * @return the decoded representation of the given string + */ + QString decodeRFC2047( const QCString& aStr ); + +} + +#endif diff --git a/kshowmail/encryption.cpp b/kshowmail/encryption.cpp new file mode 100644 index 0000000..dd3bcec --- /dev/null +++ b/kshowmail/encryption.cpp @@ -0,0 +1,85 @@ +// +// C++ Implementation: encryption +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "encryption.h" + +//used in crypt() and decrypt() +static const char scramble1 [50] = "C6FDC7A1EDFBB6FEE3DBF5BEBAEFDDF7ABC6FDC7A1EDFBB6"; +static const char hexstr [17] = "0123456789ABCDEF"; + +int Encryption::hexbyt( const char c ) +{ + if( c >= '0' && c <= '9' ) + return c - '0'; + else + return c - 'A' + 10; +} + +const QString Encryption::crypt( const KURL& url ) +{ + char result[50]; + char scramble2[50]; + QString hexresult; + + memset (result, 0, 50); + memset (scramble2, 0, 50); + int pos = url.pass().length () + 1; + unsigned int free = 50 - pos; + + if( url.user().length() <= free ) + { + strcpy( &scramble2[pos], url.user() ); + pos += url.user().length(); + free -= url.user().length(); + } + else + { + memcpy( &scramble2[pos], url.user().latin1(), free ); + free = 0; + } + + if( url.host().length() <= free ) + { + strcpy( &scramble2[pos], url.host() ); + pos += url.host().length(); + free -= url.host().length(); + } + else + { + memcpy( &scramble2[pos], url.host().latin1(), free ); + free = 0; + } + + memcpy( result, url.pass().latin1(), url.pass().length() ); + for (int i = 0; i <= 31; i++) + { + result[i] = (char)( result[i] ^ ( scramble1[i] ^ scramble2[i] ) ); + hexresult += hexstr[ result[i] / 16 ]; + hexresult += hexstr[ result[i] % 16 ]; + } + + return hexresult; +} + +const QString Encryption::decrypt( const QString& pass ) +{ + char result[50]; + + memset( result, 0, 50 ); + int i; + for( i = 0; i <= 31; i++ ) + { + result[i] = (char)hexbyt( pass[ i * 2 ] ) * 16 + hexbyt( pass[ i * 2 + 1 ] ); + result[i] = (char)( result[i] ^ scramble1[i] ); + } + + return result; +} diff --git a/kshowmail/encryption.h b/kshowmail/encryption.h new file mode 100644 index 0000000..376cc26 --- /dev/null +++ b/kshowmail/encryption.h @@ -0,0 +1,46 @@ +// +// C++ Interface: encryption +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +//Qt headers +#include + +//KDE headers +#include + +/** + * @brief Provides functions to crypt and decrypt a password. + */ +namespace Encryption +{ + /** + * Transforms the given hex numeric character to integer. + * For example: a given '2' will transformed to 2; 'B' to 12. + * @param c character to transform [0..9, 'A'..'F']; no lower case letters + * @return integer value of the given character + */ + int hexbyt( const char c ); + + /** + * Encrypts the the password in the given url and returns it. + * The encryption algorithm uses host and user name to crypt the password. + * @param url the url with password, host and user name + * @return encrypted password + */ + const QString crypt( const KURL& url ); + + /** + * Decrypts the given encrypted password. + * @param pass encrypted password + * @return decrypted password + */ + const QString decrypt( const QString& pass ); +} diff --git a/kshowmail/filteritem.cpp b/kshowmail/filteritem.cpp new file mode 100644 index 0000000..97c284b --- /dev/null +++ b/kshowmail/filteritem.cpp @@ -0,0 +1,166 @@ +// +// C++ Implementation: filteritem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filteritem.h" + +FilterItem::FilterItem( uint filterNr ) +{ + //get the application config object + config = KApplication::kApplication()->config(); + + //save number + filterNumber = filterNr; + + //set config group + config->setGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( filterNr ) ); + + //get name + name = config->readEntry( CONFIG_ENTRY_FILTER_NAME ); + + //get number of criterias + numberCriterias = config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER ); + + //get criteria linkage + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ) ) + { + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL : linkage = LinkAll; break; + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY : linkage = LinkAny; break; + default : kdError() << "FilterItem::FilterItem(): Unknown linkage value read. Set ALL. ( Filter " << filterNumber << ")" << endl; + linkage = LinkAll; + break; + } + + //get action + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ) ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : action = FActPass; break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : action = FActDelete; break; + case CONFIG_VALUE_FILTER_ACTION_MARK : action = FActMark; break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : action = FActMove; break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : action = FActIgnore; break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : action = FActSpamcheck; break; + default : kdError() << "FilterItem::FilterItem(): Unknown filter action read. Set PASS. (Filter " << filterNumber << ")" << endl; + action = FActPass; + break; + } + + //get mailbox name if filter action is move + if( action == FActMove ) + { + mailbox = config->readEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX ); + if( mailbox.isNull() || mailbox.isEmpty() ) + { + kdWarning() << "Filter " << filterNumber << ": No mailbox name found. Set default: " << DEFAULT_FILTER_ACTION_MOVE_MAILBOX << endl; + mailbox = QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + } + } + + //now we get the criterias + criterias.setAutoDelete( true ); //the list shall delete all criterias if it will be deleted itself + for( uint critNr = 1; critNr <= numberCriterias; critNr++ ) + { + criterias.append( new FilterItemCriteria( filterNr, critNr ) ); //a new created criteria loads its settings itself + } +} + + +FilterItem::~FilterItem() +{ +} + +FilterAction_Type FilterItem::check( QString from, QString to, uint size, QString subject, QString header, QString account, QString& mailboxName ) const +{ + bool match = false; //TRUE, if filter matches + + //return NONE if no criterias available + if( criterias.isEmpty() ) return FActNone; + + //get iterator + QPtrListIterator it( criterias ); + + FilterItemCriteria* crit; + + //check criterias + if( linkage == LinkAll ) + { + match = true; + while( ( crit = it.current() ) != NULL && match ) + { + ++it; + + match = match && crit->check( from, to, size, subject, header, account ); + } + } + else if( linkage == LinkAny ) + { + match = false; + while( ( crit = it.current() ) != NULL && !match ) + { + ++it; + + match = crit->check( from, to, size, subject, header, account ); + } + } + else + kdError() << "FilterItem::check(): Unknown linkage (Filter " << filterNumber << ")" << endl; + + //return action if filter matches + if( match ) + { + //set mailbox name if neccessary + if( action == FActMove ) + { + mailboxName.remove( 0, mailboxName.length() ); + mailboxName.append( mailbox ); + } + + return action; + } + + //default return value, filter doesn't match + return FActNone; +} + +void FilterItem::print( ) const +{ + kdDebug() << "Settings of filter " << filterNumber << ":" << endl; + kdDebug() << "Name: " << name << endl; + kdDebug() << "Number of criterias: " << numberCriterias << endl; + + switch( linkage ) + { + case LinkAll : kdDebug() << "Criteria Linkage: ALL (AND)" << endl; break; + case LinkAny : kdDebug() << "Criteria Linkage: ANY (OR)" << endl; break; + default : kdDebug() << "Unknown Criteria LInkage" << endl; break; + } + + switch( action ) + { + case FActPass : kdDebug() << "Action: PASS" << endl; break; + case FActDelete : kdDebug() << "Action: DELETE" << endl; break; + case FActMark : kdDebug() << "Action: MARK" << endl; break; + case FActMove : kdDebug() << "Action: MOVE to " << mailbox << endl; break; + case FActSpamcheck : kdDebug() << "Action: SPAMCHECK" << endl; break; + case FActIgnore : kdDebug() << "Action: IGNORE" << endl; break; + default : kdDebug() << "Unknown Action" << endl; break; + } + + kdDebug() << "Criterias:" << endl; + QPtrListIterator it( criterias ); + FilterItemCriteria* crit; + while( ( crit = it.current() ) != NULL ) + { + ++it; + crit->print(); + } +} + + diff --git a/kshowmail/filteritem.h b/kshowmail/filteritem.h new file mode 100644 index 0000000..291bc65 --- /dev/null +++ b/kshowmail/filteritem.h @@ -0,0 +1,117 @@ +// +// C++ Interface: filteritem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERITEM_H +#define FILTERITEM_H + +//Qt headers +#include +#include + +//KDE headers +#include +#include +#include + +//KShowmail headers +#include "filteritemcriteria.h" +#include "constants.h" +#include "types.h" + +using namespace Types; + +/** + * This is a filter item. It contains a list of criterias (class FilterItemCriteria). + * @author Ulrich Weigelt + */ +class FilterItem{ + + public: + + /** + * Constructor + * Loads the settings from the config file + * @param filterNr Number of the filter + */ + FilterItem( uint filterNr ); + + /** + * Destructor + */ + ~FilterItem(); + + /** + * Prints the settings. + */ + void print() const; + + /** + * Checks the given mail header. + * @param from Sender + * @param to Addressee + * @param size Size + * @param subject Subject + * @param header Header + * @param account Account + * @param mailboxName contains the mailbox name after call, if filter action is MOVE + * @return recommend action + */ + FilterAction_Type check( QString from, QString to, uint size, QString subject, QString header, QString account, QString& mailboxName ) const; + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Filter number. Just for messages. + */ + uint filterNumber; + + /** + * Filter name. Just for messages. + */ + QString name; + + /** + * Number of criterias + */ + uint numberCriterias; + + /** + * Type of criteria linkage + */ + enum Linkage_Type{ LinkAll, LinkAny }; + + /** + * Criteria Linkage + */ + Linkage_Type linkage; + + /** + * Filter Action + */ + FilterAction_Type action; + + /** + * Mailbox Name for move action + */ + QString mailbox; + + /** + * This list holds the criterias. + */ + QPtrList criterias; +}; + +#endif diff --git a/kshowmail/filteritemcriteria.cpp b/kshowmail/filteritemcriteria.cpp new file mode 100644 index 0000000..5577a6a --- /dev/null +++ b/kshowmail/filteritemcriteria.cpp @@ -0,0 +1,241 @@ +// +// C++ Implementation: filteritemcriteria +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filteritemcriteria.h" + +FilterItemCriteria::FilterItemCriteria( uint FilterNr, uint CritNr ) +{ + //get the application config object + config = KApplication::kApplication()->config(); + + //save numbers + FilterNumber = FilterNr; + CriteriaNumber = CritNr; + + //get setup + //--------- + + //set group + config->setGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( FilterNr ) ); + + //get source + switch( config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( CritNr ), DEFAULT_FILTER_CRITERIA_SOURCE ) ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : source = SrcFrom; break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : source = SrcTo; break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : source = SrcSubject; break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : source = SrcSize; break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : source = SrcHeader; break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : source = SrcAccount; break; + default : source = SrcFrom; break; + } + + //get condition + if( source == SrcSize ) + { + switch( config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( CritNr ), DEFAULT_FILTER_CRITERIA_COND_NUM ) ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL : numCondition = NumCondEqual; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL : numCondition = NumCondNotEqual; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER : numCondition = NumCondGreater; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL : numCondition = NumCondGreaterEqual; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS : numCondition = NumCondLess; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL : numCondition = NumCondLessEqual; break; + default : numCondition = NumCondGreater; break; + } + } + else + { + switch( config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( CritNr ), DEFAULT_FILTER_CRITERIA_COND_TEXT ) ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS : txtCondition = TxtCondContains; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS : txtCondition = TxtCondNotContains; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS : txtCondition = TxtCondEqual; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS : txtCondition = TxtCondNotEqual; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR : txtCondition = TxtCondRegExpr; break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR : txtCondition = TxtCondNotRegExpr; break; + default : txtCondition = TxtCondContains; break; + } + + cs = config->readBoolEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( CritNr ), DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE ); + } + + //get Value + if( source == SrcSize ) + { + numValue = config->readUnsignedNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( CritNr ) ); + } + else + { + txtValue = config->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( CritNr ) ); + } + +} + +FilterItemCriteria::~FilterItemCriteria() +{ +} + +bool FilterItemCriteria::check( QString from, QString to, uint size, QString subject, QString header, QString account ) const +{ + switch( source ) + { + case SrcFrom : return checkText( from ); break; + case SrcTo : return checkText( to ); break; + case SrcHeader : return checkText( header ); break; + case SrcSize : return checkNum( size ); break; + case SrcSubject : return checkText( subject ); break; + case SrcAccount : return checkText( account ); break; + default : return false; + } + + //this is the default + return false; +} + +bool FilterItemCriteria::checkText( QString value ) const +{ + //return false if the source is not text + if( source != SrcFrom && source != SrcTo && source != SrcHeader && source != SrcSubject && source != SrcAccount ) + { + kdError() << "FilterItemCriteria::checkText: The source is not text. (Filter " << FilterNumber << ", Criteria " << CriteriaNumber << ")" << endl; + return false; + } + + //return false if given value is not valid + if( value.isNull() || value.isEmpty() ) + { + kdError() << "FilterItemCriteria::checkText: The given value is empty or null. (Filter " << FilterNumber << ", Criteria " << CriteriaNumber << ")" << endl; + return false; + } + + //return false if the value of this criteria is an empty string + if( txtValue.isEmpty() || txtValue.isNull() ) + { + kdWarning() << "There is no value for Filter " << FilterNumber << "/Criteria " << CriteriaNumber << endl; + } + + switch( txtCondition ) + { + case TxtCondContains : return value.contains( txtValue, cs ) > 0; break; + + case TxtCondNotContains : return value.contains( txtValue, cs ) < 1; break; + + case TxtCondEqual : if( cs ) + { + return value.localeAwareCompare( txtValue ) == 0; + } + else + { + return QString::localeAwareCompare( txtValue.upper(), value.upper() ) == 0; + } + break; + + case TxtCondNotEqual : if( cs ) + return value.localeAwareCompare( txtValue ) != 0; + else + return value.localeAwareCompare( txtValue.upper(), value.upper() ) != 0; + break; + + case TxtCondRegExpr : return value.find( QRegExp( txtValue ) ) != -1; break; + + case TxtCondNotRegExpr : return value.find( QRegExp( txtValue ) ) == -1; break; + + default : return false; + } + + //default + return false; +} + +bool FilterItemCriteria::checkNum( uint value ) const +{ + //return false if the source is not numeric + if ( source != SrcSize ) + { + kdError() << "FilterItemCriteria::checkNum: The source is not numeric." << endl; + return false; + } + + switch( numCondition ) + { + case NumCondEqual : return value == numValue; break; + case NumCondNotEqual : return value != numValue; break; + case NumCondGreater : return value > numValue; break; + case NumCondGreaterEqual : return value >= numValue; break; + case NumCondLess : return value < numValue; break; + case NumCondLessEqual : return value <= numValue; break; + default : kdError() << "FilterItemCriteria::checkNum: Unknown numeric condiction. Return false." << endl; + } + + //default + return false; +} + +void FilterItemCriteria::print( ) const +{ + QString output; + + output.append( QString( "Criteria %1 of Filter %2: Source: " ).arg( CriteriaNumber ).arg( FilterNumber ) ); + + switch( source ) + { + case SrcFrom : output.append( "From" ); break; + case SrcTo : output.append( "To" ); break; + case SrcAccount : output.append( "Account" ); break; + case SrcHeader : output.append( "Header" ); break; + case SrcSize : output.append( "Size" ); break; + case SrcSubject : output.append( "Subject" ); break; + default : output.append( "unknown" ); break; + } + + output.append( "; Condition: " ); + + if( source == SrcSize ) + { + switch( numCondition ) + { + case NumCondEqual : output.append( QString( "equals %1" ).arg( numValue ) ); break; + case NumCondGreater : output.append( QString( "greater than %1" ).arg( numValue ) ); break; + case NumCondGreaterEqual : output.append( QString( "greater than or equals %1" ).arg( numValue ) ); break; + case NumCondLess : output.append( QString( "less than %1" ).arg( numValue ) ); break; + case NumCondLessEqual : output.append( QString( "less than or equals %1" ).arg( numValue ) ); break; + case NumCondNotEqual : output.append( QString( "not equals %1" ).arg( numValue ) ); break; + default : output.append( QString( "unknown; Value: %1" ).arg( numValue ) ); break; + } + } + else + { + switch( txtCondition ) + { + case TxtCondContains : output.append( QString( "contains %1" ).arg( txtValue ) ); break; + case TxtCondEqual : output.append( QString( "equals %1" ).arg( txtValue ) ); break; + case TxtCondNotContains : output.append( QString( "not contains %1" ).arg( txtValue ) ); break; + case TxtCondNotEqual : output.append( QString( "not equals %1" ).arg( txtValue ) ); break; + case TxtCondRegExpr : output.append( QString( "matches to regular expression %1" ).arg( txtValue ) ); break; + case TxtCondNotRegExpr : output.append( QString( "doesn't match to regular expression %1" ).arg( txtValue ) ); break; + default : output.append( QString( "unknown; Value: %1" ).arg( txtValue ) ); break; + } + + if( txtCondition != TxtCondRegExpr && txtCondition != TxtCondNotRegExpr ) + { + if( cs ) + output.append( " (case sensitive)" ); + else + output.append( " (not case sensitive)" ); + } + } + + kdDebug() << output << endl; +} + + + diff --git a/kshowmail/filteritemcriteria.h b/kshowmail/filteritemcriteria.h new file mode 100644 index 0000000..eaa4d49 --- /dev/null +++ b/kshowmail/filteritemcriteria.h @@ -0,0 +1,146 @@ +// +// C++ Interface: filteritemcriteria +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERITEMCRITERIA_H +#define FILTERITEMCRITERIA_H + +//Qt headers +#include +#include + +//KDE headers +#include +#include +#include + +//Kshowmail headers +#include "types.h" +#include "constants.h" + +/** + * @brief This is a criteria of a filter item. + * For using create an object and call check(). + * It gets its configuration itself from the config file at creation time. You can't reload the setup. + * @author Ulrich Weigelt + */ +class FilterItemCriteria{ + + public: + + /** + * Constructor + * @param FilterNr number of the filter item + * @param CritNr number of this criteria + */ + FilterItemCriteria( uint FilterNr, uint CritNr ); + + /** + * Destructor + */ + ~FilterItemCriteria(); + + /** + * Checks for match. + * @param from Sender + * @param to Addressee + * @param size Size + * @param subject Subject + * @param header Header + * @param account Account + * @return TRUE - the criteria matches; FALSE - the criteria doesn't match + */ + bool check( QString from, QString to, uint size, QString subject, QString header, QString account ) const; + + /** + * Prints the settings. + */ + void print() const; + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Types of source. + */ + enum Source_Type{ SrcFrom, SrcTo, SrcSize, SrcSubject, SrcHeader, SrcAccount }; + + /** + * Source of the criteria. + */ + Source_Type source; + + /** + * Text Condition Types + */ + enum TextCondition_Type{ TxtCondContains, TxtCondNotContains, TxtCondEqual, TxtCondNotEqual, TxtCondRegExpr, TxtCondNotRegExpr }; + + /** + * Numeric Condition Types + */ + enum NumCondition_Type{ NumCondEqual, NumCondNotEqual, NumCondGreater, NumCondGreaterEqual, NumCondLess, NumCondLessEqual }; + + /** + * Text Condition + */ + TextCondition_Type txtCondition; + + /** + * Numeric Condition + */ + NumCondition_Type numCondition; + + /** + * Text Value + */ + QString txtValue; + + /** + * Numeric Value + */ + uint numValue; + + /** + * Case Sensitive; used by text condition + */ + bool cs; + + /** + * Filter number. Just for error messages. + */ + uint FilterNumber; + + /** + * Criteria number. Just for error messages. + */ + uint CriteriaNumber; + + protected: + + /** + * Compares a text value. + * @param value Value to compare + * @return TRUE - value matches; FALSE - value doesn't match + */ + bool checkText( QString value ) const; + + /** + * Compares a numeric value. + * @param value Value to compare + * @return TRUE - value matches; FALSE - value doesn't match + */ + bool checkNum( uint value ) const; +}; + +#endif diff --git a/kshowmail/filterlog.cpp b/kshowmail/filterlog.cpp new file mode 100644 index 0000000..73665cd --- /dev/null +++ b/kshowmail/filterlog.cpp @@ -0,0 +1,235 @@ +// +// C++ Implementation: filterlog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filterlog.h" + +FilterLog::FilterLog() +{ + //get the application config object + config = KApplication::kApplication()->config(); + + //load the setup + loadSetup(); + + //load stored entries + load(); +} + + +FilterLog::~FilterLog() +{ +} + +void FilterLog::addDeletedMail(const QDateTime & dateTime, const QString & sender, const QString & account, const QString & subject) +{ + if( logDeletedMails ) + addEntry( FActDelete, dateTime, sender, account, subject, "" ); +} + +void FilterLog::addMovedMail(const QDateTime & dateTime, const QString & sender, const QString & account, const QString & subject, const QString & mailbox) +{ + if( logMovedMails ) + addEntry( FActMove, dateTime, sender, account, subject, mailbox ); +} + +void FilterLog::addEntry(FilterAction_Type action, const QDateTime & dateTime, const QString & sender, const QString & account, const QString & subject, const QString & mailbox) +{ + //create entry + FilterLogEntry entry = FilterLogEntry( action, dateTime, sender, account, subject, mailbox ); + + //add entry to the appropriate list + switch( action ) + { + case FActDelete : listDeletedMails.append( entry ); break; + case FActMove : listMovedMails.append( entry ); break; + default : kdError( "FilterLog::addEntry: Could not relate the following mail:" ); + entry.print(); + break; + } +} + +void FilterLog::print() +{ + kdDebug() << "Log state:" << endl; + kdDebug() << "----------" << endl; + + //print all entries about deleted mails + kdDebug() << "Deleted mails:" << endl; + LogEntryList::iterator it; + for ( it = listDeletedMails.begin(); it != listDeletedMails.end(); ++it ) + (*it).print(); + + kdDebug() << endl; + + //print all entries about moved mails + kdDebug() << "Moved mails:" << endl; + for ( it = listMovedMails.begin(); it != listMovedMails.end(); ++it ) + (*it).print(); +} + +void FilterLog::clearDeletedMailsLog() +{ + listDeletedMails.clear(); +} + +void FilterLog::clearMovedMailsLog() +{ + listMovedMails.clear(); +} + +void FilterLog::save() +{ + //maybe we have to remove old entries, calculate minimum date + QDateTime minTime = QDateTime::currentDateTime(); + minTime = minTime.addDays( daysStoreDeletedMails * -1 ); + + //we need a XML document + QDomDocument doc( LOG_DOCTYPE ); + + //and a root element + QDomElement rootElem = doc.createElement( LOG_ROOT_ELEMENT ); + doc.appendChild( rootElem ); + + //store the entries of the deleted mails list into the document + //if the user want it + if( deletedMailsStorageMode != exit ) + { + LogEntryList::iterator it; + for ( it = listDeletedMails.begin(); it != listDeletedMails.end(); ++it ) + { + if( (*it).getDate() >= minTime ) + (*it).save( doc, rootElem ); + } + } + + + //get the name of the file to save + QString filename = locateLocal( "appdata", LOG_FILE ); + + //and save + QFile file( filename ); + + if ( file.open( IO_WriteOnly ) ) //open file + { + QTextStream stream( &file ); + doc.save( stream, 2 ); + file.close(); + } + else + { + KMessageBox::error( NULL, i18n( "Could not save the filter log." ) ); + } +} + +void FilterLog::load() +{ + //maybe we have to remove old entries, calculate minimum date + QDateTime minTime = QDateTime::currentDateTime(); + minTime = minTime.addDays( daysStoreDeletedMails * -1 ); + + //we need a XML document + QDomDocument doc( LOG_DOCTYPE ); + + //get the name of the file + QString filename = locateLocal( "appdata", LOG_FILE ); + + //load the log from file into the DOM document + QFile file( filename ); + + if ( !file.open( IO_ReadOnly ) ) + return; //return, if the file can't opened + + if ( !doc.setContent( &file ) ) { + file.close(); //return, if the content of the file is invalid + return; + } + + //the content was loaded, close the file + file.close(); + + //iterate over all DOM elements and generate the log entries + QDomElement docElem = doc.documentElement(); //get root element + + //return, if the root element is not LOG_ROOT_ELEMENT + if( docElem.tagName() != LOG_ROOT_ELEMENT ) return; + + QDomNode n = docElem.firstChild(); //get first child (this is the first log entry) + while( !n.isNull() ) + { + QDomElement e = n.toElement(); //try to convert the node to an element. + if( !e.isNull() ) + { + if( e.tagName() == LOG_ENTRY_ELEMENT ) + { + //add the read entry to the list of deleted mails + QDateTime mailTime = QDateTime::fromString( e.attribute( LOG_ENTRY_ATTRIBUTE_DATETIME ), Qt::ISODate ); + if( mailTime >= minTime ) + addDeletedMail( mailTime, + e.attribute( LOG_ENTRY_ATTRIBUTE_SENDER ), + e.attribute( LOG_ENTRY_ATTRIBUTE_ACCOUNT ), + e.attribute( LOG_ENTRY_ATTRIBUTE_SUBJECT ) ); + } + } + n = n.nextSibling(); //get next child + } +} + +LogEntryList FilterLog::getDeletedMails( ) +{ + return listDeletedMails; +} + +LogEntryList FilterLog::getMovedMails( ) +{ + return listMovedMails; +} + +void FilterLog::loadSetup( ) +{ + config->setGroup( CONFIG_GROUP_LOG ); + + logDeletedMails = config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_DELETED_MAILS, DEFAULT_LOG_LOG_DELETED_MAILS ); + logMovedMails = config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_MOVED_MAILS, DEFAULT_LOG_LOG_MOVED_MAILS ); + + if( logDeletedMails ) + { + QString storageMode = config->readEntry(CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, DEFAULT_LOG_REMOVE_DELETED_MAILS ); + if( storageMode == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + deletedMailsStorageMode = exit; + else if( storageMode == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) + deletedMailsStorageMode = days; + else + deletedMailsStorageMode = days; + + if( deletedMailsStorageMode == days ) + daysStoreDeletedMails = config->readNumEntry( CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS, DEFAULT_LOG_HOLDDAYS_DELETED_MAILS ); + else + daysStoreDeletedMails = 7; + } + else + { + deletedMailsStorageMode = days; + daysStoreDeletedMails = 7; + } +} + +int FilterLog::numberDeletedMails( ) +{ + return listDeletedMails.count(); +} + +int FilterLog::numberMovedMails( ) +{ + return listMovedMails.count(); +} + + + diff --git a/kshowmail/filterlog.h b/kshowmail/filterlog.h new file mode 100644 index 0000000..9896796 --- /dev/null +++ b/kshowmail/filterlog.h @@ -0,0 +1,183 @@ +// +// C++ Interface: filterlog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERLOG_H +#define FILTERLOG_H + +//Qt headers +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "filterlogentry.h" +#include "constants.h" + +/** + * @brief This is the log of the filters. + * It holds two lists of entry objects (class FilterLogEntry). One for the deleted mails and the other one for + * the moved mails. + * + * @author Ulrich Weigelt + */ + +typedef QValueList LogEntryList; + + +class FilterLog{ + + + public: + + /** + * Default constructor + */ + FilterLog(); + + /** + * Destructor + */ + ~FilterLog(); + + /** + * Adds an entry about a deleted mail. + * @param dateTime date and time on which the mail was sent + * @param sender sender of the mail + * @param account Account which has received the mail + * @param subject Subject of the mail + */ + void addDeletedMail( const QDateTime& dateTime, const QString& sender, const QString& account, const QString& subject ); + + /** + * Adds an entry about a moved mail. + * @param dateTime date and time on which the mail was sent + * @param sender sender of the mail + * @param account Account which has received the mail + * @param subject Subject of the mail + * @param mailbox mailbox + */ + void addMovedMail( const QDateTime& dateTime, const QString& sender, const QString& account, const QString& subject, const QString& mailbox ); + + /** + * Prints the log state. + */ + void print(); + + /** + * Clears the log of deleted mails. + */ + void clearDeletedMailsLog(); + + /** + * Clears the log of moved mails. + */ + void clearMovedMailsLog(); + + /** + * Saved the log of deleted mails as XML document. + */ + void save(); + + /** + * Loads the log of deleted mails from the XML document and get settings. + */ + void load(); + + /** + * Returns a copy of the list of deleted mails. + * @return copy of the deleted mails list + */ + LogEntryList getDeletedMails(); + + /** + * Retruns a copy of the list of moved mails. + * @return copy of the moved mails list + */ + LogEntryList getMovedMails(); + + /** + * Loads the settings + */ + void loadSetup(); + + /** + * Returns the number of logged deleted mails. + * @return number of logged deleted mails + */ + int numberDeletedMails(); + + /** + * Returns the number of logged moved mails. + * @return number of logged moved mails + */ + int numberMovedMails(); + + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * List of entries about deleted mails. + */ + LogEntryList listDeletedMails; + + /** + * List of entries about moved mails. + */ + LogEntryList listMovedMails; + + /** + * TRUE - the log accepts orders to log deleted mails + */ + bool logDeletedMails; + + /** + * TRUE - the log accepts orders to log moved mails + */ + bool logMovedMails; + + /** + * exit - hold log of deleted mails until application exit + * days - hold log some days + */ + enum{ exit, days } deletedMailsStorageMode; + + /** + * Time (days) a entry of a deleted mail will be stored. + */ + unsigned int daysStoreDeletedMails; + + protected: + + /** + * adds an entry. + * The target list will be coose on the basis of the given filter action. + */ + void addEntry( FilterAction_Type action, const QDateTime& dateTime, const QString& sender, const QString& account, const QString& subject, const QString& mailbox = QString::null ); + +}; + + +#endif diff --git a/kshowmail/filterlogentry.cpp b/kshowmail/filterlogentry.cpp new file mode 100644 index 0000000..8f9af1c --- /dev/null +++ b/kshowmail/filterlogentry.cpp @@ -0,0 +1,145 @@ + + +// +// C++ Implementation: filterlogentry +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filterlogentry.h" + +FilterLogEntry::FilterLogEntry() +{ + //set default values + sentDateTime.setDate( QDate( 2007, 11, 7 ) ); + sentDateTime.setTime( QTime( 19, 05 ) ); + act = FActNone; +} + +FilterLogEntry::FilterLogEntry( FilterAction_Type action, const QDateTime& dateTime, const QString& sender, const QString& account, const QString& subject, const QString& mailbox) + : act( action ), sentDateTime( dateTime ), sender( sender ), account( account ), subject( subject ), mailbox( mailbox ) +{ +} + +FilterLogEntry::~FilterLogEntry() +{ +} + +void FilterLogEntry::print() +{ + QString strAction; + switch( act ) + { + case FActPass : strAction = "Passed"; break; + case FActDelete : strAction = "Deleted"; break; + case FActMark : strAction = "Marked"; break; + case FActSpamcheck : strAction = "forwarded to check for spam"; break; + case FActMove : strAction = QString( "moved to %1" ).arg( mailbox); break; + case FActNone : strAction = "no Action (THIS IS AN ERROR!)"; break; + default : strAction = "ERROR! UNKNOWN ACTION"; break; + } + + kdDebug() << sentDateTime.toString( Qt::LocalDate ) << ";" << account << ";" << sender << ";" << subject << ";" << strAction << endl; +} + +FilterLogEntry::FilterLogEntry(const FilterLogEntry & ent) +{ + this->sentDateTime = ent.sentDateTime; + this->account = ent.account; + this->sender = ent.sender; + this->subject = ent.subject; + this->act = ent.act; + this->mailbox = ent.mailbox; +} + +FilterLogEntry& FilterLogEntry::operator=( const FilterLogEntry & ent ) +{ + if( this == &ent ) return *this; + + this->sentDateTime = ent.sentDateTime; + this->account = ent.account; + this->sender = ent.sender; + this->subject = ent.subject; + this->mailbox = ent.mailbox; + this->act = ent.act; + + return *this; +} + +bool FilterLogEntry::isOlder( uint days ) +{ + return sentDateTime.date().addDays( days ) < QDate::currentDate(); +} + +bool FilterLogEntry::operator== ( const FilterLogEntry& ent ) const +{ + return sentDateTime == ent.sentDateTime; +} + +bool FilterLogEntry::operator!=( const FilterLogEntry& ent ) const +{ + return sentDateTime != ent.sentDateTime; +} + +bool FilterLogEntry::operator>( const FilterLogEntry& ent ) const +{ + return sentDateTime > ent.sentDateTime; +} + +bool FilterLogEntry::operator>=( const FilterLogEntry& ent ) const +{ + return sentDateTime >= ent.sentDateTime; +} + +bool FilterLogEntry::operator<( const FilterLogEntry& ent ) const +{ + return sentDateTime < ent.sentDateTime; +} + +bool FilterLogEntry::operator<=( const FilterLogEntry & ent ) const +{ + return sentDateTime <= ent.sentDateTime; +} + +void FilterLogEntry::save( QDomDocument& doc, QDomElement& parent ) +{ + //create a new element and store the entry + QDomElement elem = doc.createElement( LOG_ENTRY_ELEMENT ); + elem.setAttribute( LOG_ENTRY_ATTRIBUTE_DATETIME, sentDateTime.toString( Qt::ISODate) ); + elem.setAttribute( LOG_ENTRY_ATTRIBUTE_SENDER, sender ); + elem.setAttribute( LOG_ENTRY_ATTRIBUTE_ACCOUNT, account ); + elem.setAttribute( LOG_ENTRY_ATTRIBUTE_SUBJECT, subject ); + + //add entry element to the log (parent) element + parent.appendChild( elem ); +} + +QDateTime FilterLogEntry::getDate( ) +{ + return sentDateTime; +} + +QString FilterLogEntry::getSender( ) +{ + return sender; +} + +QString FilterLogEntry::getAccount( ) +{ + return account; +} + +QString FilterLogEntry::getSubject( ) +{ + return subject; +} + +QString FilterLogEntry::getMailbox( ) +{ + return mailbox; +} diff --git a/kshowmail/filterlogentry.h b/kshowmail/filterlogentry.h new file mode 100644 index 0000000..9dbd1be --- /dev/null +++ b/kshowmail/filterlogentry.h @@ -0,0 +1,196 @@ +// +// C++ Interface: filterlogentry +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERLOGENTRY_H +#define FILTERLOGENTRY_H + +//Qt headers +#include +#include +#include + +//KDE headers +#include + +//KShowmail headers +#include "types.h" +#include "constants.h" + +using namespace Types; + +/** + * @brief An Object of this class contains the datas about a deleted or moved mail. + * These objects are stored in the lists of the filter log. + * + * @author Ulrich Weigelt + */ + +class FilterLogEntry{ + + public: + + /** + * Default constructor + */ + FilterLogEntry(); + + /** + * General constructor + * @param action executed action + * @param dateTime date and time on which the mail was sent + * @param sender sender of the mail + * @param account Account which has received the mail + * @param subject Subject of the mail + * @param mailbox mailbox where the mails was moved + */ + FilterLogEntry( FilterAction_Type action, const QDateTime& dateTime, const QString& sender, const QString& account, const QString& subject, const QString& mailbox = QString::null ); + + /** + * Copy Constructor + * @param ent source entry + */ + FilterLogEntry( const FilterLogEntry& ent ); + + /** + * Destructor + */ + ~FilterLogEntry(); + + /** + * Assignment operator + * @param ent source entry + */ + FilterLogEntry& operator=( const FilterLogEntry& ent ); + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is equal to te time of the given entry. + */ + bool operator==( const FilterLogEntry& ent ) const; + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is not equal to the time of the given entry. + */ + bool operator!=( const FilterLogEntry& ent ) const; + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is later than the time of the given entry. + */ + bool operator>( const FilterLogEntry& ent ) const; + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is later than or equal to the time of the given entry. + */ + bool operator>=( const FilterLogEntry& ent ) const; + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is earlier than the time of the given entry. + */ + bool operator<( const FilterLogEntry& ent ) const; + + /** + * Compares this entry with the given entry + * @param ent entry to compare + * @return TRUE - the time of this entry is earlier than or equal to the time of the given entry. + */ + bool operator<=( const FilterLogEntry& ent ) const; + + /** + * Prints the datas of this entry to Stdout. + */ + void print(); + + /** + * Returns whether the mail of this entry is older than the given number of days. + * @param days number of days to compare + * @return TRUE - the mail is older than the given date + */ + bool isOlder( uint days ); + + /** + * Stores the entry into the given DOM document as child of the given DOM element. + */ + void save( QDomDocument& doc, QDomElement& parent ); + + /** + * Returns the date and time of send + * @return send date and time + */ + QDateTime getDate(); + + /** + * Returns the sender. + * @return Sender + */ + QString getSender(); + + /** + * Returns the account. + * @return Account + */ + QString getAccount(); + + /** + * Returns the subject + * @return Subject + */ + QString getSubject(); + + /** + * Returns the mailbox + * @return mailbox + */ + QString getMailbox(); + + private: + + /** + * executed action + */ + FilterAction_Type act; + + /** + * Delivery date and time + */ + QDateTime sentDateTime; + + /** + * Sender + */ + QString sender; + + /** + * Account + */ + QString account; + + /** + * Subject + */ + QString subject; + + /** + * mailbox if the mails was moved + */ + QString mailbox; + +}; + +#endif diff --git a/kshowmail/filterlogview.cpp b/kshowmail/filterlogview.cpp new file mode 100644 index 0000000..22a4a54 --- /dev/null +++ b/kshowmail/filterlogview.cpp @@ -0,0 +1,121 @@ +// +// C++ Implementation: filterlogview +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filterlogview.h" + +FilterLogView::FilterLogView( QWidget *parent, FilterLog* log ) + : KDialogBase( parent, "FilterLogView", true, QString::null, Ok, Ok, true ) +{ + //save the log pointer + this->log = log; + + //set caption + setCaption( i18n( "Filter Log View" ) ); + + //main widget + QWidget* pgMain = new QWidget( this ); + setMainWidget( pgMain ); + + //basic layout + QVBoxLayout* layMain = new QVBoxLayout( pgMain, 0, spacingHint() ); + + //view of deleted views + QLabel* lblDeletedMails = new QLabel( i18n( "Deleted Mails:"), pgMain, "lblDeletedMails" ); + layMain->addWidget( lblDeletedMails ); + + lstViewDeleted = new KListView( pgMain, "lstViewDeleted" ); + lstViewDeleted->addColumn( i18n( "Date" ) ); + lstViewDeleted->addColumn( i18n( "Sender" ) ); + lstViewDeleted->addColumn( i18n( "Account" ) ); + lstViewDeleted->addColumn( i18n( "Subject" ) ); + lstViewDeleted->setColumnWidthMode( 0, QListView::Maximum ); + lstViewDeleted->setColumnWidthMode( 1, QListView::Maximum ); + lstViewDeleted->setColumnWidthMode( 2, QListView::Maximum ); + lstViewDeleted->setColumnWidthMode( 3, QListView::Maximum ); + lstViewDeleted->setResizeMode( QListView::NoColumn ); + lstViewDeleted->setSortColumn( 0 ); + lstViewDeleted->setSortOrder( Qt::Ascending ); + layMain->addWidget( lstViewDeleted ); + + KPushButton* btnClearDeleted = new KPushButton( KStdGuiItem::clear(), pgMain, "btnClearDeleted" ); + QToolTip::add( btnClearDeleted, i18n( "Clear the list of deleted mails" ) ); + connect( btnClearDeleted, SIGNAL( clicked() ), this, SLOT( slotClearDeletedMails() ) ); + btnClearDeleted->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); + layMain->addWidget( btnClearDeleted ); + + //create a seperator + layMain->addWidget( new KSeparator( pgMain ) ); + + //view of deleted views + QLabel* lblMovedMails = new QLabel( i18n( "Moved Mails:"), pgMain, "lblMovedMails" ); + layMain->addWidget( lblMovedMails ); + + lstViewMoved = new KListView( pgMain, "lstViewMoved" ); + lstViewMoved->addColumn( i18n( "Date" ) ); + lstViewMoved->addColumn( i18n( "Sender" ) ); + lstViewMoved->addColumn( i18n( "Account" ) ); + lstViewMoved->addColumn( i18n( "Moved To" ) ); + lstViewMoved->addColumn( i18n( "Subject" ) ); + lstViewMoved->setColumnWidthMode( 0, QListView::Maximum ); + lstViewMoved->setColumnWidthMode( 1, QListView::Maximum ); + lstViewMoved->setColumnWidthMode( 2, QListView::Maximum ); + lstViewMoved->setColumnWidthMode( 3, QListView::Maximum ); + lstViewMoved->setColumnWidthMode( 4, QListView::Maximum ); + lstViewMoved->setResizeMode( QListView::NoColumn ); + lstViewMoved->setSortColumn( 0 ); + lstViewMoved->setSortOrder( Qt::Ascending ); + layMain->addWidget( lstViewMoved ); + + KPushButton* btnClearMoved = new KPushButton( KStdGuiItem::clear(), pgMain, "btnClearMoved" ); + QToolTip::add( btnClearMoved, i18n( "Clear the list of moved mails" ) ); + connect( btnClearMoved, SIGNAL( clicked() ), this, SLOT( slotClearMovedMails() ) ); + btnClearMoved->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); + layMain->addWidget( btnClearMoved ); + + //now we load the content for the list views + LogEntryList listDeletedMails = log->getDeletedMails(); + LogEntryList::iterator it; + for( it = listDeletedMails.begin(); it != listDeletedMails.end(); it++ ) + { + //create a new list view item + FilterLogViewDeletedItem* item = new FilterLogViewDeletedItem( lstViewDeleted ); + item->setValues( (*it).getDate(), (*it).getSender(), (*it).getAccount(), (*it).getSubject() ); + } + + LogEntryList listMovedMails = log->getMovedMails(); + for( it = listMovedMails.begin(); it != listMovedMails.end(); it++ ) + { + //create a new list view item + FilterLogViewMovedItem* item = new FilterLogViewMovedItem( lstViewMoved ); + item->setValues( (*it).getDate(), (*it).getSender(), (*it).getAccount(), (*it).getMailbox(), (*it).getSubject() ); + } +} + + +FilterLogView::~FilterLogView() +{ +} + +void FilterLogView::slotClearDeletedMails( ) +{ + log->clearDeletedMailsLog(); + lstViewDeleted->clear(); + +} + +void FilterLogView::slotClearMovedMails( ) +{ + log->clearMovedMailsLog(); + lstViewMoved->clear(); +} + + +#include "filterlogview.moc" diff --git a/kshowmail/filterlogview.h b/kshowmail/filterlogview.h new file mode 100644 index 0000000..a138de8 --- /dev/null +++ b/kshowmail/filterlogview.h @@ -0,0 +1,87 @@ +// +// C++ Interface: filterlogview +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERLOGVIEW_H +#define FILTERLOGVIEW_H + +//Qt headers +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "filterlog.h" +#include "filterlogviewdeleteditem.h" +#include "filterlogviewmoveditem.h" + +/** + * @brief This dialog box shows the filter log. + * @author Ulrich Weigelt + */ +class FilterLogView : public KDialogBase +{ + +Q_OBJECT + + public: + + /** + * General constructor + * @param parent pointer to the parent widget + * @param log pointer to the filter log + */ + FilterLogView( QWidget* parent = NULL, FilterLog* log = NULL ); + + /** + * Destructor + */ + ~FilterLogView(); + + private: + + /** + * Pointer to the filter log. + */ + FilterLog* log; + + /** + * List view of deleted mails + */ + KListView* lstViewDeleted; + + /** + * List view of moved mails + */ + KListView* lstViewMoved; + + private slots: + + /** + * Clears the list of deleted mails. + */ + void slotClearDeletedMails(); + + /** + * Clears th elist of moved mails. + */ + void slotClearMovedMails(); + +}; + +#endif diff --git a/kshowmail/filterlogviewdeleteditem.cpp b/kshowmail/filterlogviewdeleteditem.cpp new file mode 100644 index 0000000..587f079 --- /dev/null +++ b/kshowmail/filterlogviewdeleteditem.cpp @@ -0,0 +1,58 @@ +// +// C++ Implementation: filterlogviewdeleteditem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filterlogviewdeleteditem.h" + +FilterLogViewDeletedItem::FilterLogViewDeletedItem( KListView* parent ) + : KListViewItem( parent ) +{ +} + + +FilterLogViewDeletedItem::~FilterLogViewDeletedItem() +{ +} + +void FilterLogViewDeletedItem::setValues( QDateTime date, QString sender, QString account, QString subject ) +{ + //store values + this->date = date; + this->sender = sender; + this->account = account; + this->subject = subject; + + //set column text + setText( ColDate, date.toString( Qt::LocalDate ) ); + setText( ColSender, sender ); + setText( ColAccount, account ); + setText( ColSubject, subject ); +} + +int FilterLogViewDeletedItem::compare( QListViewItem * i, int col, bool ascending ) const +{ + if( col == ColDate ) + { + if( this->date < ((FilterLogViewDeletedItem*)i)->getDate() ) return -1; + if( this->date > ((FilterLogViewDeletedItem*)i)->getDate() ) return 1; + else return 0; + } + else + return key( col, ascending ).compare( i->key( col, ascending) ); + +} + +QDateTime FilterLogViewDeletedItem::getDate( ) +{ + return date; +} + + + diff --git a/kshowmail/filterlogviewdeleteditem.h b/kshowmail/filterlogviewdeleteditem.h new file mode 100644 index 0000000..6692106 --- /dev/null +++ b/kshowmail/filterlogviewdeleteditem.h @@ -0,0 +1,95 @@ +// +// C++ Interface: filterlogviewdeleteditem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERLOGVIEWDELETEDITEM_H +#define FILTERLOGVIEWDELETEDITEM_H + +//Qt Headers +#include + +//KDE headers +#include + +/** + * @brief Item of the filter log view of deleted mails + * @author Ulrich Weigelt + */ +class FilterLogViewDeletedItem : public KListViewItem +{ + + public: + + /** + * Column Numbers. + */ + enum Column{ ColDate = 0, ColSender = 1, ColAccount = 2, ColSubject = 3 }; + + /** + * Constructor + * @param parent the log view of this items + */ + FilterLogViewDeletedItem( KListView* parent ); + + /** + * Destrutor + */ + ~FilterLogViewDeletedItem(); + + /** + * Sets the column values. + * @param date date and time at which the mail was sent + * @param sender sender of the mail + * @param account account + * @param subject mail subject + */ + void setValues( QDateTime date, QString sender, QString account, QString subject ); + + /** + * Reimplemantation of QListViewItem::compare. + * Compares this list view item to i using the column col in ascending order. Returns <0 if this item is less than i, + * 0 if they are equal and >0 if this item is greater than i. The parameter ascneding will be ignored. + * @param i pointer to the second view item + * @param col number of the sorted column + * @param ascending ignored + */ + virtual int compare( QListViewItem* i, int col, bool ascending ) const; + + /** + * Returns the date of sent + * @return date of sent + */ + QDateTime getDate(); + + + private: + + /** + * sent date and time + */ + QDateTime date; + + /** + * sender of the mail + */ + QString sender; + + /** + * Account + */ + QString account; + + /** + * mail subject + */ + QString subject; +}; + +#endif diff --git a/kshowmail/filterlogviewmoveditem.cpp b/kshowmail/filterlogviewmoveditem.cpp new file mode 100644 index 0000000..80b02ba --- /dev/null +++ b/kshowmail/filterlogviewmoveditem.cpp @@ -0,0 +1,58 @@ +// +// C++ Implementation: filterlogviewmoveditem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filterlogviewmoveditem.h" + +FilterLogViewMovedItem::FilterLogViewMovedItem( KListView * parent ) + : KListViewItem( parent ) +{ +} + + +FilterLogViewMovedItem::~FilterLogViewMovedItem() +{ +} + +void FilterLogViewMovedItem::setValues( QDateTime date, QString sender, QString account, QString mailbox, QString subject ) +{ + //store values + this->date = date; + this->sender = sender; + this->account = account; + this->mailbox = mailbox; + this->subject = subject; + + //set column text + setText( ColDate, date.toString( Qt::LocalDate ) ); + setText( ColSender, sender ); + setText( ColAccount, account ); + setText( ColMailbox, mailbox ); + setText( ColSubject, subject ); +} + +int FilterLogViewMovedItem::compare( QListViewItem * i, int col, bool ascending ) const +{ + if( col == ColDate ) + { + if( this->date < ((FilterLogViewMovedItem*)i)->getDate() ) return -1; + if( this->date > ((FilterLogViewMovedItem*)i)->getDate() ) return 1; + else return 0; + } + else + return key( col, ascending ).compare( i->key( col, ascending) ); + +} + +QDateTime FilterLogViewMovedItem::getDate( ) +{ + return date; +} + diff --git a/kshowmail/filterlogviewmoveditem.h b/kshowmail/filterlogviewmoveditem.h new file mode 100644 index 0000000..9a7a7f8 --- /dev/null +++ b/kshowmail/filterlogviewmoveditem.h @@ -0,0 +1,101 @@ +// +// C++ Interface: filterlogviewmoveditem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERLOGVIEWMOVEDITEM_H +#define FILTERLOGVIEWMOVEDITEM_H + +//Qt Headers +#include + +//KDE headers +#include + +/** + * @brief Item of the filter log view of moved mails + * @author Ulrich Weigelt + */ +class FilterLogViewMovedItem : public KListViewItem +{ + + public: + + /** + * Column Numbers. + */ + enum Column{ ColDate = 0, ColSender = 1, ColAccount = 2, ColMailbox = 3, ColSubject = 4 }; + + /** + * Constructor + * @param parent the log view of this items + */ + FilterLogViewMovedItem( KListView* parent); + + /** + * Destructor + */ + ~FilterLogViewMovedItem(); + + /** + * Sets the column values. + * @param date date and time at which the mail was sent + * @param sender sender of the mail + * @param account account + * @param mailbox mailbox to which the mail was moved + * @param subject mail subject + */ + void setValues( QDateTime date, QString sender, QString account, QString mailbox, QString subject ); + + /** + * Reimplemantation of QListViewItem::compare. + * Compares this list view item to i using the column col in ascending order. Returns <0 if this item is less than i, + * 0 if they are equal and >0 if this item is greater than i. The parameter ascneding will be ignored. + * @param i pointer to the second view item + * @param col number of the sorted column + * @param ascending ignored + */ + virtual int compare( QListViewItem* i, int col, bool ascending ) const; + + /** + * Returns the date of sent + * @return date of sent + */ + QDateTime getDate(); + + + private: + + /** + * sent date and time + */ + QDateTime date; + + /** + * sender of the mail + */ + QString sender; + + /** + * Account + */ + QString account; + + /** + * mail subject + */ + QString subject; + + /** + * mailbox + */ + QString mailbox; +}; + +#endif diff --git a/kshowmail/headerfilter.cpp b/kshowmail/headerfilter.cpp new file mode 100644 index 0000000..10bedf0 --- /dev/null +++ b/kshowmail/headerfilter.cpp @@ -0,0 +1,151 @@ +// +// C++ Implementation: headerfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "headerfilter.h" + +HeaderFilter::HeaderFilter() +{ + //get the application config object + config = KApplication::kApplication()->config(); + + //the filter list shall delete all filters if it will be deleted itself + filters.setAutoDelete( true ); + + //load settings + load(); +} + + +HeaderFilter::~HeaderFilter() +{ +} + +FilterAction_Type HeaderFilter::check( QString from, QString to, uint size, QString subject, QString header, QString account, QString& mailboxName ) const +{ + //return PASS, if filter is not active + if( !active ) + return FActPass; + + //check for matching with blacklist or whitelist + FilterAction_Type action = senderlist.check( from ); + if( action != FActNone ) return action; + + //check for matching with filters + QPtrListIterator it( filters ); + FilterItem* filter; + while( ( filter = it.current() ) != NULL ) + { + ++it; + action = filter->check( from, to, size, subject, header, account, mailboxName ); + + if( action != FActNone ) return action; + } + + //no matching; return default action + if( defaultAction == FActMove ) + { + mailboxName.remove( 0, mailboxName.length() ); + mailboxName.append( mailbox ); + } + return defaultAction; + +} + +void HeaderFilter::load( ) +{ + //order sender list to load its settings + senderlist.load(); + + //set group + config->setGroup( CONFIG_GROUP_FILTER ); + + //get filter active state + active = config->readBoolEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ); + + //get number of filter items + numberFilterItems = config->readNumEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 ); + + //get default action + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : defaultAction = FActPass; break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : defaultAction = FActDelete; break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : defaultAction = FActMark; break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : defaultAction = FActMove; break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : defaultAction = FActIgnore; break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : defaultAction = FActSpamcheck; break; + default : kdError() << "Header Filter: Unknown default filter action. Set PASS." << endl; + defaultAction = FActPass; + break; + } + + //get mailbox name if default action is MOVE + if( defaultAction == FActMove ) + mailbox = config->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + + //now we get the filters + //first clear the list + filters.clear(); + + for( uint filterNr = 1; filterNr <= numberFilterItems; filterNr++ ) + { + filters.append( new FilterItem( filterNr ) ); //a new created filter item loads its settings itself + } +} + +void HeaderFilter::print( ) +{ + kdDebug() << "Header Filter Settings:" << endl; + kdDebug() << "-----------------------" << endl; + + //print active state + if( active ) + kdDebug() << "Header filter is active." << endl; + else + kdDebug() << "Header filter is not active." << endl; + + //print settings of black and white list + senderlist.print(); + + //print filters + kdDebug() << endl; + kdDebug() << "Number of filters: " << numberFilterItems << endl << endl; + + QPtrListIterator it( filters ); + FilterItem* filter; + while( ( filter = it.current() ) != NULL ) + { + ++it; + filter->print(); + kdDebug() << endl; + } + + //print default action for not matched mails + switch( defaultAction ) + { + case FActPass : kdDebug() << "Default action for other mails: PASS" << endl; break; + case FActDelete : kdDebug() << "Default action for other mails: DELETE" << endl; break; + case FActMark : kdDebug() << "Default action for other mails: MARK" << endl; break; + case FActIgnore : kdDebug() << "Default action for other mails: IGNORE" << endl; + case FActMove : kdDebug() << "Default action for other mails: MOVE to " << mailbox << endl; break; + case FActSpamcheck : kdDebug() << "Default action for other mails: SPAMCHECK" << endl; break; + default : kdDebug() << "Unknown default action for other mails" << endl; break; + } + + +} + +bool HeaderFilter::isActive() +{ + return active; +} + + diff --git a/kshowmail/headerfilter.h b/kshowmail/headerfilter.h new file mode 100644 index 0000000..c17a626 --- /dev/null +++ b/kshowmail/headerfilter.h @@ -0,0 +1,117 @@ +// +// C++ Interface: headerfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef HEADERFILTER_H +#define HEADERFILTER_H + +//Qt headers +#include +#include + +//KDE headers +#include +#include +#include + +//KShowmail headers +#include "constants.h" +#include "types.h" +#include "filteritem.h" +#include "senderlistfilter.h" + +/** + * @brief This is the mail header filter. + * Call check() with some header datas of the mail to get the configured action for this mail. + * If the settings was changed by the config GUI you have to call load(). + * @author Ulrich Weigelt + */ +class HeaderFilter{ + + public: + + /** + * Constructor + */ + HeaderFilter(); + + /** + * Destructor + */ + ~HeaderFilter(); + + /** + * Checks the given mail header. + * @param from Sender + * @param to Addressee + * @param size Size + * @param subject Subject + * @param header Header + * @param account Account + * @param mailboxName contains the mailbox name after call, if filter action is MOVE + * @return recommend action + */ + FilterAction_Type check( QString from, QString to, uint size, QString subject, QString header, QString account, QString& mailboxName ) const; + + /** + * Loads the settings from the application config file. + */ + void load(); + + /** + * Prints the settings + */ + void print(); + + /** + * Returns the filter active state. + * @return TRUE - filter is active + */ + bool isActive(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * TRUE - filter is active + */ + bool active; + + /** + * Default action, if no filter matches + */ + FilterAction_Type defaultAction; + + /** + * mailbox name if default action is MOVE + */ + QString mailbox; + + /** + * Number of filter items + */ + uint numberFilterItems; + + /** + * Black and White lists + */ + SenderListFilter senderlist; + + /** + * This list holds the filter items + */ + QPtrList filters; +}; + +#endif diff --git a/kshowmail/kcmconfigs/Makefile.am b/kshowmail/kcmconfigs/Makefile.am new file mode 100644 index 0000000..94cd555 --- /dev/null +++ b/kshowmail/kcmconfigs/Makefile.am @@ -0,0 +1,36 @@ +INCLUDES = $(all_includes) +METASOURCES = AUTO +kde_module_LTLIBRARIES = kcm_kshowmailconfigaccounts.la \ + kcm_kshowmailconfigactions.la kcm_kshowmailconfigdisplay.la kcm_kshowmailconfigfilter.la \ + kcm_kshowmailconfiggeneral.la kcm_kshowmailconfiglog.la kcm_kshowmailconfigspamcheck.la +kcm_kshowmailconfigactions_la_LDFLAGS = -avoid-version -module $(all_libraries) +noinst_HEADERS = accountsetupdialog.h accountsetupitem.h configaccounts.h \ + configactions.h configdisplay.h configfilter.h configgeneral.h configlog.h \ + configspamcheck.h encryption.h filtercriteriawidget.h filtersetupdialog.h \ + filtersetupitem.h kwalletaccess.h mailboxwizard.h mailboxwizardlistitem.h \ + senderlistdialog.h +kcm_kshowmailconfigactions_la_SOURCES = configactions.cpp +kde_services_DATA = kshowmailconfigaccounts.desktop \ + kshowmailconfigactions.desktop kshowmailconfigdisplay.desktop kshowmailconfigfilter.desktop \ + kshowmailconfiggeneral.desktop kshowmailconfiglog.desktop kshowmailconfigspamcheck.desktop +kcm_kshowmailconfiggeneral_la_LDFLAGS = -avoid-version -module\ + $(all_libraries) +kcm_kshowmailconfiggeneral_la_SOURCES = configgeneral.cpp +kcm_kshowmailconfigdisplay_la_LDFLAGS = -avoid-version -module\ + $(all_libraries) +kcm_kshowmailconfigdisplay_la_SOURCES = configdisplay.cpp +kcm_kshowmailconfigaccounts_la_LDFLAGS = -avoid-version -module\ + $(all_libraries) +kcm_kshowmailconfigaccounts_la_SOURCES = configaccounts.cpp \ + accountsetupitem.cpp accountsetupdialog.cpp encryption.cpp kwalletaccess.cpp +kcm_kshowmailconfigfilter_la_LDFLAGS = -avoid-version -module\ + $(all_libraries) +kcm_kshowmailconfigfilter_la_SOURCES = configfilter.cpp senderlistdialog.cpp \ + filtersetupitem.cpp filtersetupdialog.cpp filtercriteriawidget.cpp mailboxwizard.cpp \ + mailboxwizardlistitem.cpp +kcm_kshowmailconfiglog_la_LDFLAGS = $(all_libraries) -avoid-version -module +kcm_kshowmailconfiglog_la_SOURCES = configlog.cpp +kcm_kshowmailconfigspamcheck_la_LDFLAGS = $(all_libraries) -avoid-version \ + -module +kcm_kshowmailconfigspamcheck_la_SOURCES = configspamcheck.cpp mailboxwizard.cpp \ + mailboxwizardlistitem.cpp diff --git a/kshowmail/kcmconfigs/accountsetupdialog.cpp b/kshowmail/kcmconfigs/accountsetupdialog.cpp new file mode 100644 index 0000000..6c6fe22 --- /dev/null +++ b/kshowmail/kcmconfigs/accountsetupdialog.cpp @@ -0,0 +1,362 @@ +// +// C++ Implementation: accountsetupdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "accountsetupdialog.h" + +AccountSetupDialog::AccountSetupDialog( QWidget* parent, KListView* view, AccountSetupItem* item ) + : KDialogBase( parent, "AccountSetupDialog", true, QString::null, Ok|Cancel, Ok, true ) +{ + //save pointer to account and view + account = item; + ListView = view; + + //tab widget + KTabWidget* tabs = new KTabWidget( this, "tabs" ); + tabs->setMargin( 10 ); + + //pages + QWidget* pgGeneral = new QWidget( this ); + QWidget* pgSecurity = new QWidget( this ); + setMainWidget( tabs ); + + //layouts of general page + QVBoxLayout* layGeneral = new QVBoxLayout( pgGeneral, 0, spacingHint() ); + QGridLayout* layTop = new QGridLayout( layGeneral, 5, 2 ); + + //layouts of security page + QVBoxLayout* laySecurity = new QVBoxLayout( pgSecurity, 0, spacingHint() ); + laySecurity->setAlignment( Qt::AlignTop ); + + //upper items + QLabel* lblAccount = new QLabel( i18n( "Account:" ), pgGeneral, "lblAccount" ); + txtAccount = new KLineEdit( pgGeneral, "txtAccount" ); + txtAccount->setFocus(); + QToolTip::add( lblAccount, i18n( "Unique Account Name" ) ); + QToolTip::add( txtAccount, i18n( "Unique Account Name" ) ); + layTop->addWidget( lblAccount, 0, 0 ); + layTop->addWidget( txtAccount, 0, 1 ); + + QLabel* lblServer = new QLabel( i18n( "Server:" ), pgGeneral, "lblServer" ); + txtServer = new KLineEdit( pgGeneral, "txtServer" ); + QToolTip::add( lblServer, i18n( "Server Name" ) ); + QToolTip::add( txtServer, i18n( "Server Name" ) ); + layTop->addWidget( lblServer, 1, 0 ); + layTop->addWidget( txtServer, 1, 1 ); + + QLabel* lblProtocol = new QLabel( i18n( "Protocol:" ), pgGeneral, "lblProtocol" ); + cboProtocol = new KComboBox( pgGeneral, "cboProtocol" ); + cboProtocol->insertItem( "POP3" ); //currently KShowmail just supports POP3 + QToolTip::add( lblProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); + QToolTip::add( cboProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); + layTop->addWidget( lblProtocol, 2, 0 ); + layTop->addWidget( cboProtocol, 2, 1 ); + + QLabel* lblPort = new QLabel( i18n( "Port:" ), pgGeneral, "lblPort" ); + spbPort = new QSpinBox( 0, 65535, 1, pgGeneral, "spbPort" ); + spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); + QToolTip::add( lblPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); + QToolTip::add( spbPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); + layTop->addWidget( lblPort, 3, 0 ); + layTop->addWidget( spbPort, 3, 1 ); + + QLabel* lblUser = new QLabel( i18n( "User:" ), pgGeneral, "lblUser" ); + txtUser = new KLineEdit( pgGeneral, "txtUser" ); + QToolTip::add( lblUser, i18n( "To authenticate to the mail server you need an user name." ) ); + QToolTip::add( txtUser, i18n( "To authenticate to the mail server you need an user name." ) ); + layTop->addWidget( lblUser, 4, 0 ); + layTop->addWidget( txtUser, 4, 1 ); + + //password groupbox and layouts + QGroupBox* gboxPassword = new QGroupBox( 0, Qt::Horizontal, i18n( "Password" ), pgGeneral, "gboxPassword" ); + layGeneral->addWidget( gboxPassword ); + + QVBoxLayout* layPassword = new QVBoxLayout( gboxPassword->layout(), spacingHint() ); + QGridLayout* layPasswordStorage = new QGridLayout( layPassword, 2, 2, spacingHint() ); + + + //radio buttons to set storage of the password + grpPasswordStorage = new QButtonGroup( NULL, "grpPasswordStorage" ); + connect( grpPasswordStorage, SIGNAL( clicked( int ) ), this, SLOT( slotPasswordStorageChanged( int ) ) ); + + QRadioButton* btnPasswordDontSave = new QRadioButton( i18n( "Don't save" ), gboxPassword, "btnPasswordDontSave" ); + QRadioButton* btnPasswordSaveFile = new QRadioButton( i18n( "Save password"), gboxPassword, "btnPasswordSaveFile" ); + QRadioButton* btnPasswordSaveKWallet = new QRadioButton( i18n( "Use KWallet" ), gboxPassword, "btnPasswordSaveKWallet" ); + grpPasswordStorage->insert( btnPasswordDontSave, ID_BUTTON_PASSWORD_DONT_SAVE ); + grpPasswordStorage->insert( btnPasswordSaveFile, ID_BUTTON_PASSWORD_SAVE_FILE ); + grpPasswordStorage->insert( btnPasswordSaveKWallet, ID_BUTTON_PASSWORD_SAVE_KWALLET ); + QToolTip::add( btnPasswordDontSave, i18n( "Don't save password. KShowmail will ask you for it at first server connect." ) ); + QToolTip::add( btnPasswordSaveFile, i18n( "Save password in the configuration file. Not recommended, because the password is just lightly encrypted" ) ); + QToolTip::add( btnPasswordSaveKWallet, i18n( "Use KWallet to save the password. Maybe you have to type in the KWallet master password at first server connect." ) ); + layPasswordStorage->addWidget( btnPasswordDontSave, 0, 0 ); + layPasswordStorage->addWidget( btnPasswordSaveFile, 0, 1 ); + layPasswordStorage->addWidget( btnPasswordSaveKWallet, 1, 0 ); + + //password edit line + txtPassword = new KPasswordEdit( gboxPassword, "txtUser" ); + layPassword->addWidget( txtPassword ); + + //set password defaults + grpPasswordStorage->setButton( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + slotPasswordStorageChanged( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + + //active check box + QGridLayout* layActive = new QGridLayout( layGeneral, 1, 1 ); + layActive->setAlignment( Qt::AlignCenter ); + chkActive = new QCheckBox( i18n( "Active"), pgGeneral, "chkActive" ); + QToolTip::add( chkActive, i18n( "Select it to activate this account." ) ); + layActive->addWidget( chkActive, 0, 0 ); + chkActive->setChecked( DEFAULT_ACCOUNT_ACTIVE ); + + //secure transfer groupbox and layouts + QGroupBox* gboxSecureTransfer = new QGroupBox( 0, Qt::Horizontal, i18n( "Encryption" ), pgSecurity, "gboxSecureTransfer" ); + gboxSecureTransfer->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Maximum ) ); + laySecurity->addWidget( gboxSecureTransfer ); + + QHBoxLayout* laySecureTransfer = new QHBoxLayout( gboxSecureTransfer->layout(), spacingHint() ); + + //radio buttons to set secure transfer + grpSecureTransfer = new QButtonGroup( NULL, "grpSecureTransfer" ); + connect( grpSecureTransfer, SIGNAL( clicked( int ) ), this, SLOT( slotSecureTransferChanged ( int ) ) ); + + QRadioButton* btnSecureTransferNone = new QRadioButton( i18n( "None" ), gboxSecureTransfer, "btnSecureTransferNone" ); + QRadioButton* btnSecureTransferSSL = new QRadioButton( i18n( "SSL"), gboxSecureTransfer, "btnSecureTransferSSL" ); + QRadioButton* btnSecureTransferTLS = new QRadioButton( i18n( "TLS" ), gboxSecureTransfer, "btnSecureTransferTLS" ); + grpSecureTransfer->insert( btnSecureTransferNone, ID_BUTTON_SECTRANSFER_NONE ); + grpSecureTransfer->insert( btnSecureTransferSSL, ID_BUTTON_SECTRANSFER_SSL ); + grpSecureTransfer->insert( btnSecureTransferTLS, ID_BUTTON_SECTRANSFER_TLS ); + QToolTip::add( btnSecureTransferNone, i18n( "The download of the mail header and body will not be encrypted. Use this, if your provider doesn't make a secure transfer available." ) ); + QToolTip::add( btnSecureTransferSSL, i18n( "Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure communications on the Internet." ) ); + QToolTip::add( btnSecureTransferTLS, i18n( "Transport Layer Security (TLS) is a cryptographic protocol that provides secure communications on the Internet. It is the successor of SSL." ) ); + laySecureTransfer->addWidget( btnSecureTransferNone ); + laySecureTransfer->addWidget( btnSecureTransferSSL ); + laySecureTransfer->addWidget( btnSecureTransferTLS ); + + grpSecureTransfer->setButton( DEFAULT_ACCOUNT_SECTRANSFER ); + + //set pages to tab widget + tabs->addTab( pgGeneral, i18n( "General" ) ); + tabs->addTab( pgSecurity, i18n( "Security" ) ); + + //set caption + if( item == NULL ) + setCaption( i18n( "New account" ) ); + else + setCaption( i18n( "Edit account" ) ); + + //write values of the given account into the dialog items + if( account != NULL ) + fillDialog(); + + +} + + +AccountSetupDialog::~AccountSetupDialog() +{ +} + +void AccountSetupDialog::slotPasswordStorageChanged( int id ) +{ + if( id == ID_BUTTON_PASSWORD_DONT_SAVE ) + { + txtPassword->setEnabled( false ); + txtPassword->clear(); + } + else + txtPassword->setEnabled( true ); +} + +void AccountSetupDialog::slotOk( ) +{ + //check for necessary values + if( txtAccount->text() == "" ) + { + KMessageBox::error( this, i18n( "Please enter an account name." ) ); + return; + } + if( txtServer->text() == "" ) + { + KMessageBox::error( this, i18n( "Please enter an server." ) ); + return; + } + + if( txtUser->text() == "" ) + { + KMessageBox::error( this, i18n( "Please enter an user name." ) ); + return; + } + + //test for unique account name + //we will only test if the account is new or if the + //name in the dialog is different from the name of the account object + bool test = false; + if( account == NULL ) + test = true; + else if( account != NULL && account->getAccountName() != txtAccount->text() ) + test = true; + else + test = false; + + if( test ) + { + //OK, we want to test + AccountSetupItem* item = NULL; + int index = 0; + bool equality = false; + + do + { + item = (AccountSetupItem*)( ListView->itemAtIndex( index ) ); + if( item != NULL ) + { + index++; + equality = item->getAccountName() == txtAccount->text(); + } + } while( item != NULL && !equality ); + + //exit method if we have found an account with the same name + if( equality ) + { + KMessageBox::error( this, i18n( "There is already an account named %1. Please choose another name." ).arg( txtAccount->text() ) ); + return; + } + + } + + + //create a new account item if necessary + if( account == NULL ) + account = new AccountSetupItem( ListView ); + + //show a warning if the account name was changend + if( account->getAccountName() != DEFAULT_ACCOUNT_NAME && account->getAccountName() != txtAccount->text() ) + KMessageBox::information( this, i18n( "You have changed the account name. The account will lose all downloaded mail headers. Please perform a refresh." ) ); + + //set column text + account->setText( 0, txtAccount->text() ); + + //write values into account item + account->setAccountName( txtAccount->text() ); + account->setServer( txtServer->text() ); + account->setProtocol( cboProtocol->currentText() ); + account->setPort( spbPort->value() ); + account->setUser( txtUser->text() ); + + //get the password + //the class KPasswordEdit doesn't have a method to set the password + //therefore we use setText(). But if we use this method, KPasswordEdit::password() + //will return an empty string. If the user has typed in a new password, KPasswordEdit::password() + //will return the correct password + QString pass; + if( txtPassword->password() == "" || txtPassword->password() == QString::null ) + pass = txtPassword->text(); + else + pass = txtPassword->password(); + + switch( grpPasswordStorage->selectedId() ) + { + case ID_BUTTON_PASSWORD_DONT_SAVE : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ); + account->setPassword( QString::null ); + break; + case ID_BUTTON_PASSWORD_SAVE_FILE : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ); + account->setPassword( pass ); + break; + case ID_BUTTON_PASSWORD_SAVE_KWALLET : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ); + account->setPassword( pass ); + break; + default : account->setPasswordStorageType( -1 ); + account->setPassword( QString::null ); + } + + account->setActive( chkActive->isChecked() ); + + switch( grpSecureTransfer->selectedId() ) + { + case ID_BUTTON_SECTRANSFER_NONE : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE ); break; + case ID_BUTTON_SECTRANSFER_SSL : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL ); break; + case ID_BUTTON_SECTRANSFER_TLS : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ); break; + default : account->setTransferSecurity( DEFAULT_ACCOUNT_SECTRANSFER ); break; + } + + //call slot of super class to close the dialog + KDialogBase::slotOk(); +} + +void AccountSetupDialog::fillDialog( ) +{ + //check for valid account pointer + if( account == NULL ) + { + kdError() << "AccountSetupDialog::fillDialog: invalid pointer to account item." << endl; + return; + } + + txtAccount->setText( account->getAccountName() ); + txtServer->setText( account->getServer() ); + cboProtocol->setCurrentText( account->getProtocol().upper() ); + + if( account->getPort() >= 0 && account->getPort() <= 65535 ) + spbPort->setValue( account->getPort() ); + else + spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); + + txtUser->setText( account->getUser() ); + + int type = account->getPasswordStorageType(); + if( type != CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + type = DEFAULT_ACCOUNT_PASSWORD_STORAGE; + + switch( type ) + { + case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_DONT_SAVE ); + txtPassword->setEnabled( false ); + txtPassword->clear(); + break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_FILE ); + txtPassword->setEnabled( true ); + txtPassword->setText( account->getPassword() ); + break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_KWALLET ); + txtPassword->setEnabled( true ); + txtPassword->setText( account->getPassword() ); + break; + default : grpPasswordStorage->setButton( 1 ); + txtPassword->clear(); + } + + chkActive->setChecked( account->getActive() ); + + int transferSecurity = account->getTransferSecurity(); + if( transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE && transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL && transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ) + transferSecurity = DEFAULT_ACCOUNT_SECTRANSFER; + + switch( transferSecurity ) + { + case CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_NONE ); break; + case CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_SSL ); break; + case CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_TLS ); break; + default : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_NONE ); break; + } +} + +void AccountSetupDialog::slotSecureTransferChanged( int id ) +{ + switch( id ) + { + case ID_BUTTON_SECTRANSFER_NONE : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; + case ID_BUTTON_SECTRANSFER_SSL : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3SSL ); break; + case ID_BUTTON_SECTRANSFER_TLS : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; + } +} + + + +#include "accountsetupdialog.moc" diff --git a/kshowmail/kcmconfigs/accountsetupdialog.h b/kshowmail/kcmconfigs/accountsetupdialog.h new file mode 100644 index 0000000..756f51e --- /dev/null +++ b/kshowmail/kcmconfigs/accountsetupdialog.h @@ -0,0 +1,165 @@ +// +// C++ Interface: accountsetupdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef ACCOUNTSETUPDIALOG_H +#define ACCOUNTSETUPDIALOG_H + +//Qt headers +#include +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "accountsetupitem.h" +#include "../constants.h" + +//radio button IDs +#define ID_BUTTON_PASSWORD_DONT_SAVE 1 +#define ID_BUTTON_PASSWORD_SAVE_FILE 2 +#define ID_BUTTON_PASSWORD_SAVE_KWALLET 3 +#define ID_BUTTON_SECLOGIN_NONE 1 +#define ID_BUTTON_SECLOGIN_APOP 2 +#define ID_BUTTON_SECLOGIN_SASL 3 +#define ID_BUTTON_SECTRANSFER_NONE 1 +#define ID_BUTTON_SECTRANSFER_SSL 2 +#define ID_BUTTON_SECTRANSFER_TLS 3 + +/** + * @brief Dialog to setup an account. + * + * @author Ulrich Weigelt + */ +class AccountSetupDialog : public KDialogBase +{ +Q_OBJECT + + public: + + /** + * General constructor + * @param parent parent of the dialog + * @param view view which shows the items + * @param item account to setup; if NULL, a new item will be created + */ + AccountSetupDialog( QWidget* parent, KListView* view, AccountSetupItem* item = NULL ); + + /** + * Destructor + */ + ~AccountSetupDialog(); + + private: + + /** + * account to setup + */ + AccountSetupItem* account; + + /** + * View which shows the account items. + */ + KListView* ListView; + + /** + * Edit line which contains the unique account name. + */ + KLineEdit* txtAccount; + + /** + * Edit line which contains the server name. + */ + KLineEdit* txtServer; + + /** + * Combo box to choose the protocol. + */ + KComboBox* cboProtocol; + + /** + * Spinbox to choose the tcp port. + */ + QSpinBox* spbPort; + + /** + * Edit line which contains the user name. + */ + KLineEdit* txtUser; + + /** + * Edit line which contains the password. + */ + KPasswordEdit* txtPassword; + + /** + * Check box to select whether the account is active or not. + */ + QCheckBox* chkActive; + + /** + * Combines the radio buttons of password storage. + */ + QButtonGroup* grpPasswordStorage; + + /** + * Combines the radio buttons of secure transfer. + */ + QButtonGroup* grpSecureTransfer; + + protected slots: + + /** + * Connected with the password button group. + * Enabled or disabled the password edit line. + * @param id button identifier + */ + void slotPasswordStorageChanged( int id ); + + /** + * Connected with the secure transfer button group. + * Changes the port number. + * @param id button identifier + */ + void slotSecureTransferChanged( int id ); + + /** + * Overwritten method of KDialogBase. + * Called if OK was clicked. + * Stores the entered values into the given account item. + * If no item was given it creates a new one. + * After then it invokes slotOk() of KDialogBase. + */ + void slotOk(); + + protected: + + /** + * Writes the values of the account into the dialog items. + */ + void fillDialog(); + +}; + +#endif diff --git a/kshowmail/kcmconfigs/accountsetupitem.cpp b/kshowmail/kcmconfigs/accountsetupitem.cpp new file mode 100644 index 0000000..f9f8431 --- /dev/null +++ b/kshowmail/kcmconfigs/accountsetupitem.cpp @@ -0,0 +1,207 @@ +// +// C++ Implementation: accountsetupitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "accountsetupitem.h" + +AccountSetupItem::AccountSetupItem( KListView* parent ) + : KListViewItem( parent ) +{ + init(); + +} + +AccountSetupItem::AccountSetupItem( KListView * parent, QString & name ) + : KListViewItem( parent ) +{ + init(); + + //save account name + _account = name; + + //set column text + setText( 0, getAccountName() ); +} + +AccountSetupItem::~AccountSetupItem() +{ +} + +void AccountSetupItem::init( ) +{ + //set default values + _account = DEFAULT_ACCOUNT_NAME; + _server = DEFAULT_ACCOUNT_SERVER; + _protocol = DEFAULT_ACCOUNT_PROTOCOL; + _port = DEFAULT_ACCOUNT_PORT_POP3; + _user = DEFAULT_ACCOUNT_USER; + _password = DEFAULT_ACCOUNT_PASSWORD; + _passwordStorage = DEFAULT_ACCOUNT_PASSWORD_STORAGE; + _active = DEFAULT_ACCOUNT_ACTIVE; + _transferSecurity = DEFAULT_ACCOUNT_SECTRANSFER; + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); +} + +void AccountSetupItem::setAccountName( const QString & name ) +{ + _account = name; +} + +QString AccountSetupItem::getAccountName( ) const +{ + return _account; +} + +void AccountSetupItem::setServer( const QString & server ) +{ + _server = server; +} + +QString AccountSetupItem::getServer( ) const +{ + return _server; +} + +void AccountSetupItem::setProtocol( const QString & protocol ) +{ + _protocol = protocol; +} + +QString AccountSetupItem::getProtocol( ) const +{ + return _protocol; +} + +void AccountSetupItem::setPort( int port ) +{ + if( port >= 0 && port <= 65535 ) + _port = port; + else + _port = DEFAULT_ACCOUNT_PORT_POP3; +} + +int AccountSetupItem::getPort( ) const +{ + return _port; +} + +void AccountSetupItem::setUser( const QString & user ) +{ + _user = user; +} + +QString AccountSetupItem::getUser( ) const +{ + return _user; +} + +void AccountSetupItem::setPassword( const QString & password ) +{ + _password = password; +} + +QString AccountSetupItem::getPassword( ) const +{ + return _password; +} + +void AccountSetupItem::setPasswordStorageType( int type ) +{ + if( type == CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE || type == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE || type == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + _passwordStorage = type; + else + _passwordStorage = DEFAULT_ACCOUNT_PASSWORD_STORAGE; +} + +int AccountSetupItem::getPasswordStorageType( ) const +{ + return _passwordStorage; +} + +void AccountSetupItem::setActive( bool active ) +{ + _active = active; +} + +bool AccountSetupItem::getActive( ) const +{ + return _active; +} + +void AccountSetupItem::save() const +{ + config->setGroup( getAccountName() ); + + config->writeEntry( CONFIG_ENTRY_ACCOUNT_NAME, getAccountName() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_SERVER, getServer() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, getProtocol().upper() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PORT, getPort() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_USER, getUser() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, getPasswordStorageType() ); + + //save crypted password + KURL url; + url.setUser( getUser() ); + url.setHost( getServer() ); + url.setPass( getPassword() ); + + if( getPasswordStorageType() == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ) + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, crypt( url ) ); + else + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null ); + + //save password in KWallet if desired + if( getPasswordStorageType() == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + KWalletAccess::savePassword( getAccountName(), getPassword() ); + + config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, getActive() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, getTransferSecurity() ); + +} + +void AccountSetupItem::load( ) +{ + config->setGroup( getAccountName() ); + + _server = config->readEntry( CONFIG_ENTRY_ACCOUNT_SERVER, DEFAULT_ACCOUNT_SERVER ); + _protocol = config->readEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, DEFAULT_ACCOUNT_PROTOCOL ); + _port = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PORT, DEFAULT_ACCOUNT_PORT_POP3 ); + _user = config->readEntry( CONFIG_ENTRY_ACCOUNT_USER, DEFAULT_ACCOUNT_USER ); + _passwordStorage = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + + if( _passwordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ) + _password = decrypt( config->readEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, DEFAULT_ACCOUNT_PASSWORD ) ); + else if( _passwordStorage == CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + _password = KWalletAccess::getPassword( getAccountName() ); + else + _password = QString::null; + + _active = config->readBoolEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, DEFAULT_ACCOUNT_ACTIVE ); + _transferSecurity = config->readNumEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, DEFAULT_ACCOUNT_SECTRANSFER ); +} + +void AccountSetupItem::setTransferSecurity( int type ) +{ + if( type == CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE || type == CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL || type == CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ) + _transferSecurity = type; + else + _transferSecurity = DEFAULT_ACCOUNT_SECTRANSFER; +} + +int AccountSetupItem::getTransferSecurity( ) const +{ + return _transferSecurity; +} + + + + diff --git a/kshowmail/kcmconfigs/accountsetupitem.h b/kshowmail/kcmconfigs/accountsetupitem.h new file mode 100644 index 0000000..fe85eee --- /dev/null +++ b/kshowmail/kcmconfigs/accountsetupitem.h @@ -0,0 +1,242 @@ +// +// C++ Interface: accountsetupitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef ACCOUNTSETUPITEM_H +#define ACCOUNTSETUPITEM_H + +//KDE headers +#include +#include +#include +#include + +//KShowmail headers +#include "../constants.h" +#include "encryption.h" +#include "kwalletaccess.h" + +using namespace Encryption; + +/** + * @brief This class is used in ConfigAccounts to show the available accounts in the list view and to store an account setup. + * @author Ulrich Weigelt + */ +class AccountSetupItem : public KListViewItem +{ + public: + + /** + * General Constructor + * @param parent the list view + */ + AccountSetupItem( KListView* parent ); + + /** + * Constructor + * @param parent the list view + * @param name account name + */ + AccountSetupItem( KListView* parent, QString& name ); + + /** + * Destructor + */ + ~AccountSetupItem(); + + /** + * Sets account name + * @param name account name + */ + void setAccountName( const QString& name ); + + /** + * Returns the account name. + * @return account name + */ + QString getAccountName() const; + + /** + * Sets the server. + * @param server server + */ + void setServer( const QString& server ); + + /** + * Returns the server. + * @return server + */ + QString getServer() const; + + /** + * Sets the protocol. + * @param protocol protocol + */ + void setProtocol( const QString& protocol ); + + /** + * Returns the protocol. + * @return protocol + */ + QString getProtocol() const; + + /** + * Sets the port number. + * @param port port number + */ + void setPort( int port ); + + /** + * Returns the port number. + * @return port number (0..65535) + */ + int getPort() const; + + /** + * Sets the user name. + * @param user user name + */ + void setUser( const QString& user ); + + /** + * Returns the user name. + * @return user name + */ + QString getUser() const; + + /** + * Sets the password. + * @param password password + */ + void setPassword( const QString& password ); + + /** + * Returns the password. + * @return password + */ + QString getPassword() const; + + /** + * Sets the password storage type. + * See constants.h for valid values + * @param type password storage type (CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE or CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET) + */ + void setPasswordStorageType( int type ); + + /** + * Returns the password storage type. + * See constants.h for valid values (CONFIG_VALUE_ACCOUNT_PASSWORD_...) + * @return storage type + */ + int getPasswordStorageType() const; + + /** + * Sets whether the account is active. + * @param active TRUE - account is active; FALSE - account is not active + */ + void setActive( bool active ); + + /** + * Returns whether the account is active. + * @return TRUE - account is active + * @return FALSE - account is not active + */ + bool getActive() const; + + /** + * Sets the transfer security. + * See constants.h for valid values. + * @param type transfer security type (CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE, CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL, CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS) + */ + void setTransferSecurity( int type ); + + /** + * Returns the transfer security. + * seee constants.h for valid values (CONFIG_VALUE_ACCOUNT_SECTRANSFER_...) + * @return transfer security + */ + int getTransferSecurity() const; + + /** + * Saves this account into applications config. + * All values are placed in a group called like the account name. + */ + void save() const; + + /** + * Loads the options of this account from the application config. + */ + void load(); + + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Account name + */ + QString _account; + + /** + * Server + */ + QString _server; + + /** + * Protocol + */ + QString _protocol; + + /** + * Port + */ + int _port; + + /** + * User Name + */ + QString _user; + + /** + * Password + */ + QString _password; + + /** + * TRUE - account is active + */ + bool _active; + + /** + * password storage type + * Values are defined in constants.h (CONFIG_VALUE_ACCOUNT_PASSWORD_...) + */ + int _passwordStorage; + + /** + * transfer security + * Values are defined in constants.h (CONFIG_VALUE_ACCOUNT_SECTRANSFER_...) + */ + int _transferSecurity; + + protected: + + /** + * Initializes the object. + */ + void init(); + +}; + +#endif diff --git a/kshowmail/kcmconfigs/configaccounts.cpp b/kshowmail/kcmconfigs/configaccounts.cpp new file mode 100644 index 0000000..3cb6d6c --- /dev/null +++ b/kshowmail/kcmconfigs/configaccounts.cpp @@ -0,0 +1,203 @@ +// +// C++ Implementation: configaccounts +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configaccounts.h" + +typedef KGenericFactory ConfigAccountsFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigaccounts, ConfigAccountsFactory( + "kcm_kshowmailconfigaccounts" ) ); + +ConfigAccounts::ConfigAccounts( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigAccountsFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configaccounts" ); + + //build GUI + //--------- + + //main layout + QHBoxLayout* layMain = new QHBoxLayout( this, 0, 10 ); + + //account list view + AccountListView = new KListView( this, "AccountListView" ); + AccountListView->addColumn( i18n( "Name" ) ); + AccountListView->setColumnWidthMode( 0, QListView::Maximum ); + AccountListView->setResizeMode( QListView::LastColumn ); + + layMain->addWidget( AccountListView ); + + //button layout + QVBoxLayout* layButtons = new QVBoxLayout( layMain ); + + //Buttons + btnAdd = new KPushButton( KStdGuiItem::add(), this, "btnAdd" ); + layButtons->addWidget( btnAdd ); + btnAdd->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + connect( btnAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) ); + + btnEdit = new KPushButton( KStdGuiItem::configure(), this, "btnEdit" ); + layButtons->addWidget( btnEdit ); + btnEdit->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + connect( btnEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) ); + + btnRemove = new KPushButton( KStdGuiItem::remove(), this, "btnRemove" ); + layButtons->addWidget( btnRemove ); + btnRemove->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + connect( btnRemove, SIGNAL( clicked() ), this, SLOT( slotRemove() ) ); + + layButtons->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); + + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configured values + load(); + +} + +ConfigAccounts::~ConfigAccounts() +{ +} + +void ConfigAccounts::load() +{ + //get list of account names + config->setGroup( CONFIG_GROUP_ACCOUNTS ); + QStringList accounts = config->readListEntry( CONFIG_ENTRY_ACCOUNTS_LIST, QStringList() ); + + //create list view items and order accounts to load their config + for( QStringList::Iterator it = accounts.begin(); it != accounts.end(); ++it ) + { + //create item + AccountSetupItem* item = new AccountSetupItem( AccountListView, *it ); + + //load item config + item->load(); + + } +} + +void ConfigAccounts::save() +{ + config->setGroup( CONFIG_GROUP_ACCOUNTS ); + + //get old account list from config file to remove old account entries + QStringList oldList = config->readListEntry( CONFIG_ENTRY_ACCOUNTS_LIST, QStringList() ); + + //remove all account entries + for( QStringList::Iterator it = oldList.begin(); it != oldList.end(); ++it ) + { + config->deleteGroup( *it ); + } + + + //write a list with all account names into the config + QStringList accounts; //list of all account names + AccountSetupItem* item = NULL; + int index = 0; + + do //get all account names + { + item = (AccountSetupItem*)( AccountListView->itemAtIndex( index ) ); + if( item != NULL ) + { + index++; + accounts.append( item->getAccountName() ); + } + } while( item != NULL ); + + config->writeEntry( CONFIG_ENTRY_ACCOUNTS_LIST, accounts ); //write list of account names + + //order the items to save their configuration + index = 0; + item = NULL; + do + { + item = (AccountSetupItem*)( AccountListView->itemAtIndex( index ) ); + if( item != NULL ) + { + index++; + item->save(); + } + } while( item != NULL ); + + //write configuration to disk + config->sync(); +} + +void ConfigAccounts::defaults() +{ +} + +void ConfigAccounts::slotChanged( ) +{ + KCModule::changed(); +} + +void ConfigAccounts::slotAdd( ) +{ + //open setup dialog + AccountSetupDialog* dlg = new AccountSetupDialog( this, AccountListView, NULL ); + int res = dlg->exec(); + + //inform application setup dialog about changes + if( res == KDialogBase::Accepted ) + slotChanged(); + + //delete dialog + delete dlg; +} + +void ConfigAccounts::slotEdit( ) +{ + //get selected item + AccountSetupItem* account = (AccountSetupItem*)( AccountListView->selectedItem() ); + + //test item + if( account == NULL ) + return; + + //open dialog + AccountSetupDialog* dlg = new AccountSetupDialog( this, AccountListView, account ); + int res = dlg->exec(); + + //inform application setup dialog about changes + if( res == KDialogBase::Accepted ) + slotChanged(); + + //delete dialog + delete dlg; +} + +void ConfigAccounts::slotRemove( ) +{ + //get selected item + AccountSetupItem* account = (AccountSetupItem*)( AccountListView->selectedItem() ); + + //test item + if( account == NULL ) + return; + + //remove item + int result = KMessageBox::questionYesNo( this, i18n( "Do you really want to remove account %1?").arg( account->getAccountName() ) ); + if( result == KMessageBox::Yes ) + { + delete account; + slotChanged(); + } +} + + +#include "configaccounts.moc" diff --git a/kshowmail/kcmconfigs/configaccounts.h b/kshowmail/kcmconfigs/configaccounts.h new file mode 100644 index 0000000..e2f4e53 --- /dev/null +++ b/kshowmail/kcmconfigs/configaccounts.h @@ -0,0 +1,131 @@ +// +// C++ Interface: configaccounts +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGACCOUNTS_H +#define CONFIGACCOUNTS_H + +//Qt headers +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include + +//kshowmail headers +#include "../constants.h" +#include "accountsetupdialog.h" +#include "accountsetupitem.h" + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the accounts. + * @author Ulrich Weigelt + */ +class ConfigAccounts : public KCModule +{ +Q_OBJECT + + public: + + /** + * Generic Constructor + */ + ConfigAccounts( QWidget *parent = 0, const char *name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigAccounts(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Account List View + */ + KListView* AccountListView; + + /** + * Button to add a new account + */ + KPushButton* btnAdd; + + /** + * Button to edit an account + */ + KPushButton* btnEdit; + + /** + * Button to remove an account + */ + KPushButton* btnRemove; + + private slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); + + /** + * Connected with button btnAdd. + * Opens the account setup dialog with an account item pointer of NULL. + * If the user has clicked OK, the dialog will create a new account item with + * the entered values and adds it to the list view. + */ + void slotAdd(); + + /** + * Connected with button btnEdit. + * Opens the account setup with the selected account item. + */ + void slotEdit(); + + /** + * Connected with button btnRemove. + * Removes the selected item. + */ + void slotRemove(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/configactions.cpp b/kshowmail/kcmconfigs/configactions.cpp new file mode 100644 index 0000000..583d767 --- /dev/null +++ b/kshowmail/kcmconfigs/configactions.cpp @@ -0,0 +1,267 @@ +// +// C++ Implementation: configactions +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configactions.h" + +typedef KGenericFactory ConfigActionsFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigactions, ConfigActionsFactory( + "kcm_kshowmailconfigactions" ) ); + +ConfigActions::ConfigActions( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigActionsFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configactions" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //two boxes to seperate the action if new mail or if no new mail + QGroupBox* gboxNewMails = new QGroupBox( 0, Qt::Horizontal, i18n( "Action if new &mail" ), this, "gboxNewMails" ); + QGroupBox* gboxNoNewMails = new QGroupBox( 2, Qt::Vertical, i18n( "Action if &no mail" ), this, "gboxNoNewMails" ); + gboxNoNewMails->layout()->setSpacing( 20 ); + layMain->addWidget( gboxNewMails ); + layMain->addWidget( gboxNoNewMails ); + + //layouts for the upper group box + QVBoxLayout* layMainNewMails = new QVBoxLayout( gboxNewMails->layout(), 10 ); + QGridLayout* layMainNewMailsTop = new QGridLayout( layMainNewMails, 2, 2, 10 ); + QGridLayout* layMainNewMailsDown = new QGridLayout( layMainNewMails, 2, 4, 10 ); + + //items for the upper group box + chkNewMailsAlertWindow = new QCheckBox( i18n( "Show message box" ), gboxNewMails, "chkNewMailsAlertWindow" ); + QToolTip::add( chkNewMailsAlertWindow, i18n( "Show message if new mail arrives" ) ); + layMainNewMailsTop->addWidget( chkNewMailsAlertWindow, 0, 0 ); + + chkNewMailsMainWindow = new QCheckBox( i18n( "Show main window" ), gboxNewMails, "chkNewMailsMainWindow" ); + QToolTip::add( chkNewMailsMainWindow, i18n( "Show main window if new mail arrives" ) ); + layMainNewMailsTop->addWidget( chkNewMailsMainWindow, 0, 1 ); + + chkNewMailsBeep = new QCheckBox( i18n( "&Beep" ), gboxNewMails, "chkNewMailsBeep" ); + QToolTip::add( chkNewMailsBeep, i18n( "Beeps the internal speaker if new mail" ) ); + layMainNewMailsTop->addWidget( chkNewMailsBeep, 1, 0 ); + + chkNewMailsSound = new QCheckBox( i18n( "Sound:" ), gboxNewMails, "chkNewMailsSound" ); + QToolTip::add( chkNewMailsSound, i18n( "Plays sound if new mail" ) ); + layMainNewMailsDown->addWidget( chkNewMailsSound, 0, 0 ); + + btnNewMailsPlaySound = new KPushButton( KGuiItem( QString(), QString( "player_play" ), i18n( "Play the selected sound file" ), i18n( "Play the selected sound file" ) ), gboxNewMails, "btnNewMailsPlaySound" ); + layMainNewMailsDown->addWidget( btnNewMailsPlaySound, 0, 1 ); + + txtNewMailsSound = new KLineEdit( gboxNewMails, "txtNewMailsSound" ); + layMainNewMailsDown->addWidget( txtNewMailsSound, 0, 2 ); + + btnNewMailsChooseSound = new KPushButton( KGuiItem( QString(), QString( "folder" ), i18n( "Press to select sound file" ), i18n( "Press to select sound file" ) ), gboxNewMails, "btnNewMailsChooseSound" ); + layMainNewMailsDown->addWidget( btnNewMailsChooseSound, 0, 3 ); + + chkNewMailsCommand = new QCheckBox( i18n( "Command:" ), gboxNewMails, "chkNewMailsCommand" ); + QToolTip::add( chkNewMailsCommand, i18n( "Starts external program if new mail" ) ); + layMainNewMailsDown->addWidget( chkNewMailsCommand, 1, 0 ); + + btnNewMailsExecCommand = new KPushButton( KGuiItem( QString(), QString( "exec" ), i18n( "Start the selected program" ), i18n( "Start the selected program" ) ), gboxNewMails, "btnNewMailsExecCommand" ); + layMainNewMailsDown->addWidget( btnNewMailsExecCommand, 1, 1 ); + + txtNewMailsCommand = new KLineEdit( gboxNewMails, "txtNewMailsCommand" ); + layMainNewMailsDown->addWidget( txtNewMailsCommand, 1, 2 ); + + btnNewMailsChooseCommand = new KPushButton( KGuiItem( QString(), QString( "folder" ), i18n( "Select external command" ), i18n( "Select external command" ) ), gboxNewMails, "btnNewMailsChooseCommand" ); + layMainNewMailsDown->addWidget( btnNewMailsChooseCommand, 1, 3 ); + + //items for the lower group box + chkNoNewMailsMinimize = new QCheckBox( i18n( "Minimi&ze" ), gboxNoNewMails, "chkNoNewMailsMinimize" ); + QToolTip::add( chkNoNewMailsMinimize, i18n( "Minimize window if no new mail" ) ); + + chkNoNewMailsTerminate = new QCheckBox( i18n( "Terminate" ), gboxNoNewMails, "chkNoNewMailsTerminate" ); + QToolTip::add( chkNoNewMailsTerminate, i18n( "Terminate kshowmail if no new mail" ) ); + + //connect file choose buttons + connect( btnNewMailsChooseSound, SIGNAL( clicked() ), this, SLOT( slotChooseSound() ) ); + connect( btnNewMailsChooseCommand, SIGNAL( clicked() ), this, SLOT( slotChooseCommand() ) ); + + //connect test buttons + connect( btnNewMailsPlaySound, SIGNAL( clicked() ), this, SLOT( slotPlaySound() ) ); + connect( btnNewMailsExecCommand, SIGNAL( clicked() ), this, SLOT( slotExecuteCommand() ) ); + + //connect sound and command check boxes to enable or disable the configuration items + connect( chkNewMailsSound, SIGNAL( toggled( bool ) ), this, SLOT( slotSoundToggled( bool ) ) ); + connect( chkNewMailsCommand, SIGNAL( toggled( bool ) ), this, SLOT( slotCommandToggled( bool ) ) ); + + //connect all configuration items with slot changed() to notify the dialog about changes + connect( chkNewMailsAlertWindow, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkNewMailsMainWindow, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkNewMailsBeep, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkNewMailsSound, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkNewMailsCommand, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( txtNewMailsSound, SIGNAL( textChanged( const QString& ) ), this, SLOT( slotChanged() ) ); + connect( txtNewMailsCommand, SIGNAL( textChanged( const QString& ) ), this, SLOT( slotChanged() ) ); + connect( chkNoNewMailsMinimize, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkNoNewMailsTerminate, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configured values + load(); + +} + + +ConfigActions::~ConfigActions() +{ +} + +void ConfigActions::load( ) +{ + config->setGroup( CONFIG_GROUP_ACTIONS ); + + chkNewMailsAlertWindow->setChecked( config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW, DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW ) ); + chkNewMailsMainWindow->setChecked( config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_MAINWINDOW, DEFAULT_ACTION_NEW_MAIL_MAINWINDOW ) ); + chkNewMailsBeep->setChecked( config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_BEEP, DEFAULT_ACTION_NEW_MAIL_BEEP ) ); + chkNewMailsSound->setChecked( config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_SOUND, DEFAULT_ACTION_NEW_MAIL_SOUND ) ); + chkNewMailsCommand->setChecked( config->readBoolEntry( CONFIG_ENTRY_NEW_MAIL_COMMAND, DEFAULT_ACTION_NEW_MAIL_COMMAND ) ); + chkNoNewMailsTerminate->setChecked( config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE, DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE ) ); + chkNoNewMailsMinimize->setChecked( config->readBoolEntry( CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE, DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE ) ); + + txtNewMailsSound->setText( config->readEntry( CONFIG_ENTRY_NEW_MAIL_SOUNDPATH ) ); + txtNewMailsCommand->setText( config->readEntry( CONFIG_ENTRY_NEW_MAIL_COMMANDPATH ) ); + + //enable or disable configuration items of sound and command + slotSoundToggled( chkNewMailsSound->isChecked() ); + slotCommandToggled( chkNewMailsCommand->isChecked() ); +} + +void ConfigActions::defaults( ) +{ + chkNewMailsAlertWindow->setChecked( DEFAULT_ACTION_NEW_MAIL_ALERTWINDOW ); + chkNewMailsMainWindow->setChecked( DEFAULT_ACTION_NEW_MAIL_MAINWINDOW ); + chkNewMailsBeep->setChecked( DEFAULT_ACTION_NEW_MAIL_BEEP ); + chkNewMailsSound->setChecked( DEFAULT_ACTION_NEW_MAIL_SOUND ); + chkNewMailsCommand->setChecked( DEFAULT_ACTION_NEW_MAIL_COMMAND ); + chkNoNewMailsTerminate->setChecked( DEFAULT_ACTION_NO_NEW_MAIL_TERMINATE ); + chkNoNewMailsMinimize->setChecked( DEFAULT_ACTION_NO_NEW_MAIL_MINIMIZE ); + + //enable or disable configuration items of sound and command + slotSoundToggled( chkNewMailsSound->isChecked() ); + slotCommandToggled( chkNewMailsCommand->isChecked() ); +} + +void ConfigActions::save( ) +{ + config->setGroup( CONFIG_GROUP_ACTIONS ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_ALERTWINDOW, chkNewMailsAlertWindow->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_MAINWINDOW, chkNewMailsMainWindow->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_BEEP, chkNewMailsBeep->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_SOUND, chkNewMailsSound->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_SOUNDPATH, txtNewMailsSound->text() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_COMMAND, chkNewMailsCommand->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NEW_MAIL_COMMANDPATH, txtNewMailsCommand->text() ); + config->writeEntry( CONFIG_ENTRY_NO_NEW_MAIL_TERMINATE, chkNoNewMailsTerminate->isChecked() ); + config->writeEntry( CONFIG_ENTRY_NO_NEW_MAIL_MINIMIZE, chkNoNewMailsMinimize->isChecked() ); + + //write configuration to disk + config->sync(); +} + +void ConfigActions::slotChooseSound( ) +{ + QString startPath; //start path of the file dialog + + //get sounds directory of kshowmail + KStandardDirs stdDirs; + QString soundPath = stdDirs.findResource( "data", "kshowmail/sounds/" ); + + //get start path of the file dialog + if( txtNewMailsSound->text() != "" ) + { + startPath = txtNewMailsSound->text(); + } + else if( soundPath != QString::null ) + { + startPath = soundPath; + } + else + { + startPath = QString::null; + } + + //open file dialog + QString path = KFileDialog::getOpenFileName( startPath, "*.wav *.ogg|" + i18n( "Sound files (*.wav, *.ogg)" ) + "\n*.*|" + i18n( "All files (*)" ), this, i18n("Select Sound File") ); + + //write selected path into the edit line + if( path != QString::null ) + txtNewMailsSound->setText( path ); +} + +void ConfigActions::slotChooseCommand( ) +{ + //open file dialog + QString path = KFileDialog::getOpenFileName( QString::null, "", this, i18n("Select external command") ); + + //write selected path into the edit line + if( path != QString::null ) + txtNewMailsCommand->setText( path ); +} + +void ConfigActions::slotPlaySound( ) +{ + QString path = txtNewMailsSound->text(); + + if( path != QString::null ) + KAudioPlayer::play( path ); +} + +void ConfigActions::slotExecuteCommand( ) +{ + QString path = txtNewMailsCommand->text(); + + if( path != QString::null ) + { + KShellProcess proc; //process handler to execute the binary + + proc << path; + + proc.start( KShellProcess::DontCare ); + } +} + +void ConfigActions::slotSoundToggled( bool on ) +{ + btnNewMailsPlaySound->setEnabled( on ); + txtNewMailsSound->setEnabled( on ); + btnNewMailsChooseSound->setEnabled( on ); +} + +void ConfigActions::slotCommandToggled( bool on ) +{ + btnNewMailsExecCommand->setEnabled( on ); + txtNewMailsCommand->setEnabled( on ); + btnNewMailsChooseCommand->setEnabled( on ); +} + +void ConfigActions::slotChanged( ) +{ + KCModule::changed(); +} + + +#include "configactions.moc" + + + + + diff --git a/kshowmail/kcmconfigs/configactions.h b/kshowmail/kcmconfigs/configactions.h new file mode 100644 index 0000000..901984f --- /dev/null +++ b/kshowmail/kcmconfigs/configactions.h @@ -0,0 +1,202 @@ +// +// C++ Interface: configactions +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGACTIONS_H +#define CONFIGACTIONS_H + +#include + +//QT headers +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//kshowmail headers +#include "../constants.h" + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the actions. + * + * @author Ulrich Weigelt + */ +class ConfigActions : public KCModule +{ +Q_OBJECT + + public: + /** + * Generic Constructor + */ + ConfigActions( QWidget *parent = 0, const char *name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigActions(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Check box to select whether an alert message will be shown if a new mail is arrived. + */ + QCheckBox* chkNewMailsAlertWindow; + + /** + * Check box to select whether the main window will be shown if a new mail is arrived. + */ + QCheckBox* chkNewMailsMainWindow; + + /** + * Check box to select whether the system beep will be played if a new mail is arrived. + */ + QCheckBox* chkNewMailsBeep; + + /** + * Check box to select whether a sound will be played if a new mail is arrived. + */ + QCheckBox* chkNewMailsSound; + + /** + * Check box to select whether a command will be executed if a new mail is arrived. + */ + QCheckBox* chkNewMailsCommand; + + /** + * Button to test the sound which will be played if a new mail is arrived. + */ + KPushButton* btnNewMailsPlaySound; + + /** + * Button to test the command which will be executed if a new mail is arrived. + */ + KPushButton* btnNewMailsExecCommand; + + /** + * Edit line which contains the path to the sound file which will be played if a new mail is arrived. + */ + KLineEdit* txtNewMailsSound; + + /** + * Edit line which contains the path to the command which will be executed if a new mail is arrived. + */ + KLineEdit* txtNewMailsCommand; + + /** + * Button to open a file dialog to choose the sound file which will be played if a new is arrived. + */ + KPushButton* btnNewMailsChooseSound; + + /** + * Button to open a file dialog to choose the command which will be executed if a new mail is arrived. + */ + KPushButton* btnNewMailsChooseCommand; + + /** + * Check box to select whether the main window will be minimized if no new mail is arrived. + */ + QCheckBox* chkNoNewMailsMinimize; + + /** + * Check box to select whether the application will be terminated if no new mail is arrived. + */ + QCheckBox* chkNoNewMailsTerminate; + + private slots: + + /** + * Connected with button btnNewMailsChooseSound. + * Opens a file dialog to choose the sound file which will be played. + * Writes the chosen path into the edit line txtNewMailsSound. + */ + void slotChooseSound(); + + /** + * Connected with button btnNewMailsChooseCommand. + * Opens a file dialog to choose the command which shall be executed. + * Writes the chosen path into the edit line txtNewMailsCommand. + */ + void slotChooseCommand(); + + /** + * Connected with button btnNewMailsPlaySound. + * Plays the sound. + */ + void slotPlaySound(); + + /** + * Connected with button btnNewMailsExecCommand. + * Executes the coommand. + */ + void slotExecuteCommand(); + + /** + * Connected with check box chkNewMailsSound. + * Enable or disable the sound configuration items. + * @param on TRUE - box is checked; FALSE - box is not checked + */ + void slotSoundToggled( bool on ); + + /** + * Connected with check box chkNewMailsCommand. + * Enable or disable the command configuration items. + * @param on TRUE - box is checked; FALSE - box is not checked + */ + void slotCommandToggled( bool on ); + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/configdisplay.cpp b/kshowmail/kcmconfigs/configdisplay.cpp new file mode 100644 index 0000000..e93027c --- /dev/null +++ b/kshowmail/kcmconfigs/configdisplay.cpp @@ -0,0 +1,221 @@ +// +// C++ Implementation: configdisplay +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configdisplay.h" + +typedef KGenericFactory ConfigDisplayFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigdisplay, ConfigDisplayFactory( + "kcm_kshowmailconfigdisplay" ) ); + +ConfigDisplay::ConfigDisplay( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigDisplayFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configdisplay" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //group boxes + QGroupBox* gboxAccountlist = new QGroupBox( 0, Qt::Horizontal, i18n( "Account list" ), this, "gboxAccountlist" ); + layMain->addWidget( gboxAccountlist ); + QGroupBox* gboxMessagelist = new QGroupBox( 0, Qt::Horizontal, i18n( "Mail list" ), this, "gboxMessagelist" ); + layMain->addWidget( gboxMessagelist ); + QGroupBox* gboxMessageContent = new QGroupBox( 0, Qt::Horizontal, i18n( "Mail content" ), this, "gboxMessageContent" ); + layMain->addWidget( gboxMessageContent ); + + //group box layouts + QGridLayout* layAccountlist = new QGridLayout( gboxAccountlist->layout(), 3, 2, 10 ); + QGridLayout* layMessagelist = new QGridLayout( gboxMessagelist->layout(), 5, 2, 10 ); + QGridLayout* layMessageContent = new QGridLayout( gboxMessageContent->layout(), 1, 1, 10 ); + + //create items + chkAccountlistActive = new QCheckBox( i18n( "Active" ), gboxAccountlist, "chkAccountlistActive" ); + QToolTip::add( chkAccountlistActive, i18n( "To switch on/off the 'Active' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistActive, 0, 0 ); + + chkAccountlistAccount = new QCheckBox( i18n( "Account" ), gboxAccountlist, "chkAccountlistAccount" ); + QToolTip::add( chkAccountlistAccount, i18n( "To switch on/off the 'Account' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistAccount, 0, 1 ); + + chkAccountlistServer = new QCheckBox( i18n( "Server" ), gboxAccountlist, "chkAccountlistServer" ); + QToolTip::add( chkAccountlistServer, i18n( "To switch on/off the 'Server' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistServer, 1, 0 ); + + chkAccountlistUser = new QCheckBox( i18n( "User" ), gboxAccountlist, "chkAccountlistUser" ); + QToolTip::add( chkAccountlistUser, i18n( "To switch on/off the 'User' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistUser, 1, 1 ); + + chkAccountlistMessages = new QCheckBox( i18n( "Messages" ), gboxAccountlist, "chkAccountlistMessages" ); + QToolTip::add( chkAccountlistMessages, i18n( "To switch on/off the 'Messages' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistMessages, 2, 0 ); + + chkAccountlistSize = new QCheckBox( i18n( "Si&ze" ), gboxAccountlist, "chkAccountlistSize" ); + QToolTip::add( chkAccountlistSize, i18n( "To switch on/off the 'Size' column in the account list" ) ); + layAccountlist->addWidget( chkAccountlistSize, 2, 1 ); + + chkMessagelistNumber = new QCheckBox( i18n( "Number" ), gboxMessagelist, "chkMessagelistNumber" ); + QToolTip::add( chkMessagelistNumber, i18n( "To switch on/off the 'Number' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistNumber, 0, 0 ); + + chkMessagelistAccount = new QCheckBox( i18n( "Account" ), gboxMessagelist, "chkMessagelistAccount" ); + QToolTip::add( chkMessagelistAccount, i18n( "To switch on/off the 'Account' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistAccount, 0, 1 ); + + chkMessagelistFrom = new QCheckBox( i18n( "From" ), gboxMessagelist, "chkMessagelistFrom" ); + QToolTip::add( chkMessagelistFrom, i18n( "To switch on/off the 'From' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistFrom, 1, 0 ); + + chkMessagelistTo = new QCheckBox( i18n( "To" ), gboxMessagelist, "chkMessagelistTo" ); + QToolTip::add( chkMessagelistTo, i18n( "To switch on/off the 'To' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistTo, 1, 1 ); + + chkMessagelistSubject = new QCheckBox( i18n( "Su&bject" ), gboxMessagelist, "chkMessagelistSubject" ); + QToolTip::add( chkMessagelistSubject, i18n( "To switch on/off the 'Subject' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistSubject, 2, 0 ); + + chkMessagelistDate = new QCheckBox( i18n( "Date" ), gboxMessagelist, "chkMessagelistDate" ); + QToolTip::add( chkMessagelistDate, i18n( "To switch on/off the 'Date' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistDate, 2, 1 ); + + chkMessagelistSize = new QCheckBox( i18n( "Size" ), gboxMessagelist, "chkMessagelistSize" ); + QToolTip::add( chkMessagelistSize, i18n( "To switch on/off the 'Size' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistSize, 3, 0 ); + + chkMessagelistContent = new QCheckBox( i18n( "Content" ), gboxMessagelist, "chkMessagelistContent" ); + QToolTip::add( chkMessagelistContent, i18n( "To switch on/off the 'Content' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistContent, 3, 1 ); + + chkMessagelistState = new QCheckBox( i18n( "State" ), gboxMessagelist, "chkMessagelistState" ); + QToolTip::add( chkMessagelistState, i18n( "To switch on/off the 'State' column in the message list" ) ); + layMessagelist->addWidget( chkMessagelistState, 4, 0 ); + + chkAllowHTML = new QCheckBox( i18n( "Allow HTML" ), gboxMessageContent, "chkAllowHTML" ); + QToolTip::add( chkAllowHTML, i18n( "To switch on/off HTML in the message view") ); + layMessageContent->addWidget( chkAllowHTML, 0, 0 ); + + //connect all configuration itmes with slot changed() to notify the dialog about changes + connect( chkAccountlistActive, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAccountlistAccount, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAccountlistServer, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAccountlistUser, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAccountlistMessages, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAccountlistSize, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistNumber, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistAccount, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistFrom, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistTo, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistSubject, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistDate, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistSize, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistContent, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMessagelistState, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkAllowHTML, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configurated values + load(); +} + +ConfigDisplay::~ConfigDisplay() +{ +} + +void ConfigDisplay::slotChanged( ) +{ + KCModule::changed(); +} + +void ConfigDisplay::load( ) +{ + config->setGroup( CONFIG_GROUP_ACCOUNT_LIST ); + chkAccountlistActive->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE, DEFAULT_DISPLAY_ACCOUNT_ACTIVE ) ); + chkAccountlistAccount->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT, DEFAULT_DISPLAY_ACCOUNT_ACCOUNT ) ); + chkAccountlistServer->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER, DEFAULT_DISPLAY_ACCOUNT_SERVER ) ); + chkAccountlistUser->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_USER, DEFAULT_DISPLAY_ACCOUNT_USER ) ); + chkAccountlistMessages->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES, DEFAULT_DISPLAY_ACCOUNT_MESSAGES ) ); + chkAccountlistSize->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE, DEFAULT_DISPLAY_ACCOUNT_SIZE ) ); + + config->setGroup( CONFIG_GROUP_MESSAGE_LIST ); + chkMessagelistNumber->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER, DEFAULT_DISPLAY_MESSAGE_NUMBER ) ); + chkMessagelistAccount->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT, DEFAULT_DISPLAY_MESSAGE_ACCOUNT ) ); + chkMessagelistFrom->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_FROM, DEFAULT_DISPLAY_MESSAGE_FROM ) ); + chkMessagelistTo->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_TO, DEFAULT_DISPLAY_MESSAGE_TO ) ); + chkMessagelistSubject->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT, DEFAULT_DISPLAY_MESSAGE_SUBJECT ) ); + chkMessagelistDate->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_DATE, DEFAULT_DISPLAY_MESSAGE_DATE ) ); + chkMessagelistSize->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE, DEFAULT_DISPLAY_MESSAGE_SIZE ) ); + chkMessagelistContent->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT, DEFAULT_DISPLAY_MESSAGE_CONTENT ) ); + chkMessagelistState->setChecked( config->readBoolEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_STATE, DEFAULT_DISPLAY_MESSAGE_STATE ) ); + + config->setGroup( CONFIG_GROUP_VIEW ); + chkAllowHTML->setChecked( config->readBoolEntry( CONFIG_ENTRY_VIEW_USE_HTML, DEFAULT_VIEW_USE_HTML ) ); + +} + +void ConfigDisplay::save() +{ + config->setGroup( CONFIG_GROUP_ACCOUNT_LIST ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE, chkAccountlistActive->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT, chkAccountlistAccount->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER, chkAccountlistServer->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_USER, chkAccountlistUser->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES, chkAccountlistMessages->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE, chkAccountlistSize->isChecked() ); + + config->setGroup( CONFIG_GROUP_MESSAGE_LIST ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER, chkMessagelistNumber->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT, chkMessagelistAccount->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_FROM, chkMessagelistFrom->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_TO, chkMessagelistTo->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT, chkMessagelistSubject->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_DATE, chkMessagelistDate->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE, chkMessagelistSize->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT, chkMessagelistContent->isChecked() ); + config->writeEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_STATE, chkMessagelistState->isChecked() ); + + config->setGroup( CONFIG_GROUP_VIEW ); + config->writeEntry( CONFIG_ENTRY_VIEW_USE_HTML, chkAllowHTML->isChecked() ); + + //write configuration to disk + config->sync(); +} + +void ConfigDisplay::defaults() +{ + chkAccountlistActive->setChecked( DEFAULT_DISPLAY_ACCOUNT_ACTIVE ); + chkAccountlistAccount->setChecked( DEFAULT_DISPLAY_ACCOUNT_ACCOUNT ); + chkAccountlistServer->setChecked( DEFAULT_DISPLAY_ACCOUNT_SERVER ); + chkAccountlistUser->setChecked( DEFAULT_DISPLAY_ACCOUNT_USER ); + chkAccountlistMessages->setChecked( DEFAULT_DISPLAY_ACCOUNT_MESSAGES ); + chkAccountlistSize->setChecked( DEFAULT_DISPLAY_ACCOUNT_SIZE ); + + chkMessagelistNumber->setChecked( DEFAULT_DISPLAY_MESSAGE_NUMBER ); + chkMessagelistAccount->setChecked( DEFAULT_DISPLAY_MESSAGE_ACCOUNT ); + chkMessagelistFrom->setChecked( DEFAULT_DISPLAY_MESSAGE_FROM ); + chkMessagelistTo->setChecked( DEFAULT_DISPLAY_MESSAGE_TO ); + chkMessagelistSubject->setChecked( DEFAULT_DISPLAY_MESSAGE_SUBJECT ); + chkMessagelistDate->setChecked( DEFAULT_DISPLAY_MESSAGE_DATE ); + chkMessagelistSize->setChecked( DEFAULT_DISPLAY_MESSAGE_SIZE ); + chkMessagelistContent->setChecked( DEFAULT_DISPLAY_MESSAGE_CONTENT ); + chkMessagelistState->setChecked( DEFAULT_DISPLAY_MESSAGE_STATE ); + + chkAllowHTML->setChecked( DEFAULT_VIEW_USE_HTML ); + +} +#include "configdisplay.moc" diff --git a/kshowmail/kcmconfigs/configdisplay.h b/kshowmail/kcmconfigs/configdisplay.h new file mode 100644 index 0000000..847b20b --- /dev/null +++ b/kshowmail/kcmconfigs/configdisplay.h @@ -0,0 +1,169 @@ +// +// C++ Interface: configdisplay +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGDISPLAY_H +#define CONFIGDISPLAY_H + +//Qt headers +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include + +//KShowmail headers +#include <../constants.h> + + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the display. + * @author Ulrich Weigelt + */ +class ConfigDisplay : public KCModule +{ +Q_OBJECT + + public: + /** + * Generic Constructor + */ + ConfigDisplay( QWidget *parent = 0, const char *name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigDisplay(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Check box to switch on/off the "Active" column in the account list. + */ + QCheckBox* chkAccountlistActive; + + /** + * Check box to switch on/off the "Account" column in the account list. + */ + QCheckBox* chkAccountlistAccount; + + /** + * Check box to switch on/off the "Server" column in the account list. + */ + QCheckBox* chkAccountlistServer; + + /** + * Check box to switch on/off the "User" column in the account list. + */ + QCheckBox* chkAccountlistUser; + + /** + * Check box to switch on/off the "Messages" column in the account list. + */ + QCheckBox* chkAccountlistMessages; + + /** + * Check box to switch on/off the "Size" column in the account list. + */ + QCheckBox* chkAccountlistSize; + + /** + * Check box to switch on/off the "Number" column in the message list. + */ + QCheckBox* chkMessagelistNumber; + + /** + * Check box to switch on/off the "Account" column in the message list. + */ + QCheckBox* chkMessagelistAccount; + + /** + * Check box to switch on/off the "From" column in the message list. + */ + QCheckBox* chkMessagelistFrom; + + /** + * Check box to switch on/off the "To" column in the message list. + */ + QCheckBox* chkMessagelistTo; + + /** + * Check box to switch on/off the "Subject" column in the message list. + */ + QCheckBox* chkMessagelistSubject; + + /** + * Check box to switch on/off the "Date" column in the message list. + */ + QCheckBox* chkMessagelistDate; + + /** + * Check box to switch on/off the "Size" column in the message list. + */ + QCheckBox* chkMessagelistSize; + + /** + * Check box to switch on/off the "Content" column in the message list. + */ + QCheckBox* chkMessagelistContent; + + /** + * Check box to switch on/off the "State" column in the message list. + */ + QCheckBox* chkMessagelistState; + + /** + * Check box to switch on/off HTML in the message view. + */ + QCheckBox* chkAllowHTML; + + public slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/configfilter.cpp b/kshowmail/kcmconfigs/configfilter.cpp new file mode 100644 index 0000000..c999361 --- /dev/null +++ b/kshowmail/kcmconfigs/configfilter.cpp @@ -0,0 +1,613 @@ +// +// C++ Implementation: configfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configfilter.h" + +typedef KGenericFactory ConfigFilterFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigfilter, ConfigFilterFactory( + "kcm_kshowmailconfigfilter" ) ); + +ConfigFilter::ConfigFilter( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigFilterFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configfilter" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //check box to activate the filter + chkActivateFilter = new QCheckBox( i18n( "Activate Filter" ), this, "chkActivateFilter" ); + layMain->addWidget( chkActivateFilter ); + QToolTip::add( chkActivateFilter, i18n( "Check to activate the header filter." ) ); + connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotFilterActiveToggled( bool ) ) ); + connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + //GUI of sender lists + //------------------- + gboxSenderLists = new QGroupBox( 0, Qt::Horizontal, i18n( "First Check: Sender Lists" ), this, "gboxSenderLists" ); + QHBoxLayout* laySender = new QHBoxLayout( gboxSenderLists->layout(), 10 ); + layMain->addWidget( gboxSenderLists ); + + btnOpenWhitelist = new KPushButton( KGuiItem( QString( i18n( "Whitelist") ), QString( "mail_forward" ) ), gboxSenderLists, "btnOpenWhitelist" ); + QToolTip::add( btnOpenWhitelist, i18n( "Click here to edit the list of senders whose mails shall pass the filter." ) ); + laySender->addWidget( btnOpenWhitelist ); + laySender->setStretchFactor( btnOpenWhitelist, 3 ); + btnOpenWhitelist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); + connect( btnOpenWhitelist, SIGNAL( clicked() ), this, SLOT( slotOpenWhitelist() ) ); + + btnOpenBlacklist = new KPushButton( KGuiItem( QString( i18n( "Blacklist" ) ), QString( "mail_delete" ) ), gboxSenderLists, "btnOpenBlacklist" ); + QToolTip::add( btnOpenBlacklist, i18n( "Click here to edit the list of senders whose mails shall be deleted or marked." ) ); + laySender->addWidget( btnOpenBlacklist ); + laySender->setStretchFactor( btnOpenBlacklist, 3 ); + btnOpenBlacklist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); + connect( btnOpenBlacklist, SIGNAL( clicked() ), this, SLOT( slotOpenBlacklist() ) ); + + laySender->insertStretch( 0, 2 ); + laySender->insertStretch( 2, 2 ); + laySender->insertStretch( 4, 2 ); + + //GUI of filters + //-------------- + gboxFilters = new QGroupBox( 0, Qt::Horizontal, i18n( "Second Check: Filters" ), this, "gboxFilters" ); + QHBoxLayout* layFilters = new QHBoxLayout( gboxFilters->layout(), 10 ); + layMain->addWidget( gboxFilters ); + + listFilters = new KListView( gboxFilters, "listFilters" ); + listFilters->addColumn( i18n( "No." ) ); + listFilters->addColumn( i18n( "Name" ) ); + listFilters->addColumn( i18n( "Action" ) ); + layFilters->addWidget( listFilters ); + listFilters->setColumnWidthMode( 0, QListView::Maximum ); + listFilters->setColumnWidthMode( 1, QListView::Maximum ); + listFilters->setColumnWidthMode( 2, QListView::Maximum ); + listFilters->setResizeMode( QListView::LastColumn ); + listFilters->setColumnAlignment( 0, Qt::AlignHCenter ); + listFilters->setSorting( 0 ); //the list is sorted by filter number + listFilters->setAllColumnsShowFocus( true ); + + QVBoxLayout* layFiltersButtons = new QVBoxLayout( layFilters, 10 ); + btnAdd = new KPushButton( KStdGuiItem::add(), gboxFilters, "btnAdd" ); + btnEdit = new KPushButton( KStdGuiItem::configure(), gboxFilters, "btnEdit" ); + btnRemove = new KPushButton( KStdGuiItem::remove(), gboxFilters, "btnRemove" ); + btnMoveTop = new KPushButton( KGuiItem( "", "top", i18n( "Moves the selected filter at the top" ) ), gboxFilters, "btnMoveTop" ); + btnMoveUp = new KPushButton( KGuiItem( "", "up", i18n( "Moves the selected filter up" ) ), gboxFilters, "btnMoveUp" ); + btnMoveDown = new KPushButton( KGuiItem( "", "down", i18n( "Moves the selected filter down" ) ), gboxFilters, "btnMoveDown" ); + btnMoveBottom = new KPushButton( KGuiItem( "", "bottom", i18n( "Moves the selected filter at the bottm" ) ), gboxFilters, "btnMoveBottom" ); + btnAdd->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnEdit->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnRemove->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveTop->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveUp->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveDown->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveBottom->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + layFiltersButtons->addWidget( btnAdd ); + layFiltersButtons->addWidget( btnEdit ); + layFiltersButtons->addWidget( btnRemove ); + layFiltersButtons->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); + layFiltersButtons->addWidget( btnMoveTop ); + layFiltersButtons->addWidget( btnMoveUp ); + layFiltersButtons->addWidget( btnMoveDown ); + layFiltersButtons->addWidget( btnMoveBottom ); + connect( btnAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) ); + connect( btnEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) ); + connect( btnRemove, SIGNAL( clicked() ), this, SLOT( slotRemove() ) ); + connect( btnMoveTop, SIGNAL( clicked() ), this, SLOT( slotMoveTop() ) ); + connect( btnMoveBottom, SIGNAL( clicked() ), this, SLOT( slotMoveBottom() ) ); + connect( btnMoveUp, SIGNAL( clicked() ), this, SLOT( slotMoveUp() ) ); + connect( btnMoveDown, SIGNAL( clicked() ), this, SLOT( slotMoveDown() ) ); + + + //GUI of Others + //------------- + gboxOthers = new QGroupBox( 0, Qt::Horizontal, i18n( "Third Check: Action for all others" ), this, "gboxOthers" ); + QHBoxLayout* layOthers = new QHBoxLayout( gboxOthers->layout(), 10 ); + layMain->addWidget( gboxOthers ); + + //create combobox to select action + cmbActionOthers = new KComboBox( gboxOthers, "cmbActionOthers" ); + layOthers->addWidget( cmbActionOthers ); + QToolTip::add( cmbActionOthers, i18n( "Choose the action for all mails which are not filtered by the steps before." ) ); + connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotOtherActionChanged( int ) ) ); + connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotChanged() ) ); + + //insert items + cmbActionOthers->insertItem( i18n( "Show" ), ID_COMBO_FILTER_OTHERS_ACTION_PASS ); + cmbActionOthers->insertItem( i18n( "Delete" ), ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); + cmbActionOthers->insertItem( i18n( "Mark" ), ID_COMBO_FILTER_OTHERS_ACTION_MARK ); + cmbActionOthers->insertItem( i18n( "Move" ), ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); + cmbActionOthers->insertItem( i18n( "Spamcheck" ), ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); + cmbActionOthers->insertItem( i18n( "Ignore" ), ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); + + //create edit line to defined the mailbox for move + txtMailbox = new KLineEdit( gboxOthers ); + layOthers->addWidget( txtMailbox ); + connect( txtMailbox, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotChanged() ) ); + + //create wizard button to configure mailbox + btnMailboxWizard= new KPushButton( KGuiItem( QString::null, "wizard" ), gboxOthers ); + layOthers->addWidget( btnMailboxWizard ); + QToolTip::add( btnMailboxWizard, i18n( "Choose the mailbox" ) ); + connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) ); + + //set defaults + switch( DEFAULT_FILTER_OTHERS_ACTION ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + chkActivateFilter->setChecked( DEFAULT_FILTER_ACTIVE ); + + //enable or disable widgets + slotOtherActionChanged( cmbActionOthers->currentItem() ); + slotFilterActiveToggled( DEFAULT_FILTER_ACTIVE ); + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //init counter for filter item numbering. This variable contains the last assigned number of a filter setup item. + //Because it is initialized with zero, the first filter number is 1. + lastFilterNumber = 0; + + //load configured values + load(); +} + + +ConfigFilter::~ConfigFilter() +{ +} + +void ConfigFilter::load( ) +{ + config->setGroup( CONFIG_GROUP_FILTER ); + + //load filter active state + chkActivateFilter->setChecked( config->readBoolEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ) ); + slotFilterActiveToggled( chkActivateFilter->isOn() ); + + //load other action + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + + //get mailbox name + if( config->readNumEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ) + txtMailbox->setText( config->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotOtherActionChanged( cmbActionOthers->currentItem() ); + + //get number of filters + uint numFilters = config->readNumEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 ); + + //create filter setup items and load theirs settings + for( uint ctr = 1; ctr <= numFilters; ctr++ ) + { + //create filter item + FilterSetupItem* item = new FilterSetupItem( listFilters, ctr ); + + //load settings + item->load(); + } + + //set filter index counter + lastFilterNumber = numFilters; +} + +void ConfigFilter::defaults( ) +{ + switch( DEFAULT_FILTER_OTHERS_ACTION ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + + if( DEFAULT_FILTER_OTHERS_ACTION == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ) + txtMailbox->setText( QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotOtherActionChanged( cmbActionOthers->currentItem() ); + + slotChanged(); +} + +void ConfigFilter::save( ) +{ + config->setGroup( CONFIG_GROUP_FILTER ); + + //save filter active state + config->writeEntry( CONFIG_ENTRY_FILTER_ACTIVE, chkActivateFilter->isOn() ); + + //save other action + switch( cmbActionOthers->currentItem() ) + { + case ID_COMBO_FILTER_OTHERS_ACTION_PASS : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_DELETE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_MARK : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_IGNORE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + default : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ); break; + } + + //save mailbox name + if( cmbActionOthers->currentItem() == ID_COMBO_FILTER_OTHERS_ACTION_MOVE ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, txtMailbox->text() ); + } + else + { + config->deleteEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX ); + } + + //get old number of filters + uint oldNumFilter = config->readNumEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 ); + + //save current number of filters + config->writeEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, lastFilterNumber ); + + //delete surplus filter configurations + if( oldNumFilter > lastFilterNumber ) + { + for( uint ctr = lastFilterNumber + 1; ctr <= oldNumFilter; ctr++ ) + { + config->deleteGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) ); + } + } + + //save the filters + QListViewItemIterator it( listFilters ); + + while( it.current() ) + { + ( (FilterSetupItem*)it.current() )->save(); + + //get next item + ++it; + } + + + config->sync(); +} + +void ConfigFilter::slotChanged( ) +{ + KCModule::changed(); +} + +void ConfigFilter::slotOpenWhitelist( ) +{ + //open list dialog + SenderListDialog* dlg = new SenderListDialog( this, SenderListDialog::White, "dlgWhiteList" ); + dlg->exec(); + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotOpenBlacklist( ) +{ + //open list dialog + SenderListDialog* dlg = new SenderListDialog( this, SenderListDialog::Black, "dlgBlackList" ); + dlg->exec(); + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotAdd( ) +{ + //create a new filter setup item + FilterSetupItem* item = new FilterSetupItem( listFilters , lastFilterNumber + 1 ); + + //open setup dialog + FilterSetupDialog* dlg = new FilterSetupDialog( this, item ); + int res = dlg->exec(); + + if( res == KDialogBase::Accepted ) + { + //inform application setup dialog about changes + slotChanged(); + + //increase variable for the last assigned filter number + lastFilterNumber++; + } + else + //delete new item because the user don't want it + delete item; + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotEdit( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + //return if no item selected + if( item == NULL ) return; + + //open setup dialog + FilterSetupDialog* dlg = new FilterSetupDialog( this, item ); + int res = dlg->exec(); + + //inform application setup dialog about changes + if( res == KDialogBase::Accepted ) + slotChanged(); + + //delete dialog + delete dlg; + +} + +void ConfigFilter::slotRemove( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + //delete item + delete item; + + //decrease the number of all filter items after the removed one + decreaseNumbers( num + 1 ); + + //decrease last assigned number + lastFilterNumber--; + + //inform application setup dialog about changes + slotChanged(); + } +} + +void ConfigFilter::slotOtherActionChanged( int index ) +{ + switch( index ) + { + case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : txtMailbox->setEnabled( true ); + if( txtMailbox->text() == "" ) txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + btnMailboxWizard->setHidden( false ); + break; + default : txtMailbox->setEnabled( false ); + btnMailboxWizard->setHidden( true ); + break; + } +} + +void ConfigFilter::decreaseNumbers( uint number ) +{ + //get an iterator of the list view + QListViewItemIterator it( listFilters ); + + //iterate over the filter list + while( it.current() ) + { + //get number of current filter item + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + + //decrease current number, if the given number is lesser or equals + if( curNumber >= number && curNumber > 0 ) + ( (FilterSetupItem*)it.current() )->setNumber( curNumber - 1 ); + + //get next item + ++it; + } +} + +void ConfigFilter::slotMoveTop( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num > 1 ) + { + //set number of the selected to zero, this will move it at the top + item->setNumber( 0 ); + + //now we move all items after the old position one step up + decreaseNumbers( num + 1 ); + + //at last we add one to all numbers + QListViewItemIterator it( listFilters ); + + while( it.current() ) + { + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + ( (FilterSetupItem*)it.current() )->setNumber( curNumber + 1 ); + + ++it; + } + + //refresh list view + listFilters->sort(); + + //inform application setup dialog about changes + slotChanged(); + + } + } + + +} + +void ConfigFilter::slotMoveBottom( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num < lastFilterNumber ) + { + //move the selected item at the bottom + item->setNumber( lastFilterNumber + 1 ); + + //move all items after the old position one step up (decrease number) + decreaseNumbers( num + 1 ); + + //refresh list view + listFilters->sort(); + + //inform application setup dialog about changes + slotChanged(); + } + + } +} + +void ConfigFilter::slotMoveUp( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num > 1 ) + { + //get item before the selected one + FilterSetupItem* itemBefore = getFilterItem( num - 1 ); + + if( itemBefore != NULL ) + { + //swap numbers + item->setNumber( num - 1 ); + itemBefore->setNumber( num ); + + //inform application setup dialog about changes + slotChanged(); + + } + } + //refresh list view + listFilters->sort(); + } +} + +void ConfigFilter::slotMoveDown( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num < lastFilterNumber ) + { + //get item behind the selected one + FilterSetupItem* itemBehind = getFilterItem( num + 1 ); + + if( itemBehind != NULL ) + { + //swap numbers + item->setNumber( num + 1 ); + itemBehind->setNumber( num ); + + //inform application setup dialog about changes + slotChanged(); + + } + } + //refresh list view + listFilters->sort(); + } +} + +FilterSetupItem* ConfigFilter::getFilterItem( uint num ) +{ + FilterSetupItem* foundItem = NULL; + bool found = false; + + //get Iterator + QListViewItemIterator it( listFilters ); + + //iterate over th elist to look for the item + while( it.current() && !found ) + { + //get current number + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + + //have we found it? + if( curNumber == num ) + { + foundItem = (FilterSetupItem*)it.current(); + + found = true; + } + + ++it; + } + + return foundItem; +} + +void ConfigFilter::slotFilterActiveToggled( bool filterOn ) +{ + gboxSenderLists->setEnabled( filterOn ); + gboxFilters->setEnabled( filterOn ); + gboxOthers->setEnabled( filterOn ); +} + +void ConfigFilter::slotOpenMailBoxWizard( ) +{ + MailBoxWizard wizard( this, "malboxwizard" ); + wizard.setCaption( i18n( "Mailbox Select" ) ); + int res = wizard.exec(); + + if( res == QDialog::Accepted ) + txtMailbox->setText( wizard.getPath() ); + +} + + + +#include "configfilter.moc" diff --git a/kshowmail/kcmconfigs/configfilter.h b/kshowmail/kcmconfigs/configfilter.h new file mode 100644 index 0000000..9d37c82 --- /dev/null +++ b/kshowmail/kcmconfigs/configfilter.h @@ -0,0 +1,288 @@ +// +// C++ Interface: configfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGFILTER_H +#define CONFIGFILTER_H + +//QT headers +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include + +//Kshowmail headers +#include "../constants.h" +#include "senderlistdialog.h" +#include "filtersetupdialog.h" +#include "mailboxwizard.h" + +//radio button IDs +#define ID_COMBO_FILTER_OTHERS_ACTION_PASS 0 +#define ID_COMBO_FILTER_OTHERS_ACTION_DELETE 1 +#define ID_COMBO_FILTER_OTHERS_ACTION_MARK 2 +#define ID_COMBO_FILTER_OTHERS_ACTION_MOVE 3 +#define ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK 4 +#define ID_COMBO_FILTER_OTHERS_ACTION_IGNORE 5 + + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the filter. + * @author Ulrich Weigelt + */ +class ConfigFilter : public KCModule +{ +Q_OBJECT + + public: + + /** + * Generic constructor + */ + ConfigFilter( QWidget* parent = 0, const char* name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigFilter(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Check box to activate the filter + */ + QCheckBox* chkActivateFilter; + + /** + * Group box for sender lists. + */ + QGroupBox* gboxSenderLists; + + /** + * Group box for filter items. + */ + QGroupBox* gboxFilters; + + /** + * Group box for other action. + */ + QGroupBox* gboxOthers; + + /** + * Button to open the Blacklist. + */ + KPushButton* btnOpenBlacklist; + + /** + * Button to open the Whitelist. + */ + KPushButton* btnOpenWhitelist; + + /** + * List of filters + */ + KListView* listFilters; + + /** + * Button to move a filter at top. + */ + KPushButton* btnMoveTop; + + /** + * Button to move a filter at bottom. + */ + KPushButton* btnMoveBottom; + + /** + * Button to move a filter up. + */ + KPushButton* btnMoveUp; + + /** + * Button to move a filter down. + */ + KPushButton* btnMoveDown; + + /** + * Button to add a new filter. + */ + KPushButton* btnAdd; + + /** + * Button to edit a filter. + */ + KPushButton* btnEdit; + + /** + * Button to remove a filter. + */ + KPushButton* btnRemove; + + /** + * Combobox to select the action for the rest of mails. + */ + KComboBox* cmbActionOthers; + + /** + * If selected, the other mails will be moved to the mailbox which is written in this edit line. + */ + KLineEdit* txtMailbox; + + /** + * This button opens a wizard which will help to get the right mailbox + */ + KPushButton* btnMailboxWizard; + + /** + * The last assigned number of a filter setup item. + * It is set to zero by the constructor. Therefore the first filter number is 1. + */ + uint lastFilterNumber; + + private slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); + + /** + * Connected with the button btnOpenWhitelist. + * Creates and opens a dialog to edit the whitelist. + */ + void slotOpenWhitelist(); + + /** + * Connected with the button btnOpenBlacklist. + * Creates and opens a dialog to edit the blacklist. + */ + void slotOpenBlacklist(); + + /** + * Connected with button btnAdd. + * Opens the account setup dialog with an account item pointer of NULL. + * If the user has clicked OK, the dialog will create a new account item with + * the entered values and adds it to the list view. + */ + void slotAdd(); + + /** + * Connected with button btnEdit. + * Opens the account setup with the selected account item. + */ + void slotEdit(); + + /** + * Connected with button btnRemove. + * Removes the selected item. + */ + void slotRemove(); + + /** + * Connected with combobox cmbActionOthers. + * Enables or disables additional widgets for action configuration. + * @param index position (index) of the selected action + */ + void slotOtherActionChanged( int index ); + + /** + * Connected with button btnMoveTop. + * Moves the selected filter item at the top of the list, i.e. the number of this item will be the least one. + */ + void slotMoveTop(); + + /** + * Connected with button btnMoveBottom. + * Moves the selected filter item at the bottom of the list, i.e. the number of this item will be the greatest one. + */ + void slotMoveBottom(); + + /** + * Connected with button btnMoveUp. + * Moves the selected filter item up, i.e. the number of this item will be decreased. + */ + void slotMoveUp(); + + /** + * Connected with button btnMoveDown. + * Moves the selected filter item down, i.e. the number of this item will be increased. + */ + void slotMoveDown(); + + /** + * Connected with chkActivateFilter, signal toggled(). + * Enabled or disabled the other widget of this GUI. + * @param filterOn TRUE - filter is active; FALSE - filter is not active + */ + void slotFilterActiveToggled( bool filterOn ); + + /** + * Connected with button btnMailboxWizard. + * Opens a wizard to configure the mailbox + */ + void slotOpenMailBoxWizard(); + + + protected: + + /** + * Decrease the numbers of these filter setup items whose number is greater than or equals num. + * @param number start number of renumbering + */ + void decreaseNumbers( uint number ); + + /** + * Returns the pointer to the filter setup item with number num. Returns 0 if no item found. + * @param num number of the searched filter item + * @return pointer to the found item + */ + FilterSetupItem* getFilterItem( uint num ); + +}; + +#endif diff --git a/kshowmail/kcmconfigs/configgeneral.cpp b/kshowmail/kcmconfigs/configgeneral.cpp new file mode 100644 index 0000000..0bffeca --- /dev/null +++ b/kshowmail/kcmconfigs/configgeneral.cpp @@ -0,0 +1,181 @@ +// +// C++ Implementation: configgeneral +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configgeneral.h" + +typedef KGenericFactory ConfigGeneralFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfiggeneral, ConfigGeneralFactory( + "kcm_kshowmailconfiggeneral" ) ); + +ConfigGeneral::ConfigGeneral( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigGeneralFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configgeneral" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //layout for check buttons (upper half) + QGridLayout* layMainTop = new QGridLayout( layMain, 4, 2, 15 ); + layMainTop->setMargin( 20 ); + + //group box for timers + QGroupBox* gboxTimers = new QGroupBox( 0, Qt::Horizontal, i18n( "&Timers" ), this, "gboxTimers" ); + layMain->addWidget( gboxTimers ); + + //layouts for timers + QGridLayout* layTimers = new QGridLayout( gboxTimers->layout(),3, 3, 20 ); + + //create items + chkConfirmClose = new QCheckBox( i18n( "Confirm Close" ), this, "chkConfirmClose" ); + QToolTip::add( chkConfirmClose, i18n( "If checked, window close must be confirmed" ) ); + layMainTop->addWidget( chkConfirmClose, 0, 0 ); + + chkConfirmDelete = new QCheckBox( i18n( "Confirm delete" ), this, "chkConfirmDelete" ); + QToolTip::add( chkConfirmDelete, i18n( "If checked, message delete must be confirmed" ) ); + layMainTop->addWidget( chkConfirmDelete, 0, 1 ); + + chkStartMinimized = new QCheckBox( i18n( "Start Minimi&zed" ), this, "chkStartMinimized" ); + QToolTip::add( chkStartMinimized, i18n( "Application is started as icon" ) ); + layMainTop->addWidget( chkStartMinimized, 1, 0 ); + + chkCloseToTray = new QCheckBox( i18n( "Close to tray" ), this, "chkCloseToTray" ); + QToolTip::add( chkCloseToTray, i18n( "Close button leaves the application running in tray" ) ); + layMainTop->addWidget( chkCloseToTray, 1, 1 ); + + chkMinimizeToTray = new QCheckBox( i18n( "Minimize to tray" ), this, "chkMinimizeToTray" ); + QToolTip::add( chkMinimizeToTray, i18n( "Minimizes to the tray rather than to the taskbar" ) ); + layMainTop->addWidget( chkMinimizeToTray, 2, 0 ); + + chkShowConnectionErrors = new QCheckBox( i18n( "Show Connection Errors during refresh" ), this, "chkShowConnectionErrors" ); + QToolTip::add( chkShowConnectionErrors, i18n( "If a connection error occurs during refresh (e.g. unknown server), an error message will be shown. During other actions, this error always will be shown" ) ); + layMainTop->addWidget( chkShowConnectionErrors, 2, 1 ); + + chkKeepNew = new QCheckBox( i18n( "&Keep mail as new" ), this, "chkKeepNew" ); + QToolTip::add( chkKeepNew, i18n( "Keep mail as new until termination" ) ); + layMainTop->addWidget( chkKeepNew, 3, 0 ); + + QLabel* lblTimerInitial = new QLabel( i18n( "Initial Timer:" ), gboxTimers, "lblTimerInitial" ); + QLabel* lblInitialUnit = new QLabel( i18n( "[Seconds]" ), gboxTimers, "lblInitialUnit" ); + spbInitial = new QSpinBox( 0, 99999, 1, gboxTimers, "spbInitial" ); + QToolTip::add( spbInitial, i18n( "Seconds until first automatic logon (0 = no automatic)" ) ); + QToolTip::add( lblTimerInitial, i18n( "Seconds until first automatic logon (0 = no automatic)" ) ); + layTimers->addWidget( lblTimerInitial, 0, 0 ); + layTimers->addWidget( spbInitial, 0, 1 ); + layTimers->addWidget( lblInitialUnit, 0, 2 ); + + QLabel* lblTimerInterval = new QLabel( i18n( "Interval Timer:" ), gboxTimers, "lblTimerInterval" ); + QLabel* lblIntervalUnit = new QLabel( i18n( "[Minutes]" ), gboxTimers, "lblIntervalUnit" ); + spbInterval = new QSpinBox( 0, 99999, 1, gboxTimers, "spbInterval" ); + QToolTip::add( spbInterval, i18n( "Minutes between automatic logon (0 = no automatic)" ) ); + QToolTip::add( lblTimerInterval, i18n( "Minutes between automatic logon (0 = no automatic)" ) ); + layTimers->addWidget( lblTimerInterval, 1, 0 ); + layTimers->addWidget( spbInterval, 1, 1 ); + layTimers->addWidget( lblIntervalUnit, 1, 2 ); + + QLabel* lblTimerTimeout = new QLabel( i18n( "Timeout:" ), gboxTimers, "lblTimerTimeout" ); + QLabel* lblTimeoutUnit = new QLabel( i18n( "[Seconds]" ), gboxTimers, "lblTimeoutUnit" ); + spbTimeout = new QSpinBox( MINIMUM_TIMEOUT_TIME, 99999, 1, gboxTimers, "spbTimeout" ); + QToolTip::add( spbTimeout, i18n( "Seconds until a server connect will be canceled" ) ); + QToolTip::add( lblTimerTimeout, i18n( "Seconds until a server connect will be canceled" ) ); + layTimers->addWidget( lblTimerTimeout, 2, 0 ); + layTimers->addWidget( spbTimeout, 2, 1 ); + layTimers->addWidget( lblTimeoutUnit, 2, 2 ); + + + //connect all configuration itmes with slot changed() to notify the dialog about changes + connect( chkConfirmClose, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkConfirmDelete, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkStartMinimized, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkCloseToTray, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkMinimizeToTray, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkShowConnectionErrors, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkKeepNew, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( spbInitial, SIGNAL( valueChanged( int ) ), this, SLOT( slotChanged() ) ); + connect( spbInterval, SIGNAL( valueChanged( int ) ), this, SLOT( slotChanged() ) ); + connect( spbTimeout, SIGNAL( valueChanged( int ) ), this, SLOT( slotChanged() ) ); + + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configurated values + load(); + +} + +ConfigGeneral::~ConfigGeneral() +{ +} + +void ConfigGeneral::load( ) +{ + config->setGroup( CONFIG_GROUP_GENERAL ); + + chkConfirmClose->setChecked( config->readBoolEntry( CONFIG_ENTRY_CONFIRM_CLOSE, DEFAULT_CONFIRM_CLOSE ) ); + chkConfirmDelete->setChecked( config->readBoolEntry( CONFIG_ENTRY_CONFIRM_DELETE, DEFAULT_CONFIRM_DELETE ) ); + chkStartMinimized->setChecked( config->readBoolEntry( CONFIG_ENTRY_START_MINIMIZED, DEFAULT_START_MINIMIZED ) ); + chkCloseToTray->setChecked( config->readBoolEntry( CONFIG_ENTRY_CLOSE_TO_TRAY, DEFAULT_CLOSE_TO_TRAY ) ); + chkMinimizeToTray->setChecked( config->readBoolEntry( CONFIG_ENTRY_MINIMIZE_TO_TRAY, DEFAULT_MINIMIZE_TO_TRAY ) ); + chkShowConnectionErrors->setChecked( config->readBoolEntry( CONFIG_ENTRY_SHOW_CONNECTION_ERRORS, DEFAULT_SHOW_CONNECTION_ERRORS ) ); + chkKeepNew->setChecked( config->readBoolEntry( CONFIG_ENTRY_KEEP_NEW, DEFAULT_KEEP_NEW ) ); + + spbInitial->setValue( config->readNumEntry( CONFIG_ENTRY_INITIAL_TIME, DEFAULT_INITIAL_TIME ) ); + spbInterval->setValue( config->readNumEntry( CONFIG_ENTRY_INTERVAL_TIME, DEFAULT_INTERVAL_TIME) ); + spbTimeout->setValue( config->readNumEntry( CONFIG_ENTRY_TIMEOUT_TIME, DEFAULT_TIMEOUT_TIME) ); +} + +void ConfigGeneral::defaults( ) +{ + chkConfirmClose->setChecked( DEFAULT_CONFIRM_CLOSE ); + chkConfirmDelete->setChecked( DEFAULT_CONFIRM_DELETE ); + chkStartMinimized->setChecked( DEFAULT_START_MINIMIZED ); + chkCloseToTray->setChecked( DEFAULT_CLOSE_TO_TRAY ); + chkMinimizeToTray->setChecked( DEFAULT_MINIMIZE_TO_TRAY ); + chkShowConnectionErrors->setChecked( DEFAULT_SHOW_CONNECTION_ERRORS ); + chkKeepNew->setChecked( DEFAULT_KEEP_NEW ); + + spbInitial->setValue( DEFAULT_INITIAL_TIME ); + spbInterval->setValue( DEFAULT_INTERVAL_TIME ); + spbTimeout->setValue( DEFAULT_TIMEOUT_TIME ); +} + +void ConfigGeneral::save( ) +{ + config->setGroup( CONFIG_GROUP_GENERAL ); + + config->writeEntry( CONFIG_ENTRY_CONFIRM_CLOSE, chkConfirmClose->isChecked() ); + config->writeEntry( CONFIG_ENTRY_CONFIRM_DELETE, chkConfirmDelete->isChecked() ); + config->writeEntry( CONFIG_ENTRY_START_MINIMIZED, chkStartMinimized->isChecked() ); + config->writeEntry( CONFIG_ENTRY_CLOSE_TO_TRAY, chkCloseToTray->isChecked() ); + config->writeEntry( CONFIG_ENTRY_MINIMIZE_TO_TRAY, chkMinimizeToTray->isChecked() ); + config->writeEntry( CONFIG_ENTRY_SHOW_CONNECTION_ERRORS, chkShowConnectionErrors->isChecked() ); + config->writeEntry( CONFIG_ENTRY_KEEP_NEW, chkKeepNew->isChecked() ); + config->writeEntry( CONFIG_ENTRY_INITIAL_TIME, spbInitial->value() ); + config->writeEntry( CONFIG_ENTRY_INTERVAL_TIME, spbInterval->value() ); + config->writeEntry( CONFIG_ENTRY_TIMEOUT_TIME, spbTimeout->value() ); + + //write configuration to disk + config->sync(); +} + +void ConfigGeneral::slotChanged( ) +{ + KCModule::changed(); +} + +#include "configgeneral.moc" diff --git a/kshowmail/kcmconfigs/configgeneral.h b/kshowmail/kcmconfigs/configgeneral.h new file mode 100644 index 0000000..c61ef67 --- /dev/null +++ b/kshowmail/kcmconfigs/configgeneral.h @@ -0,0 +1,141 @@ +// +// C++ Interface: configgeneral +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGGENERAL_H +#define CONFIGGENERAL_H + +//Qt headers +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include + +//KShowmail headers +#include <../constants.h> + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure general things. + * @author Ulrich Weigelt + */ +class ConfigGeneral : public KCModule +{ +Q_OBJECT + + public: + + /** + * Generic Constructor + */ + ConfigGeneral( QWidget *parent = 0, const char *name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigGeneral(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Check box to select whether window closing must be confirmed. + */ + QCheckBox* chkConfirmClose; + + /** + * Check box to select whether deleting must be confirmed. + */ + QCheckBox* chkConfirmDelete; + + /** + * Check box to select whether the main window will be minimized at start. + */ + QCheckBox* chkStartMinimized; + + /** + * Check box to select whether the close button leave the application running in tray. + */ + QCheckBox* chkCloseToTray; + + /** + * Check box to select whether minimizes to the tray rather than to the taskbar. + */ + QCheckBox* chkMinimizeToTray; + + /** + * Check box to select whether connection errors will be shown. + */ + QCheckBox* chkShowConnectionErrors; + + /** + * Check box to select whether mails will be kept as new until termination. + */ + QCheckBox* chkKeepNew; + + /** + * Spin box to set the initial timer. + */ + QSpinBox* spbInitial; + + /** + * Spin box to set the interval timer. + */ + QSpinBox* spbInterval; + + /** + * Spin box to set the time out timer. + */ + QSpinBox* spbTimeout; + + public slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); + +}; + +#endif diff --git a/kshowmail/kcmconfigs/configlog.cpp b/kshowmail/kcmconfigs/configlog.cpp new file mode 100644 index 0000000..e7eb51d --- /dev/null +++ b/kshowmail/kcmconfigs/configlog.cpp @@ -0,0 +1,255 @@ +// +// C++ Implementation: configlog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configlog.h" + +typedef KGenericFactory ConfigLogFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfiglog, ConfigLogFactory( + "kcm_kshowmailconfiglog" ) ); + +ConfigLog::ConfigLog( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigLogFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configlog" ); + + //build GUI + //--------- + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //widgets for deleted mails log + QVBoxLayout* layDelMails = new QVBoxLayout( layMain, 10, "layDelMails" ); + + chkLogDeletedMails = new QCheckBox( i18n( "Log mails deleted by filter" ), this, "chkLogDeletedMails" ); + layDelMails->addWidget( chkLogDeletedMails ); + QToolTip::add( chkLogDeletedMails, i18n( "Check to activate the log of mails deleted by filter." ) ); + connect( chkLogDeletedMails, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkLogDeletedMails, SIGNAL( toggled( bool ) ), this, SLOT( slotChangeItems() ) ); + + QVBoxLayout* layDelMailsConfig = new QVBoxLayout( layDelMails, 10, "layDelMailsConfig" ); + layDelMailsConfig->setMargin( 10 ); + + grpDelMailsRemove = new QButtonGroup( NULL, "grpDelMailsRemove" ); + connect( grpDelMailsRemove, SIGNAL( clicked( int ) ), this, SLOT( slotChanged() ) ); + connect( grpDelMailsRemove, SIGNAL( clicked( int ) ), this, SLOT( slotChangeItems() ) ); + btnDelMailsRemoveExit = new QRadioButton( i18n( "Remove log entries at exit" ), this, "btnDelMailsRemoveExit" ); + grpDelMailsRemove->insert( btnDelMailsRemoveExit, ID_BUTTON_REMOVE_AT_EXIT ); + layDelMailsConfig->addWidget( btnDelMailsRemoveExit ); + + QHBoxLayout* layDelMailsConfigDays = new QHBoxLayout( layDelMailsConfig, 0, "layDelMailsConfigDays" ); + layDelMailsConfigDays->setAlignment( Qt::AlignLeft ); + btnDelMailsRemoveDays = new QRadioButton( i18n( "Remove log entries after" ), this, "btnDelMailsRemoveDays" ); + grpDelMailsRemove->insert( btnDelMailsRemoveDays, ID_BUTTON_REMOVE_AFTER_DAYS ); + layDelMailsConfigDays->addWidget( btnDelMailsRemoveDays ); + spbDelDays = new QSpinBox( 1, 999999, 1, this, "spbDelDays" ); + connect( spbDelDays, SIGNAL( valueChanged( int ) ), this, SLOT( slotChanged() ) ); + connect( spbDelDays, SIGNAL( valueChanged( int ) ), this, SLOT( slotChangeItems() ) ); + spbDelDays->setSuffix( i18n( " Days" ) ); + spbDelDays->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum ); + layDelMailsConfigDays->addWidget( spbDelDays ); + + + //widgets for moved mails log + QVBoxLayout* layMovMails = new QVBoxLayout( layMain, 10, "layMovMails" ); + + chkLogMovedMails = new QCheckBox( i18n( "Log mails moved by filter" ), this, "chkLogMovedMails" ); + layMovMails->addWidget( chkLogMovedMails ); + QToolTip::add( chkLogMovedMails, i18n( "Check to activate the log of mails moved by filter." ) ); + connect( chkLogMovedMails, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + connect( chkLogMovedMails, SIGNAL( toggled( bool ) ), this, SLOT( slotChangeItems() ) ); + + QVBoxLayout* layMovMailsConfig = new QVBoxLayout( layMovMails, 10, "layMovMailsConfig" ); + layMovMailsConfig->setMargin( 10 ); + + grpMovMailsRemove = new QButtonGroup( NULL, "grpMovMailsRemove" ); + connect( grpMovMailsRemove, SIGNAL( clicked( int ) ), this, SLOT( slotChanged() ) ); + connect( grpMovMailsRemove, SIGNAL( clicked( int ) ), this, SLOT( slotChangeItems() ) ); + btnMovMailsRemoveExit = new QRadioButton( i18n( "Remove log entries at exit" ), this, "btnMovMailsRemoveExit" ); + grpMovMailsRemove->insert( btnMovMailsRemoveExit, ID_BUTTON_REMOVE_AT_EXIT ); + layMovMailsConfig->addWidget( btnMovMailsRemoveExit ); + + QHBoxLayout* layMovMailsConfigDays = new QHBoxLayout( layMovMailsConfig, 0, "layMovMailsConfigDays" ); + layMovMailsConfigDays->setAlignment( Qt::AlignLeft ); + btnMovMailsRemoveDays = new QRadioButton( i18n( "Remove log entries after" ), this, "btnMovMailsRemoveDays" ); + grpMovMailsRemove->insert( btnMovMailsRemoveDays, ID_BUTTON_REMOVE_AFTER_DAYS ); + layMovMailsConfigDays->addWidget( btnMovMailsRemoveDays ); + spbMovDays = new QSpinBox( 1, 999999, 1, this, "spbMovDays" ); + connect( spbMovDays, SIGNAL( valueChanged( int ) ), this, SLOT( slotChanged() ) ); + connect( spbMovDays, SIGNAL( valueChanged( int ) ), this, SLOT( slotChangeItems() ) ); + spbMovDays->setSuffix( i18n( " Days" ) ); + spbMovDays->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum ); + layMovMailsConfigDays->addWidget( spbMovDays ); + + //the log of moved mails is not saved yet, maybe later... + btnMovMailsRemoveExit->setHidden( true ); + btnMovMailsRemoveDays->setHidden( true ); + spbMovDays->setHidden( true ); + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configured values + load(); +} + +ConfigLog::~ConfigLog() +{ +} + +void ConfigLog::load() +{ + //set group + config->setGroup( CONFIG_GROUP_LOG ); + + //load settings + chkLogDeletedMails->setChecked( config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_DELETED_MAILS, DEFAULT_LOG_LOG_DELETED_MAILS ) ); + chkLogMovedMails->setChecked( config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_MOVED_MAILS, DEFAULT_LOG_LOG_MOVED_MAILS ) ); + + if( config->readEntry( CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, DEFAULT_LOG_REMOVE_DELETED_MAILS ) == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else if( config->readEntry( CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, DEFAULT_LOG_REMOVE_DELETED_MAILS ) == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + else + if( DEFAULT_LOG_REMOVE_DELETED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + + if( config->readEntry( CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS, DEFAULT_LOG_REMOVE_MOVED_MAILS ) == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else if( config->readEntry( CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS, DEFAULT_LOG_REMOVE_MOVED_MAILS ) == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + else + if( DEFAULT_LOG_REMOVE_MOVED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + + spbDelDays->setValue( config->readNumEntry( CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS, DEFAULT_LOG_HOLDDAYS_DELETED_MAILS ) ); + spbMovDays->setValue( config->readNumEntry( CONFIG_ENTRY_LOG_HOLDDAYS_MOVED_MAILS, DEFAULT_LOG_HOLDDAYS_MOVED_MAILS ) ); + + //enable or disable Items + slotChangeItems(); +} + +void ConfigLog::defaults() +{ + if( DEFAULT_LOG_LOG_DELETED_MAILS ) + chkLogDeletedMails->setChecked( true ); + else + chkLogMovedMails->setChecked( false ); + + if( DEFAULT_LOG_LOG_MOVED_MAILS ) + chkLogMovedMails->setChecked( true ); + else + chkLogMovedMails->setChecked( false ); + + if( DEFAULT_LOG_REMOVE_DELETED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else if( DEFAULT_LOG_REMOVE_DELETED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + else + grpDelMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + + if( DEFAULT_LOG_REMOVE_MOVED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AT_EXIT ); + else if( DEFAULT_LOG_REMOVE_MOVED_MAILS == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + else + grpMovMailsRemove->setButton( ID_BUTTON_REMOVE_AFTER_DAYS ); + + spbDelDays->setValue( DEFAULT_LOG_HOLDDAYS_DELETED_MAILS ); + spbMovDays->setValue( DEFAULT_LOG_HOLDDAYS_MOVED_MAILS ); + + //enable or disable Items + slotChangeItems(); + + slotChanged(); +} + +void ConfigLog::save() +{ + //set group + config->setGroup( CONFIG_GROUP_LOG ); + + //write settings + config->writeEntry( CONFIG_ENTRY_LOG_LOG_DELETED_MAILS, chkLogDeletedMails->isOn() ); + config->writeEntry( CONFIG_ENTRY_LOG_LOG_MOVED_MAILS, chkLogMovedMails->isOn() ); + + switch( grpDelMailsRemove->selectedId() ) + { + case ID_BUTTON_REMOVE_AT_EXIT : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ); break; + case ID_BUTTON_REMOVE_AFTER_DAYS : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ); break; + default : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ); break; + } + + switch( grpMovMailsRemove->selectedId() ) + { + case ID_BUTTON_REMOVE_AT_EXIT : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ); break; + case ID_BUTTON_REMOVE_AFTER_DAYS : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ); break; + default : config->writeEntry( CONFIG_ENTRY_LOG_REMOVE_MOVED_MAILS, CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ); break; + } + + config->writeEntry( CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS, spbDelDays->value() ); + config->writeEntry( CONFIG_ENTRY_LOG_HOLDDAYS_MOVED_MAILS, spbMovDays->value() ); +} + +void ConfigLog::slotChanged() +{ + KCModule::changed(); +} + +void ConfigLog::slotChangeItems() +{ + if( chkLogDeletedMails->isChecked() ) + { + btnDelMailsRemoveExit->setEnabled( true ); + btnDelMailsRemoveDays->setEnabled( true ); + spbDelDays->setEnabled( true ); + switch( grpDelMailsRemove->selectedId() ) + { + case ID_BUTTON_REMOVE_AFTER_DAYS : spbDelDays->setEnabled( true ); break; + case ID_BUTTON_REMOVE_AT_EXIT : spbDelDays->setEnabled( false ); break; + default : spbDelDays->setEnabled( true ); break; + } + } + else + { + btnDelMailsRemoveExit->setEnabled( false ); + btnDelMailsRemoveDays->setEnabled( false ); + spbDelDays->setEnabled( false ); + } + + if( chkLogMovedMails->isChecked() ) + { + btnMovMailsRemoveExit->setEnabled( true ); + btnMovMailsRemoveDays->setEnabled( true ); + spbMovDays->setEnabled( true ); + switch( grpMovMailsRemove->selectedId() ) + { + case ID_BUTTON_REMOVE_AFTER_DAYS : spbMovDays->setEnabled( true ); break; + case ID_BUTTON_REMOVE_AT_EXIT : spbMovDays->setEnabled( false ); break; + default : spbMovDays->setEnabled( true ); break; + } + } + else + { + btnMovMailsRemoveExit->setEnabled( false ); + btnMovMailsRemoveDays->setEnabled( false ); + spbMovDays->setEnabled( false ); + } +} + + +#include "configlog.moc" diff --git a/kshowmail/kcmconfigs/configlog.h b/kshowmail/kcmconfigs/configlog.h new file mode 100644 index 0000000..84e6fd4 --- /dev/null +++ b/kshowmail/kcmconfigs/configlog.h @@ -0,0 +1,152 @@ +// +// C++ Interface: configlog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGLOG_H +#define CONFIGLOG_H + +//button IDs +#define ID_BUTTON_REMOVE_AT_EXIT 1 +#define ID_BUTTON_REMOVE_AFTER_DAYS 2 + +//qt headers +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include + +//Kshowmail headers +#include "../constants.h" + + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the log. + * @author Ulrich Weigelt + */ +class ConfigLog : public KCModule +{ +Q_OBJECT + + public: + + /** + * Generic constructor + */ + ConfigLog( QWidget* parent = 0, const char* name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigLog(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Checkbox to activate log of deleted mails + */ + QCheckBox* chkLogDeletedMails; + + /** + * Checkbox to activate log of moved mails + */ + QCheckBox* chkLogMovedMails; + + /** + * Combines the radio buttons to select the kind of removing log entries of deleted mails + */ + QButtonGroup* grpDelMailsRemove; + + /** + * Combines the radio buttons to select the kind of removing log entries of moved mails + */ + QButtonGroup* grpMovMailsRemove; + + /** + * Spinbox to select the number of days to remove. + */ + QSpinBox* spbDelDays; + + /** + * Spinbox to select the number of days to remove. + */ + QSpinBox* spbMovDays; + + /** + * Radio button to select the removing of entries about deleted mails at application exit. + */ + QRadioButton* btnDelMailsRemoveExit; + + /** + * Radio button to select the removing of entries about deleted mails after some days. + */ + QRadioButton* btnDelMailsRemoveDays; + + /** + * Radio button to select the removing of entries about moved mails at application exit. + */ + QRadioButton* btnMovMailsRemoveExit; + + /** + * Radio button to select the removing of entries about moved mails after some days. + */ + QRadioButton* btnMovMailsRemoveDays; + + private slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); + + /** + * Connected with the checkboxes and radiobuttons. + * Enables or disables the dialog items. + */ + void slotChangeItems(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/configspamcheck.cpp b/kshowmail/kcmconfigs/configspamcheck.cpp new file mode 100644 index 0000000..44f7ef7 --- /dev/null +++ b/kshowmail/kcmconfigs/configspamcheck.cpp @@ -0,0 +1,236 @@ +// +// C++ Implementation: configspamcheck +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configspamcheck.h" + + +typedef KGenericFactory ConfigSpamcheckFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigspamcheck, ConfigSpamcheckFactory( + "kcm_kshowmailconfigspamcheck" ) ); + + +ConfigSpamcheck::ConfigSpamcheck(QWidget * parent, const char * name, const QStringList & args) + : KCModule( ConfigSpamcheckFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configfilter" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //description + QLabel* lblDescription = new QLabel( this, "lblDescription" ); + lblDescription->setAlignment( Qt::WordBreak ); + lblDescription->setText( QString( "%1" ).arg( i18n( "KShowmail uses SpamAssassin to check the mails for spam. You have to install, configure and start the SpamAssassin daemon, before you can use this service." ) ) ); + lblDescription->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Maximum ); + layMain->addWidget( lblDescription ); + + //Test button + btnTest = new KPushButton( KStdGuiItem::test(), this, "btnTest" ); + btnTest->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum ); + layMain->addWidget( btnTest ); + connect( btnTest, SIGNAL( clicked() ), this, SLOT( slotTestSpamAssassin() ) ); + + //action + gboxAction = new QGroupBox( 0, Qt::Horizontal, i18n( "Action for Spam" ), this, "gboxAction" ); + QHBoxLayout* layAction = new QHBoxLayout( gboxAction->layout(), 10 ); + layMain->addWidget( gboxAction ); + + cmbAction = new KComboBox( gboxAction, "cmbAction" ); + layAction->addWidget( cmbAction ); + QToolTip::add( cmbAction, i18n( "Choose the action for spam mails." ) ); + connect( cmbAction, SIGNAL( activated( int ) ), this, SLOT( slotActionChanged( int ) ) ); + connect( cmbAction, SIGNAL( activated( int ) ), this, SLOT( slotChanged() ) ); + + //insert items + cmbAction->insertItem( i18n( "Delete" ), ID_SPAM_ACTION_BUTTONS_DELETE ); + cmbAction->insertItem( i18n( "Mark" ), ID_SPAM_ACTION_BUTTONS_MARK ); + cmbAction->insertItem( i18n( "Move" ), ID_SPAM_ACTION_BUTTONS_MOVE ); + + //create edit line to defined the mailbox for move + txtMailbox = new KLineEdit( gboxAction ); + layAction->addWidget( txtMailbox ); + connect( txtMailbox, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotChanged() ) ); + + //create wizard button to configure mailbox + btnMailboxWizard= new KPushButton( KGuiItem( QString::null, "wizard" ), gboxAction ); + layAction->addWidget( btnMailboxWizard ); + QToolTip::add( btnMailboxWizard, i18n( "Choose the mailbox" ) ); + connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) ); + + //set defaults + switch( DEFAULT_SPAMCHECK_ACTION ) + { + case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break; + } + + txtMailbox->setText( DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ); + + //enable or disable widgets + slotActionChanged( cmbAction->currentItem() ); + gboxAction->setEnabled( isSpamAssassinRunning() ); + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load configured values + load(); +} + +ConfigSpamcheck::~ConfigSpamcheck() +{ +} + +void ConfigSpamcheck::load() +{ + config->setGroup( CONFIG_GROUP_SPAMCHECK ); + + //load action + switch( config->readNumEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ) ) + { + case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break; + } + + //get mailbox name + if( config->readNumEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ) == CONFIG_VALUE_SPAMCHECK_ACTION_MOVE ) + txtMailbox->setText( config->readEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX, DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotActionChanged( cmbAction->currentItem() ); +} + +void ConfigSpamcheck::defaults() +{ + switch( DEFAULT_SPAMCHECK_ACTION ) + { + case CONFIG_VALUE_SPAMCHECK_ACTION_DELETE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_DELETE ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MARK : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MARK ); break; + case CONFIG_VALUE_SPAMCHECK_ACTION_MOVE : cmbAction->setCurrentItem( ID_SPAM_ACTION_BUTTONS_MOVE ); break; + } + + if( DEFAULT_SPAMCHECK_ACTION == CONFIG_VALUE_SPAMCHECK_ACTION_MOVE ) + txtMailbox->setText( QString( DEFAULT_SPAMCHECK_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotActionChanged( cmbAction->currentItem() ); + + slotChanged(); +} + +void ConfigSpamcheck::save() +{ + config->setGroup( CONFIG_GROUP_SPAMCHECK ); + + //save action + switch( cmbAction->currentItem() ) + { + case ID_SPAM_ACTION_BUTTONS_DELETE : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_DELETE ); break; + case ID_SPAM_ACTION_BUTTONS_MARK : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_MARK ); break; + case ID_SPAM_ACTION_BUTTONS_MOVE : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, CONFIG_VALUE_SPAMCHECK_ACTION_MOVE ); break; + default : config->writeEntry( CONFIG_ENTRY_SPAMCHECK_ACTION, DEFAULT_SPAMCHECK_ACTION ); break; + } + + //save mailbox name + if( cmbAction->currentItem() == ID_SPAM_ACTION_BUTTONS_MOVE ) + { + config->writeEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX, txtMailbox->text() ); + } + else + { + config->deleteEntry( CONFIG_ENTRY_SPAMCHECK_MOVE_MAILBOX ); + } + + config->sync(); +} + +void ConfigSpamcheck::slotChanged() +{ + KCModule::changed(); +} + +void ConfigSpamcheck::slotActionChanged( int index ) +{ + switch( index ) + { + case ID_SPAM_ACTION_BUTTONS_MOVE : txtMailbox->setEnabled( true ); + if( txtMailbox->text() == "" ) + txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + btnMailboxWizard->setHidden( false ); + break; + default : txtMailbox->setEnabled( false ); + btnMailboxWizard->setHidden( true ); + break; + } +} + +void ConfigSpamcheck::slotOpenMailBoxWizard( ) +{ + MailBoxWizard wizard( this, "malboxwizard" ); + wizard.setCaption( i18n( "Mailbox Select" ) ); + int res = wizard.exec(); + + if( res == QDialog::Accepted ) + txtMailbox->setText( wizard.getPath() ); +} + +bool ConfigSpamcheck::isSpamAssassinRunning( ) const +{ + FILE *read_fp; + char buffer[ BUFSIZ + 1 ]; + int chars_read; + bool found = false; + + memset( buffer, '\0', sizeof( buffer ) ); + read_fp = popen( "ps -eo comm", "r" ); + if( read_fp != NULL ) + { + chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp ); + while( chars_read > 0 ) + { + buffer[ chars_read - 1 ] = '\0'; + QString output( buffer ); + found = output.contains( NAME_SPAMASSASSIN_DAEMON ) > 0; + chars_read = fread( buffer, sizeof( char ), BUFSIZ, read_fp ); + } + pclose( read_fp ); + } + + return found; +} + +void ConfigSpamcheck::slotTestSpamAssassin( ) +{ + if( isSpamAssassinRunning() ) + { + KMessageBox::information( this, i18n( "SpamAssassin is running." ), i18n( "Check for SpamAssassin" ) ); + gboxAction->setEnabled( true ); + } + else + { + KMessageBox::information( this, i18n( "SpamAssassin is not running." ), i18n( "Check for SpamAssassin" ) ); + gboxAction->setEnabled( false ); + } +} + +#include "configspamcheck.moc" diff --git a/kshowmail/kcmconfigs/configspamcheck.h b/kshowmail/kcmconfigs/configspamcheck.h new file mode 100644 index 0000000..d2af35c --- /dev/null +++ b/kshowmail/kcmconfigs/configspamcheck.h @@ -0,0 +1,161 @@ +// +// C++ Interface: configspamcheck +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef CONFIGSPAMCHECK_H +#define CONFIGSPAMCHECK_H + +//C-headers +#include +#include +#include +#include + +//Qt headers +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//Kshowmail headers +#include "../constants.h" +#include "mailboxwizard.h" + +//radio button IDs +#define ID_SPAM_ACTION_BUTTONS_DELETE 0 +#define ID_SPAM_ACTION_BUTTONS_MARK 1 +#define ID_SPAM_ACTION_BUTTONS_MOVE 2 + + +/** + * @brief Part of the setup dialog (KShowMailApp::SetupDialog) to configure the spam check. + * @author Ulrich Weigelt + */ +class ConfigSpamcheck : public KCModule +{ + +Q_OBJECT + + + public: + /** + * Generic constructor + */ + ConfigSpamcheck( QWidget* parent = 0, const char* name = 0, const QStringList &args = QStringList() ); + + /** + * Destructor + */ + ~ConfigSpamcheck(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to reflect the current settings stored in the + * config file. + */ + virtual void load(); + + /** + * Overloaded method of KCModule. + * Sets the user interface elements to default values. + * This method is called when the user clicks the "Default" button. + */ + virtual void defaults(); + + /** + * Overloaded method of KCModule. + * Stores the config information as shown in the user interface in the + * config file. + * Is called when the user clicks "Apply" or "Ok". + */ + virtual void save(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Button to test for a running SpamAssassin + */ + KPushButton* btnTest; + + /** + * Combobox to select the action for spam. + */ + KComboBox* cmbAction; + + /** + * If selected, the spam mails will be moved to the mailbox which is written in this edit line. + */ + KLineEdit* txtMailbox; + + /** + * This button opens a wizard which will help to get the right mailbox + */ + KPushButton* btnMailboxWizard; + + /** + * Contains the widgets of action configuration. + */ + QGroupBox* gboxAction; + + private slots: + + /** + * Connected with the configuration items. + * Calls the slot changed() of KCModule to notify the dialog about the change. + */ + void slotChanged(); + + /** + * Connected with combobox cmbAction. + * Enables or disables additional widgets for action configuration. + * @param index position (index) of the selected action + */ + void slotActionChanged( int index ); + + /** + * Connected with button btnMailboxWizard. + * Opens a wizard to configure the mailbox + */ + void slotOpenMailBoxWizard(); + + /** + * Connected with btnTest. + * Tests whether SpamAssassin is running and shows a message box containing the result. + * Enables or disables the action widgets. + */ + void slotTestSpamAssassin(); + + protected: + + /** + * Looks for a running spamd daemon of SpamAssassin. + * @return TRUE - SpamAssassin is running + */ + bool isSpamAssassinRunning() const; + +}; + +#endif diff --git a/kshowmail/kcmconfigs/encryption.cpp b/kshowmail/kcmconfigs/encryption.cpp new file mode 100644 index 0000000..dd3bcec --- /dev/null +++ b/kshowmail/kcmconfigs/encryption.cpp @@ -0,0 +1,85 @@ +// +// C++ Implementation: encryption +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "encryption.h" + +//used in crypt() and decrypt() +static const char scramble1 [50] = "C6FDC7A1EDFBB6FEE3DBF5BEBAEFDDF7ABC6FDC7A1EDFBB6"; +static const char hexstr [17] = "0123456789ABCDEF"; + +int Encryption::hexbyt( const char c ) +{ + if( c >= '0' && c <= '9' ) + return c - '0'; + else + return c - 'A' + 10; +} + +const QString Encryption::crypt( const KURL& url ) +{ + char result[50]; + char scramble2[50]; + QString hexresult; + + memset (result, 0, 50); + memset (scramble2, 0, 50); + int pos = url.pass().length () + 1; + unsigned int free = 50 - pos; + + if( url.user().length() <= free ) + { + strcpy( &scramble2[pos], url.user() ); + pos += url.user().length(); + free -= url.user().length(); + } + else + { + memcpy( &scramble2[pos], url.user().latin1(), free ); + free = 0; + } + + if( url.host().length() <= free ) + { + strcpy( &scramble2[pos], url.host() ); + pos += url.host().length(); + free -= url.host().length(); + } + else + { + memcpy( &scramble2[pos], url.host().latin1(), free ); + free = 0; + } + + memcpy( result, url.pass().latin1(), url.pass().length() ); + for (int i = 0; i <= 31; i++) + { + result[i] = (char)( result[i] ^ ( scramble1[i] ^ scramble2[i] ) ); + hexresult += hexstr[ result[i] / 16 ]; + hexresult += hexstr[ result[i] % 16 ]; + } + + return hexresult; +} + +const QString Encryption::decrypt( const QString& pass ) +{ + char result[50]; + + memset( result, 0, 50 ); + int i; + for( i = 0; i <= 31; i++ ) + { + result[i] = (char)hexbyt( pass[ i * 2 ] ) * 16 + hexbyt( pass[ i * 2 + 1 ] ); + result[i] = (char)( result[i] ^ scramble1[i] ); + } + + return result; +} diff --git a/kshowmail/kcmconfigs/encryption.h b/kshowmail/kcmconfigs/encryption.h new file mode 100644 index 0000000..376cc26 --- /dev/null +++ b/kshowmail/kcmconfigs/encryption.h @@ -0,0 +1,46 @@ +// +// C++ Interface: encryption +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +//Qt headers +#include + +//KDE headers +#include + +/** + * @brief Provides functions to crypt and decrypt a password. + */ +namespace Encryption +{ + /** + * Transforms the given hex numeric character to integer. + * For example: a given '2' will transformed to 2; 'B' to 12. + * @param c character to transform [0..9, 'A'..'F']; no lower case letters + * @return integer value of the given character + */ + int hexbyt( const char c ); + + /** + * Encrypts the the password in the given url and returns it. + * The encryption algorithm uses host and user name to crypt the password. + * @param url the url with password, host and user name + * @return encrypted password + */ + const QString crypt( const KURL& url ); + + /** + * Decrypts the given encrypted password. + * @param pass encrypted password + * @return decrypted password + */ + const QString decrypt( const QString& pass ); +} diff --git a/kshowmail/kcmconfigs/filtercriteriawidget.cpp b/kshowmail/kcmconfigs/filtercriteriawidget.cpp new file mode 100644 index 0000000..c7ea8c5 --- /dev/null +++ b/kshowmail/kcmconfigs/filtercriteriawidget.cpp @@ -0,0 +1,338 @@ +// +// C++ Implementation: filtercriteriawidget +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filtercriteriawidget.h" + +FilterCriteriaWidget::FilterCriteriaWidget( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + //this is the main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, KDialog::spacingHint(), "layMain" ); + + //and now the layouts of the first and second line + QHBoxLayout* layLine1 = new QHBoxLayout( layMain, KDialog::spacingHint(), "layLine1" ); + QHBoxLayout* layLine2 = new QHBoxLayout( layMain, KDialog::spacingHint(), "layLine2" ); + + //Source Select + cmbSource = new KComboBox( this, "cmbSource" ); + cmbSource->insertItem( i18n( "From" ), ID_COMBO_SOURCE_FROM ); + cmbSource->insertItem( i18n( "To" ), ID_COMBO_SOURCE_TO ); + cmbSource->insertItem( i18n( "Size (Bytes)" ), ID_COMBO_SOURCE_SIZE ); + cmbSource->insertItem( i18n( "Subject" ), ID_COMBO_SOURCE_SUBJECT ); + cmbSource->insertItem( i18n( "Header" ), ID_COMBO_SOURCE_HEADER ); + cmbSource->insertItem( i18n( "Account" ), ID_COMBO_SOURCE_ACCOUNT ); + layLine1->addWidget( cmbSource ); + connect( cmbSource, SIGNAL( activated( int ) ), this, SLOT( slotSetWidgets() ) ); + + switch( DEFAULT_FILTER_CRITERIA_SOURCE ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : cmbSource->setCurrentItem( ID_COMBO_SOURCE_TO ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SIZE ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SUBJECT ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : cmbSource->setCurrentItem( ID_COMBO_SOURCE_HEADER ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_ACCOUNT ); break; + default : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break; + } + + //Comboboxes to select the condition between source and value + cmbConditionText = new KComboBox( this, "cmbConditionText" ); + cmbConditionText->insertItem( i18n( "contains" ), ID_COMBO_COND_TEXT_CONTAINS ); + cmbConditionText->insertItem( i18n( "does not contain" ), ID_COMBO_COND_TEXT_NOT_CONTAINS ); + cmbConditionText->insertItem( i18n( "equals" ), ID_COMBO_COND_TEXT_EQUALS ); + cmbConditionText->insertItem( i18n( "does not equal" ), ID_COMBO_COND_TEXT_NOT_EQUALS ); + cmbConditionText->insertItem( i18n( "matches regular expression" ), ID_COMBO_COND_TEXT_REGEXPR ); + cmbConditionText->insertItem( i18n( "does not match reg. expr." ), ID_COMBO_COND_TEXT_NOT_REGEXPR ); + layLine1->addWidget( cmbConditionText ); + connect( cmbConditionText, SIGNAL( activated( int ) ), this, SLOT( slotSetWidgets() ) ); + + switch( DEFAULT_FILTER_CRITERIA_COND_TEXT ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_CONTAINS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_EQUALS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_EQUALS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_REGEXPR );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_REGEXPR );break; + default : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS ); break; + } + + cmbConditionNum = new KComboBox( this, "cmbConditionNum" ); + cmbConditionNum->insertItem( i18n( "is equal to" ), ID_COMBO_COND_NUM_EQUAL ); + cmbConditionNum->insertItem( i18n( "is not equal to" ), ID_COMBO_COND_NUM_NOT_EQUAL ); + cmbConditionNum->insertItem( i18n( "is greater than" ), ID_COMBO_COND_NUM_GREATER ); + cmbConditionNum->insertItem( i18n( "is greater than or equal to" ), ID_COMBO_COND_NUM_GREATER_EQUAL ); + cmbConditionNum->insertItem( i18n( "is less than" ), ID_COMBO_COND_NUM_LESS ); + cmbConditionNum->insertItem( i18n( "is less than or equal to" ), ID_COMBO_COND_NUM_LESS_EQUAL ); + layLine1->addWidget( cmbConditionNum ); + + switch( DEFAULT_FILTER_CRITERIA_COND_NUM ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_NOT_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS_EQUAL ); break; + default : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break; + } + + //edit line and spin box which hold the comparation values + txtCompValueText = new KLineEdit( this, "txtCompValueText" ); + txtCompValueText->setMinimumWidth( WIDTH_FILTER_TEXT_VALUE_LINE ); + layLine1->addWidget( txtCompValueText ); + + spbCompValueNum = new KIntNumInput( DEFAULT_FILTER_CRITERIA_SIZE, this, 10, "spbCompValueNum" ); + spbCompValueNum->setMinValue( 0 ); + spbCompValueNum->setSuffix( " Bytes" ); + layLine1->addWidget( spbCompValueNum ); + + //Button to open the regular expression editor + btnOpenRegExpEditor = new KPushButton( KGuiItem( "", "edit", "Edit Regualar Expression" ), this, "btnOpenRegExpEditor" ); + layLine1->addWidget( btnOpenRegExpEditor ); + connect( btnOpenRegExpEditor, SIGNAL( clicked() ), this, SLOT( slotOpenRegExpEditor() ) ); + + //check whether the KRegExpEditor is available + kRegExpEditorAvailable = !KTrader::self()->query( "KRegExpEditor/KRegExpEditor" ).isEmpty(); + + //checkbox to select case sensitve + chkCaseSensitive = new QCheckBox( i18n( "Case sensitive" ), this, "chkCaseSensitive" ); + chkCaseSensitive->setChecked( DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE ); //set default + layLine2->addWidget( chkCaseSensitive ); + + //separator to the next criteria widget + layMain->addWidget( new KSeparator( this ) ); + + //set widgets dependent on criteria source + slotSetWidgets(); +} + + +FilterCriteriaWidget::~FilterCriteriaWidget() +{ +} + +void FilterCriteriaWidget::slotSetWidgets( ) +{ + switch( cmbSource->currentItem() ) + { + case ID_COMBO_SOURCE_FROM : cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + case ID_COMBO_SOURCE_TO : cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + case ID_COMBO_SOURCE_SIZE : cmbConditionNum->setHidden( false ); + spbCompValueNum->setHidden( false ); + cmbConditionText->setHidden( true ); + txtCompValueText->setHidden( true ); + chkCaseSensitive->setHidden( true ); + break; + case ID_COMBO_SOURCE_SUBJECT : cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + case ID_COMBO_SOURCE_HEADER : cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + case ID_COMBO_SOURCE_ACCOUNT : cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + default: cmbConditionNum->setHidden( true ); + spbCompValueNum->setHidden( true ); + cmbConditionText->setHidden( false ); + txtCompValueText->setHidden( false ); + chkCaseSensitive->setHidden( false ); + break; + } + + //show or hide widgets of regular expressions + if( !cmbConditionText->isHidden() && ( cmbConditionText->currentItem() == ID_COMBO_COND_TEXT_REGEXPR || cmbConditionText->currentItem() == ID_COMBO_COND_TEXT_NOT_REGEXPR ) ) + { + if( kRegExpEditorAvailable ) + btnOpenRegExpEditor->setHidden( false ); + + //we don't need case sensitve for regular expressions + chkCaseSensitive->setHidden( true ); + } + else + { + btnOpenRegExpEditor->setHidden( true ); + } +} + +void FilterCriteriaWidget::slotOpenRegExpEditor( ) +{ + QDialog* editorDialog = KParts::ComponentFactory::createInstanceFromQuery( "KRegExpEditor/KRegExpEditor" ); + + if( editorDialog != NULL ) + { + //kdeutils was installed, so the dialog was found fetch the editor interface + KRegExpEditorInterface* editor = static_cast( editorDialog->qt_cast( "KRegExpEditorInterface" ) ); + if( editor == NULL ) + { + KMessageBox::error( this, i18n( "The Regular Expression Editor could not be initilized." ) ); + return; + } + + //use the editor. + editor->setRegExp( txtCompValueText->text() ); + + //exec the dialog + if( editorDialog->exec() == QDialog::Accepted ) + txtCompValueText->setText( editor->regExp() ); + + //delete dialog + delete editorDialog; + } + else + KMessageBox::error( this, i18n( "The Regular Expression Editor is not available." ) ); + +} + +void FilterCriteriaWidget::setNumCriteria( int source, int condition, uint value ) +{ + //set source + switch( source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SIZE ); break; + default : kdError() << "FilterCriteriaWidget::setNumCriteria: invalid source parameter." << endl; + return; + } + + //show or hide widgets + slotSetWidgets(); + + //set condition + switch( condition ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_NOT_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER_EQUAL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS ); break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS_EQUAL ); break; + default : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break; + } + + //set comparison value + spbCompValueNum->setValue( value ); + + //show or hide widgets + slotSetWidgets(); +} + +void FilterCriteriaWidget::setTextCriteria( int source, int condition, QString value, bool cs ) +{ + //set source + switch( source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : cmbSource->setCurrentItem( ID_COMBO_SOURCE_TO ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SUBJECT ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : cmbSource->setCurrentItem( ID_COMBO_SOURCE_HEADER ); break; + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_ACCOUNT ); break; + default : kdError() << "FilterCriteriaWidget::setTextCriteria: invalid source parameter." << endl; + return; + } + + //set condition + switch( condition ) + { + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_CONTAINS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_EQUALS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_EQUALS );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_REGEXPR );break; + case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_REGEXPR );break; + default : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS ); break; + } + + //set value + txtCompValueText->setText( value ); + + //set case sensitve + chkCaseSensitive->setChecked( cs ); + + //show or hide widgets + slotSetWidgets(); + +} + +FilterCriteria_Type FilterCriteriaWidget::getValues() +{ + FilterCriteria_Type crit; //return value + + switch( cmbSource->currentItem() ) + { + case ID_COMBO_SOURCE_FROM : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM; break; + case ID_COMBO_SOURCE_TO : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO; break; + case ID_COMBO_SOURCE_SIZE : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE; break; + case ID_COMBO_SOURCE_SUBJECT : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT; break; + case ID_COMBO_SOURCE_HEADER : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER; break; + case ID_COMBO_SOURCE_ACCOUNT : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT; break; + default : crit.source = 99; break; + } + + if( crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM || + crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO || + crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT || + crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER || + crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT ) + { + switch( cmbConditionText->currentItem() ) + { + case ID_COMBO_COND_TEXT_CONTAINS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS; break; + case ID_COMBO_COND_TEXT_NOT_CONTAINS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS; break; + case ID_COMBO_COND_TEXT_EQUALS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS; break; + case ID_COMBO_COND_TEXT_NOT_EQUALS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS; break; + case ID_COMBO_COND_TEXT_REGEXPR : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR; break; + case ID_COMBO_COND_TEXT_NOT_REGEXPR : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR; break; + default : crit.condition = 99; break; + } + } else if ( crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE ) + { + switch( cmbConditionNum->currentItem() ) + { + case ID_COMBO_COND_NUM_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL; break; + case ID_COMBO_COND_NUM_NOT_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL; break; + case ID_COMBO_COND_NUM_GREATER : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER; break; + case ID_COMBO_COND_NUM_GREATER_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL; break; + case ID_COMBO_COND_NUM_LESS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS; break; + case ID_COMBO_COND_NUM_LESS_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL; break; + default : crit.condition = 99; + } + } else + crit.condition = 99; + + crit.txtValue = txtCompValueText->text(); + crit.numValue = spbCompValueNum->value(); + crit.cs = chkCaseSensitive->isChecked(); + + return crit; +} + + +#include "filtercriteriawidget.moc" diff --git a/kshowmail/kcmconfigs/filtercriteriawidget.h b/kshowmail/kcmconfigs/filtercriteriawidget.h new file mode 100644 index 0000000..14721c2 --- /dev/null +++ b/kshowmail/kcmconfigs/filtercriteriawidget.h @@ -0,0 +1,163 @@ +// +// C++ Interface: filtercriteriawidget +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERCRITERIAWIDGET_H +#define FILTERCRITERIAWIDGET_H + +//Qt headers +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include <../constants.h> +#include <../types.h> + +//ComboBox IDs +#define ID_COMBO_SOURCE_FROM 0 +#define ID_COMBO_SOURCE_TO 1 +#define ID_COMBO_SOURCE_SIZE 2 +#define ID_COMBO_SOURCE_SUBJECT 3 +#define ID_COMBO_SOURCE_HEADER 4 +#define ID_COMBO_SOURCE_ACCOUNT 5 + +#define ID_COMBO_COND_TEXT_CONTAINS 0 +#define ID_COMBO_COND_TEXT_NOT_CONTAINS 1 +#define ID_COMBO_COND_TEXT_EQUALS 2 +#define ID_COMBO_COND_TEXT_NOT_EQUALS 3 +#define ID_COMBO_COND_TEXT_REGEXPR 4 +#define ID_COMBO_COND_TEXT_NOT_REGEXPR 5 + +#define ID_COMBO_COND_NUM_EQUAL 0 +#define ID_COMBO_COND_NUM_NOT_EQUAL 1 +#define ID_COMBO_COND_NUM_GREATER 2 +#define ID_COMBO_COND_NUM_GREATER_EQUAL 3 +#define ID_COMBO_COND_NUM_LESS 4 +#define ID_COMBO_COND_NUM_LESS_EQUAL 5 + +using namespace Types; + +/** + * @brief Part of the filter setup dialog (class FilterSetupDialog) to show a criteria of the selected filter. + * @author Ulrich Weigelt + */ +class FilterCriteriaWidget : public QWidget +{ + +Q_OBJECT + + public: + + /** + * Constructor + */ + FilterCriteriaWidget( QWidget *parent = 0, const char *name = 0 ); + + /** + * Destructor + */ + ~FilterCriteriaWidget(); + + /** + * Sets the values of a numeric criteria. + * @param source Object of Comparison (see constants.h for valid values) + * @param condition Condition of the comparison (see constants.h for valid values) + * @param value comparison value + */ + void setNumCriteria( int source, int condition, uint value ); + + /** + * Sets the values of a text criteria. + * @param source Object of Comparison (see constants.h for valid values) + * @param condition Condition of the comparison (see constants.h for valid values) + * @param value comparison string + * @param cs TRUE - comparison is case sensitive; FALSE - comparison is not case sensitive + */ + void setTextCriteria( int source, int condition, QString value, bool cs ); + + /** + * Returns the values of the criteria. + * @return criteria values + */ + FilterCriteria_Type getValues(); + + private: + + /** + * Combobox to select the source of the criteria. + */ + KComboBox* cmbSource; + + /** + * Combobox to select the condition of a text source (From, To, ...) + */ + KComboBox* cmbConditionText; + + /** + * Combobox to select the condition of a numeric source (Size, ...) + */ + KComboBox* cmbConditionNum; + + /** + * Line for a text comparative value. + */ + KLineEdit* txtCompValueText; + + /** + * Spin Box for a numeric comparative value. + */ + KIntNumInput* spbCompValueNum; + + /** + * Checkbox to select case sensitive. + */ + QCheckBox* chkCaseSensitive; + + /** + * Button to open the regular expression editor. + */ + KPushButton* btnOpenRegExpEditor; + + /** + * TRUE - KRegExpEditor is installed and available. + */ + bool kRegExpEditorAvailable; + + + private slots: + + /** + * Connected with combobox cmbSource. + * Hides or shows the widgets dependent on the criteria source (text or numeric). + */ + void slotSetWidgets(); + + /** + * Opens the editor for regular expressions. + */ + void slotOpenRegExpEditor(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/filtersetupdialog.cpp b/kshowmail/kcmconfigs/filtersetupdialog.cpp new file mode 100644 index 0000000..58e390b --- /dev/null +++ b/kshowmail/kcmconfigs/filtersetupdialog.cpp @@ -0,0 +1,451 @@ +// +// C++ Implementation: filtersetupdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filtersetupdialog.h" + +FilterSetupDialog::FilterSetupDialog( QWidget* parent, FilterSetupItem* item ) + : KDialogBase( parent, "FilterSetupDialog", true, QString::null, Ok|Cancel, Ok, true ) +{ + //save pointer to account and view + filter = item; + + //set caption + if( item != NULL ) + if( item->getName() == DEFAULT_FILTER_NAME ) + setCaption( i18n( "New filter" ) ); + else + setCaption( i18n( "Edit filter" ) ); + + //create main widget and layout + QWidget* pgMain = new QWidget( this ); + setMainWidget( pgMain ); + QVBoxLayout* layMain = new QVBoxLayout( pgMain, 0, spacingHint() ); + + //create filter name widgets + QHBoxLayout* layName = new QHBoxLayout( layMain, spacingHint() ); + QLabel* lblName = new QLabel( i18n( "Name:" ), pgMain, "lblName" ); + layName->addWidget( lblName ); + txtName = new KLineEdit( pgMain, "txtName" ); + layName->addWidget( txtName ); + + //create group boxes and layouts for rules and action + QGroupBox* gboxCriteria = new QGroupBox( 0, Qt::Horizontal, i18n( "Filter Criterias" ), pgMain, "gboxCriteria" ); + QVBoxLayout* layCriteria = new QVBoxLayout( gboxCriteria->layout(), spacingHint() ); + layMain->addWidget( gboxCriteria ); + + QGroupBox* gboxAction = new QGroupBox( 0, Qt::Horizontal, i18n( "Filter Action" ), pgMain, "gboxAction" ); + QHBoxLayout* layAction = new QHBoxLayout( gboxAction->layout(), spacingHint() ); + layMain->addWidget( gboxAction ); + + //radio buttons to select the kind of linkage between filter criterias + QHBoxLayout* layLinkage = new QHBoxLayout( layCriteria, spacingHint(), "layLinkage" ); + grpLinkage = new QButtonGroup( NULL, "grpLinkage" ); + + QRadioButton* btnMatchAll = new QRadioButton( i18n( "Match all of the following" ), gboxCriteria, "btnMatchAll" ); + QRadioButton* btnMatchAny = new QRadioButton( i18n( "Match any of the following" ), gboxCriteria, "btnMatchAny" ); + grpLinkage->insert( btnMatchAll, ID_BUTTON_LINKAGE_MATCH_ALL ); + grpLinkage->insert( btnMatchAny, ID_BUTTON_LINKAGE_MATCH_ANY ); + layLinkage->addWidget( btnMatchAll ); + layLinkage->addWidget( btnMatchAny ); + + switch( DEFAULT_FILTER_CRITERIA_LINKAGE ) + { + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ALL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ANY ); break; + default : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ALL ); break; + } + + //this widget holds one or more criterias (class FilterCriteriaWidget) + wdgCriteriasHolding = new QWidget( gboxCriteria, "gboxCriteria" ); + layCriteriasHolding = new QVBoxLayout( wdgCriteriasHolding, 0, spacingHint(), "layCriteriasHolding" ); + layCriteria->addWidget( wdgCriteriasHolding ); + + //buttons to add or remove criterias + QHBoxLayout* layButtons = new QHBoxLayout( layCriteria, spacingHint(), "layButtons" ); + btnAddCriteria = new KPushButton( KGuiItem( i18n( "More" ), "button_more", i18n( "Add a further criteria." ) ), gboxCriteria, "btnAddCriteria" ); + btnRemoveCriteria = new KPushButton( KGuiItem( i18n( "Fewer" ), "button_fewer", i18n( "Remove the last criteria." ) ), gboxCriteria, "btnRemoveCriteria" ); + btnAddCriteria->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); + btnRemoveCriteria->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); + layButtons->addWidget( btnAddCriteria ); + layButtons->addWidget( btnRemoveCriteria ); + layButtons->addStretch(); + connect( btnAddCriteria, SIGNAL( clicked() ), this, SLOT( slotAddCriteriaWidget() ) ); + connect( btnRemoveCriteria, SIGNAL( clicked() ), this, SLOT( slotRemoveCriteriaWidget() ) ); + + //create combobox to select action + cmbAction = new KComboBox( gboxAction, "cmbAction" ); + layAction->addWidget( cmbAction ); + QToolTip::add( cmbAction, i18n( "Choose the action for all mails which are filtered by this filter." ) ); + connect( cmbAction, SIGNAL( activated( int ) ), this, SLOT( slotActionChanged( int ) ) ); + + //insert items + cmbAction->insertItem( i18n( "Show" ), ID_COMBO_FILTER_ACTION_PASS ); + cmbAction->insertItem( i18n( "Delete" ), ID_COMBO_FILTER_ACTION_DELETE ); + cmbAction->insertItem( i18n( "Mark" ), ID_COMBO_FILTER_ACTION_MARK ); + cmbAction->insertItem( i18n( "Move" ), ID_COMBO_FILTER_ACTION_MOVE ); + cmbAction->insertItem( i18n( "Spamcheck" ), ID_COMBO_FILTER_ACTION_SPAMCHECK ); + cmbAction->insertItem( i18n( "Ignore" ), ID_COMBO_FILTER_ACTION_IGNORE ); + + //create edit line to defined the mailbox for move + txtMailbox = new KLineEdit( gboxAction ); + layAction->addWidget( txtMailbox ); + + //create wizard button to configure mailbox + btnMailboxWizard= new KPushButton( KGuiItem( QString::null, "wizard" ), gboxAction ); + layAction->addWidget( btnMailboxWizard ); + QToolTip::add( btnMailboxWizard, i18n( "Choose the mailbox" ) ); + connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) ); + + //set default action + switch( DEFAULT_FILTER_ACTION ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_ACTION_MARK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_SPAMCHECK ); break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_IGNORE ); break; + } + + //enable or disable action widgets + slotActionChanged( cmbAction->currentItem() ); + + //this adds a first empty criteria widget at the dialog if the given setup item pointer is null + //(this means we want to create a new filter) + if( item == NULL ) + { + slotAddCriteriaWidget(); + } + + //write values of the given filter into the dialog items + if( filter != NULL ) + fillDialog(); +} + + +FilterSetupDialog::~FilterSetupDialog() +{ +} + +void FilterSetupDialog::fillDialog( ) +{ + //check for valid pointer to the setup item + if( filter == NULL ) + { + kdError() << "FilterSetupDialog::fillDialog: The given pointer to the filter setup item is NULL." << endl; + return; + } + + //set filter name + txtName->setText( filter->getName() ); + + //set linkage + switch( filter->getCriteriaLinkage() ) + { + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ALL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ANY ); break; + default : kdError() << "FilterSetupDialog::fillDialog: The Filter Setup Item of filter " << filter->getName() << " has returned an invalid linkage value. Set default value." << endl; + switch( DEFAULT_FILTER_CRITERIA_LINKAGE ) + { + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ALL ); break; + case CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY : grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ANY ); break; + default: kdError() << "FilterSetupDialog::fillDialog: The default value DEFAULT_FILTER_CRITERIA_LINKAGE in constants.h is also invalid. Set linkage to ALL." << endl; + grpLinkage->setButton( ID_BUTTON_LINKAGE_MATCH_ALL ); + break; + } + break; + } + + //set criterias + FilterCriteriaList_Type criteriaList = filter->getCriteriaList(); + + if( !criteriaList.empty() ) + { + FilterCriteriaList_Type::iterator it; + for( it = criteriaList.begin(); it != criteriaList.end(); ++it ) + { + //get source and condition + int source = (*it).source; + int condition = (*it).condition; + + //depend on the source we add a numeric or text criteria + switch( source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : addCriteriaWidget( source, condition, (*it).txtValue, (*it).cs ); break; + + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : addCriteriaWidget( source, condition, (*it).numValue ); break; + default : kdError() << "FilterSetupDialog::fillDialog: The Filter Setup Item of filter " << filter->getName() << " has returned an invalid criteria. Add an empty criteria." << endl; + break; + } + } + } + else + //just add a empty criteria widget + slotAddCriteriaWidget(); + + + //set action + switch( filter->getAction() ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_ACTION_MARK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_SPAMCHECK ); break; + default : kdError() << "FilterSetupDialog:: fillDialog: The Filter Setup Item of filter " << filter->getName() << " has returned an invalid action value. Set default value." << endl; + switch( DEFAULT_FILTER_ACTION ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_ACTION_MARK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_SPAMCHECK ); break; + default: kdError() << "FilterSetupDialog::fillDialog: The default value DEFAULT_FILTER_ACTION in constants.h is also invalid. Set action to PASS." << endl; + cmbAction->setCurrentItem( ID_COMBO_FILTER_ACTION_PASS ); + break; + } + } + + //set mailbox name if action is MOVE + if( filter->getAction() == CONFIG_VALUE_FILTER_ACTION_MOVE ) + txtMailbox->setText( filter->getMailBox() ); + + //enable or disable action widgets + slotActionChanged( cmbAction->currentItem() ); + +} + +FilterCriteriaWidget* FilterSetupDialog::slotAddCriteriaWidget( ) +{ + //create a new widget + FilterCriteriaWidget* crit = new FilterCriteriaWidget( wdgCriteriasHolding ); + crit->setHidden( false ); //the new widgets are hidden by default + + //insert it into the layout + layCriteriasHolding->addWidget( crit ); + + //hide remove button if necessary + const QObjectList* critList = wdgCriteriasHolding->children(); + + if( critList != NULL ) + { + if( critList->count() <= 2 ) + btnRemoveCriteria->setEnabled( false ); + else + btnRemoveCriteria->setEnabled( true ); + } + + + + return crit; +} + +void FilterSetupDialog::slotRemoveCriteriaWidget( ) +{ + //get a list of all criteria widgets + const QObjectList* critList = wdgCriteriasHolding->children(); + + //return, if the pointer to the list is invalid + if( critList == NULL ) + { + kdError() << "FilterSetupDialog::slotRemoveCriteriaWidget: No object found in the criteria widget holding." << endl;; + return; + } + + //return, if the holding widget doesn't contain a criteria widget + //the count of children has to be greater than 2, because the layout is the first child + //and one criteria must always be present. + if( critList->count() <= 2 ) return; + + //get iterator + QObjectListIterator it( *critList ); + + //get last child + QObject* obj = it.toLast(); + + //remove last child + if( obj->isA( "FilterCriteriaWidget" ) ) + { + ((QWidget*)obj)->setHidden( true ); + layCriteriasHolding->remove( (QWidget*)obj ); + wdgCriteriasHolding->removeChild( obj ); + } + else + kdError() << "FilterSetupDialog::slotRemoveCriteriaWidget: the last object of the criteria widget holding is not a criteria widget." << endl; + + //hide remove button if necessary + if( critList->count() <= 2 ) + btnRemoveCriteria->setEnabled( false ); + else + btnRemoveCriteria->setEnabled( true ); + +} + +void FilterSetupDialog::addCriteriaWidget( int source, int condition, uint value ) +{ + //check source and condition + if( source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE ) + { + kdError() << "FilterSetupDialog::addCriteriaWidget: invalid source parameter." << endl; + return; + } + + if( condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL ) + { + kdError() << "FilterSetupDialog::addCriteriaWidget: invalid condition parameter." << endl; + return; + } + + //create widget + FilterCriteriaWidget* crit = slotAddCriteriaWidget(); + + //set values + crit->setNumCriteria( source, condition, value ); +} + +void FilterSetupDialog::addCriteriaWidget( int source, int condition, QString value, bool cs ) +{ + //check source and condition + if( source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM && + source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO && + source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT && + source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER && + source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT ) + { + kdError() << "FilterSetupDialog::addCriteriaWidget: invalid source parameter." << endl; + return; + } + + if( condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR && + condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR ) + { + kdError() << "FilterSetupDialog::addCriteriaWidget: invalid condition parameter." << endl; + return; + } + + //create widget + FilterCriteriaWidget* crit = slotAddCriteriaWidget(); + + //set values + crit->setTextCriteria( source, condition, value, cs ); + +} + +void FilterSetupDialog::slotOk() +{ + + //here we write the settings back to the filter setup item + + //filter name + filter->setName( txtName->text() ); + + //linkage + switch( grpLinkage->selectedId() ) + { + case ID_BUTTON_LINKAGE_MATCH_ALL : filter->setCriteriaLinkage( CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL ); break; + case ID_BUTTON_LINKAGE_MATCH_ANY : filter->setCriteriaLinkage( CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ); break; + default : kdDebug() << "FilterSetupDialog::slotOk: Invalid linkage value. Set default value." << endl; + filter->setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE ); break; + } + + //action + switch( cmbAction->currentItem() ) + { + case ID_COMBO_FILTER_ACTION_PASS : filter->setAction( CONFIG_VALUE_FILTER_ACTION_PASS ); break; + case ID_COMBO_FILTER_ACTION_DELETE : filter->setAction( CONFIG_VALUE_FILTER_ACTION_DELETE ); break; + case ID_COMBO_FILTER_ACTION_MARK : filter->setAction( CONFIG_VALUE_FILTER_ACTION_MARK ); break; + case ID_COMBO_FILTER_ACTION_MOVE : filter->setAction( CONFIG_VALUE_FILTER_ACTION_MOVE ); break; + case ID_COMBO_FILTER_ACTION_IGNORE : filter->setAction( CONFIG_VALUE_FILTER_ACTION_IGNORE ); break; + case ID_COMBO_FILTER_ACTION_SPAMCHECK : filter->setAction( CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ); break; + default : kdDebug() << "FilterSetupDialog::slotOk: Invalid action value. Set default value." << endl; + filter->setAction( DEFAULT_FILTER_ACTION ); break; + } + + //mailbox name if action is MOVE + if( cmbAction->currentItem() == ID_COMBO_FILTER_ACTION_MOVE ) + filter->setMailBox( txtMailbox->text() ); + + //criteria widgets + + //get list of all children of the criterias holding widget + const QObjectList* children = wdgCriteriasHolding->children(); + + //get iterator of the list + QObjectListIterator it( *children ); + + QObject* obj; //current child object + FilterCriteriaList_Type critList; //list of criterias; will be give to the filter setup item + + //iterate over the children list + while ( ( obj = it.current() ) != NULL ) + { + //get next child + ++it; + + if( obj->isA( "FilterCriteriaWidget" ) ) //check for criteria object + { + //get the values of the criteria + FilterCriteria_Type crit = ( (FilterCriteriaWidget*)obj )->getValues(); + + //append the new criteria at the end of the criteria list + critList.push_back( crit ); + } + } + + //pass criteria list to filter setup item + filter->setCriteriaList( critList ); + + //call slot of super class to close the dialog + KDialogBase::slotOk(); +} + +void FilterSetupDialog::slotActionChanged( int index ) +{ + switch( index ) + { + case ID_COMBO_FILTER_ACTION_MOVE : txtMailbox->setEnabled( true ); + if( txtMailbox->text() == "" ) txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + btnMailboxWizard->setHidden( false ); + break; + default : txtMailbox->setEnabled( false ); + btnMailboxWizard->setHidden( true ); + break; + } +} + +void FilterSetupDialog::slotOpenMailBoxWizard( ) +{ + MailBoxWizard wizard( this, "malboxwizard" ); + wizard.setCaption( i18n( "Mailbox Select" ) ); + int res = wizard.exec(); + + if( res == QDialog::Accepted ) + txtMailbox->setText( wizard.getPath() ); + +} + + +#include "filtersetupdialog.moc" diff --git a/kshowmail/kcmconfigs/filtersetupdialog.h b/kshowmail/kcmconfigs/filtersetupdialog.h new file mode 100644 index 0000000..a9fd761 --- /dev/null +++ b/kshowmail/kcmconfigs/filtersetupdialog.h @@ -0,0 +1,191 @@ +// +// C++ Interface: filtersetupdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERSETUPDIALOG_H +#define FILTERSETUPDIALOG_H + +//button IDs +#define ID_BUTTON_LINKAGE_MATCH_ALL 1 +#define ID_BUTTON_LINKAGE_MATCH_ANY 2 + +//Qt headers +#include +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include + +//KShowmail headers +#include "filtersetupitem.h" +#include "filtercriteriawidget.h" +#include "../constants.h" +#include "mailboxwizard.h" + +//IDs of the action combo box +#define ID_COMBO_FILTER_ACTION_PASS 0 +#define ID_COMBO_FILTER_ACTION_DELETE 1 +#define ID_COMBO_FILTER_ACTION_MARK 2 +#define ID_COMBO_FILTER_ACTION_MOVE 3 +#define ID_COMBO_FILTER_ACTION_SPAMCHECK 4 +#define ID_COMBO_FILTER_ACTION_IGNORE 5 + +/** + * @brief Dialog to setup a filter. + * @author Ulrich Weigelt + */ +class FilterSetupDialog : public KDialogBase +{ + + Q_OBJECT + + public: + /** + * General constructor + * @param parent parent of the dialog + * @param item filter to setup; + */ + FilterSetupDialog( QWidget* parent, FilterSetupItem* item = NULL ); + + /** + * Destructor + */ + ~FilterSetupDialog(); + + private: + + /** + * filter to setup + */ + FilterSetupItem* filter; + + /** + * View which shows the filter items. + */ + KListView* ListView; + + /** + * Contains the filter name. + */ + KLineEdit* txtName; + + /** + * Combines the radio buttons to select the kind of linkage between the criterias. + */ + QButtonGroup* grpLinkage; + + /** + * This widget holds one ore more filter criteria dialogs (class FilterCriteriaWidget). + */ + QWidget* wdgCriteriasHolding; + + /** + * Layout for wdgCriterias. + */ + QVBoxLayout* layCriteriasHolding; + + /** + * Button to add a criteria dialog. + */ + KPushButton* btnAddCriteria; + + /** + * Button to remove the last criteria. + */ + KPushButton* btnRemoveCriteria; + + /** + * Combobox to select the action. + */ + KComboBox* cmbAction; + + /** + * If selected, the mails will be moved to the mailbox which is written in this edit line. + */ + KLineEdit* txtMailbox; + + /** + * This button opens a wizard which will help to get the right mailbox + */ + KPushButton* btnMailboxWizard; + + + protected: + + /** + * Writes the values of the given filter into the dialog items. + */ + void fillDialog(); + + /** + * Adds a criteria widget dialog with values for numeric comparison. + * @param source Object of Comparison. It accepts only numeric objects (e.g. Size) (see constants.h for valid values) + * @param condition Condition of the comparison (see constants.h for valid values) + * @param value comparison value + */ + void addCriteriaWidget( int source, int condition, uint value ); + + /** + * Adds a criteria widget dialog with values for text comparison. + * @param source Object of Comparison. It accepts only text objects (e.g. Subject) (see constants.h for valid values) + * @param condition Condition of the comparison (see constants.h for valid values) + * @param value comparison string + * @param cs TRUE - comparison is case sensitive; FALSE - comparison is not case sensitive + */ + void addCriteriaWidget( int source, int condition, QString value, bool cs ); + + + protected slots: + + /** + * Overwritten method of KDialogBase. + * Called if OK was clicked. + * Stores the entered values into the given account item. + * If no item was given it creates a new one. + * After then it invokes slotOk() of KDialogBase. + */ + void slotOk(); + + /** + * Connected with combobox cmbAction. + * Enables or disables additional widgets for action configuration. + * @param index position (index) of the selected action + */ + void slotActionChanged( int index ); + + /** + * Adds a empty critera dialog widget. + * @return Pointer to the new widget + */ + FilterCriteriaWidget* slotAddCriteriaWidget(); + + /** + * Removes the last criteria dialog widget. + */ + void slotRemoveCriteriaWidget(); + + /** + * Connected with button btnMailboxWizard. + * Opens a wizard to configure the mailbox + */ + void slotOpenMailBoxWizard(); +}; + +#endif diff --git a/kshowmail/kcmconfigs/filtersetupitem.cpp b/kshowmail/kcmconfigs/filtersetupitem.cpp new file mode 100644 index 0000000..ef16a53 --- /dev/null +++ b/kshowmail/kcmconfigs/filtersetupitem.cpp @@ -0,0 +1,347 @@ +// +// C++ Implementation: filtersetupitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "filtersetupitem.h" + +FilterSetupItem::FilterSetupItem( KListView* parent ) + : KListViewItem( parent ) +{ + //set default number + number = 0; + + init(); +} + +FilterSetupItem::FilterSetupItem( KListView* parent, uint num ) + : KListViewItem( parent ) +{ + //store the given filter number + number = num; + + init(); +} + +FilterSetupItem::~FilterSetupItem() +{ +} + +void FilterSetupItem::init( ) +{ + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //set default values + setName( i18n( DEFAULT_FILTER_NAME ) ); + setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE ); + setAction( DEFAULT_FILTER_ACTION ); + + //show number in column + setText( ColNumber, QString("%1").arg( number ) ); +} + +void FilterSetupItem::setName( QString name ) +{ + this->name = name; + + //show name in the list view + setText( ColName, name ); +} + +QString FilterSetupItem::getName( ) const +{ + return name; +} + +void FilterSetupItem::setNumber( uint number ) +{ + this->number = number; + + //show number in column + setText( ColNumber, QString("%1").arg( number ) ); +} + +void FilterSetupItem::setAction( int action ) +{ + if( action == CONFIG_VALUE_FILTER_ACTION_PASS || + action == CONFIG_VALUE_FILTER_ACTION_DELETE || + action == CONFIG_VALUE_FILTER_ACTION_MARK || + action == CONFIG_VALUE_FILTER_ACTION_MOVE || + action == CONFIG_VALUE_FILTER_ACTION_IGNORE || + action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + { + this->action = action; + } + else + { + kdError() << "FilterSetupItem::setAction: Invalid parameter for action given. Parameter: " << action << endl; + this->action = DEFAULT_FILTER_ACTION; + return; + } + + //update the text of the rule column + updateActionColumn(); +} + +void FilterSetupItem::save( ) +{ + //build group name + QString group; + group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number ); + + //first delete the group to clear it of old criteria entries + config->deleteGroup( group ); + + //set group + config->setGroup( group ); + + //write entries + config->writeEntry( CONFIG_ENTRY_FILTER_NAME, name ); + + if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL || + linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, linkage ); + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ); + } + + if( action == CONFIG_VALUE_FILTER_ACTION_PASS || + action == CONFIG_VALUE_FILTER_ACTION_DELETE || + action == CONFIG_VALUE_FILTER_ACTION_MARK || + action == CONFIG_VALUE_FILTER_ACTION_MOVE || + action == CONFIG_VALUE_FILTER_ACTION_IGNORE || + action == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_ACTION, action ); + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ); + } + + //write action parameter + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_MOVE : + config->writeEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, mailbox ); + break; + + default: break; + } + + //write criteria list and number of criterias + if( !criteriaList.empty() ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, criteriaList.size() ); + + int ctr = 0; //number of the current criteria + FilterCriteriaList_Type::iterator it; + for( it = criteriaList.begin(); it != criteriaList.end(); ++it ) + { + ctr++; + + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), (*it).source ); + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), (*it).condition ); + + switch( (*it).source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).txtValue ); + config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), (*it).cs ); + break; + + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : config->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).numValue ); + break; + } + } + } + else + { + config->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 ); + } + +} + +void FilterSetupItem::setCriteriaLinkage( int linkage ) +{ + if( linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL || + linkage == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + { + this->linkage = linkage; + } + else + { + kdError() << "FilterSetupItem::setCriteriaLinkage: Invalid parameter for criteria linkage given. Parameter: " << linkage << endl; + this->linkage = DEFAULT_FILTER_CRITERIA_LINKAGE; + return; + } + +} + +void FilterSetupItem::setCriteriaList( FilterCriteriaList_Type list ) +{ + criteriaList = list; +} + +void FilterSetupItem::setMailBox( QString mailbox ) +{ + this->mailbox = mailbox; + + //update the text of the rule column + updateActionColumn(); +} + +int FilterSetupItem::getCriteriaLinkage( ) const +{ + return linkage; +} + +int FilterSetupItem::getAction( ) const +{ + return action; +} + +QString FilterSetupItem::getMailBox( ) const +{ + if( action == CONFIG_VALUE_FILTER_ACTION_MOVE ) + return mailbox; + else + return QString( "" ); +} + +FilterCriteriaList_Type FilterSetupItem::getCriteriaList( ) const +{ + return criteriaList; +} + +uint FilterSetupItem::getNumber( ) const +{ + return number; +} + +int FilterSetupItem::compare( QListViewItem * i, int col, bool ascending ) const +{ + if( col == ColNumber ) + { + return text( ColNumber ).toInt() - i->text( ColNumber ).toInt(); + } + else + return key( col, ascending ).compare( i->key( col, ascending) ); + +} + +void FilterSetupItem::updateActionColumn( ) +{ + QString strAction; //filter action + + //build action + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_PASS : strAction = i18n( "Show" ); break; + case CONFIG_VALUE_FILTER_ACTION_DELETE : strAction = i18n( "Delete" ); break; + case CONFIG_VALUE_FILTER_ACTION_MARK : strAction = i18n( "Mark" ); break; + case CONFIG_VALUE_FILTER_ACTION_MOVE : strAction = i18n( "Move to %1").arg( mailbox ); break; + case CONFIG_VALUE_FILTER_ACTION_IGNORE : strAction = i18n( "Ignore"); break; + case CONFIG_VALUE_FILTER_ACTION_SPAMCHECK : strAction = i18n( "Check for spam" ); break; + default : strAction = i18n( "Unknown action" ); break; + } + + //set text + setText( ColAction, QString( " %1" ).arg( strAction ) ); +} + +void FilterSetupItem::load( ) +{ + //set group + config->setGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( number ) ); + + //get name + setName( config->readEntry( CONFIG_ENTRY_FILTER_NAME, DEFAULT_FILTER_NAME ) ); + + //get linkage + setCriteriaLinkage( config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE ) ); + if( linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL && linkage != CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY ) + setCriteriaLinkage( DEFAULT_FILTER_CRITERIA_LINKAGE ); + + //get action + setAction( config->readNumEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION ) ); + if( action != CONFIG_VALUE_FILTER_ACTION_PASS && + action != CONFIG_VALUE_FILTER_ACTION_DELETE && + action != CONFIG_VALUE_FILTER_ACTION_MARK && + action != CONFIG_VALUE_FILTER_ACTION_MOVE && + action != CONFIG_VALUE_FILTER_ACTION_IGNORE && + action != CONFIG_VALUE_FILTER_ACTION_SPAMCHECK ) + setAction( DEFAULT_FILTER_ACTION ); + + //get action parameter + switch( action ) + { + case CONFIG_VALUE_FILTER_ACTION_MOVE : setMailBox( config->readEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); break; + default : setMailBox( QString::null ); + } + + //get number of criterias + uint numCrit = config->readNumEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 ); + + //get criterias + for( uint ctr = 1; ctr <= numCrit; ctr++ ) + { + struct FilterCriteria_Type crit; + + crit.source = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SOURCE ); + if( crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT && + crit.source != CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE ) + crit.source = DEFAULT_FILTER_CRITERIA_SOURCE; + + switch( crit.source ) + { + case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : crit.condition = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_NUM ); + if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL ) + crit.condition = DEFAULT_FILTER_CRITERIA_COND_NUM; + crit.numValue = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_SIZE ); + break; + + default : crit.condition = config->readNumEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), DEFAULT_FILTER_CRITERIA_COND_TEXT ); + if( crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR && + crit.condition != CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR ) + crit.condition = DEFAULT_FILTER_CRITERIA_COND_TEXT; + crit.txtValue = config->readEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ) ); + crit.cs = config->readBoolEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE ); + break; + } + + criteriaList.push_back( crit ); + + } + + +} + + + diff --git a/kshowmail/kcmconfigs/filtersetupitem.h b/kshowmail/kcmconfigs/filtersetupitem.h new file mode 100644 index 0000000..1d1bf02 --- /dev/null +++ b/kshowmail/kcmconfigs/filtersetupitem.h @@ -0,0 +1,240 @@ +// +// C++ Interface: filtersetupitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef FILTERSETUPITEM_H +#define FILTERSETUPITEM_H + +//KDE headers +#include +#include +#include +#include +#include + +//KShowmail headers +#include "../constants.h" +#include "../types.h" + +using namespace Types; + +/** + * @brief This class is used in ConfigFilter to show the available filters in the list view and to store a filter setup. + * @author Ulrich Weigelt + */ +class FilterSetupItem : public KListViewItem +{ + + public: + + /** + * Column Numbers. + */ + enum Column{ ColNumber = 0, ColName = 1, ColAction = 2 }; + + /** + * General Constructor + * @param parent the list view + */ + FilterSetupItem( KListView* parent ); + + /** + * Constructor + * @param parent the list view + * @param num filter number + */ + FilterSetupItem( KListView* parent, uint num ); + + /** + * Destructor + */ + ~FilterSetupItem(); + + /** + * Sets the filter name. + * @param name filter name + * @see name + * @see getName + */ + void setName( QString name ); + + /** + * Returns the name of this filter. + * @return filter name + * @see name + * @see setName + */ + QString getName() const; + + /** + * Sets the filter number. + * @param number filter number. + * @see number + * @see getNumber + */ + void setNumber( uint number ); + + /** + * Returns the filter number. + * @return filter number + * @see number + * @see setNumber + */ + uint getNumber() const; + + /** + * Sets the action. See constants.h for valid values (CONFIG_VALUE_FILTER_ACTION...). + * @param action + * @see getAction + * @see action + */ + void setAction( int action ); + + /** + * Returns the action of this filter. + * See constants.h for possible values (CONFIG_VALUE_FILTER_ACTION...). + * @return action code + * @see setAction + * @see action + */ + int getAction() const; + + /** + * Sets the mailbox of a move action. + * @param mailbox name of the mailbox + * @see setMailBox + * @see mailbox + */ + void setMailBox( QString mailbox ); + + /** + * Returns the mailbox name of a move action if this action is selected. Otherwise it returns an empty string. + * @return mailbox name + * @see setMailBox + * @see mailbox + */ + QString getMailBox() const; + + /** + * Sets the criteria linkage. + * Valid values are CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL (all criterias have to satisy) or CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY (at least one criteria has to satisy ). + * @param linkage criteria linkage + * @see linkage + */ + void setCriteriaLinkage( int linkage ); + + /** + * Returns the criteria linkage. + * Possible values are CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL (all criterias have to satisy) or CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY (at least one criteria has to satisy ). + * @return criteria linkage + * @see setCriteriaLinkage + * @see linkage + */ + int getCriteriaLinkage() const; + + /** + * Sets the criteria list. + * @param list criteria list + * @see criteriaList + * @see getCriteriaList + * @see Types::FilterCriteriaList_Type + */ + void setCriteriaList( FilterCriteriaList_Type list ); + + /** + * Returns the criteria list. + * @return criteria list + * @see criteriaList + * @see setCriteriaList + * @see Types::FilterCriteriaList_Type + */ + FilterCriteriaList_Type getCriteriaList() const; + + /** + * Saves the settings to the configuration file. + * The group is named CONFIG_GROUP_FILTER + filter number, e.g. Filter12. + */ + void save(); + + /** + * Reimplemantation of QListViewItem::compare. + * Compares this list view item to i using the column col in ascending order. Reutrns <0 if this item is less than i, + * 0 if they are equal and >0 if this item is greater than i. The parameter ascneding will be ignored. + * @param i pointer to the second view item + * @param col number of the sorted column + * @param ascending ignored + */ + virtual int compare( QListViewItem* i, int col, bool ascending ) const; + + /** + * Reads the settings from the config file. + * The group is named CONFIG_GROUP_FILTER + filter number, e.g. Filter12. + */ + void load(); + + + private: + + /** + * filter name + */ + QString name; + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * List of filter criterias. + */ + FilterCriteriaList_Type criteriaList; + + /** + * Filter Action + * See constants.h for valid values (CONFIG_VALUE_FILTER_ACTION...). + */ + int action; + + /** + * Contains the mailbox name if the move action is selected. + */ + QString mailbox; + + /** + * Filter Number. + * The filters will be showed and run through in ascending order. The first number is "0". + */ + uint number; + + /** + * Criteria Linkage. + * Valid values are CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL (all criterias have to satisy) or CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY (at least one criteria has to satisy ). + */ + int linkage; + + protected: + + /** + * Initializes the object. + */ + void init(); + + /** + * Updates the text of the rule column. + */ + void updateActionColumn(); + + + + +}; + +#endif diff --git a/kshowmail/kcmconfigs/kshowmailconfigaccounts.desktop b/kshowmail/kcmconfigs/kshowmailconfigaccounts.desktop new file mode 100644 index 0000000..e8da1f9 --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfigaccounts.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Accounts +Name[de]=Konten +Name[es]=Cuentas +Comment=Accounts +Comment[de]=Konten +Comment[es]=Cuentas +Icon=network +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfigaccounts +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfigaccounts +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=5 +X-KDE-ParentApp=kshowmail diff --git a/kshowmail/kcmconfigs/kshowmailconfigactions.desktop b/kshowmail/kcmconfigs/kshowmailconfigactions.desktop new file mode 100644 index 0000000..a925df8 --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfigactions.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Actions +Name[de]=Aktionen +Name[es]=Acciones +Comment=actions +Comment[de]=Aktionen +Comment[es]=Acciones +Icon=launch +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfigactions +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfigactions +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=2 +X-KDE-ParentApp=kshowmail diff --git a/kshowmail/kcmconfigs/kshowmailconfigdisplay.desktop b/kshowmail/kcmconfigs/kshowmailconfigdisplay.desktop new file mode 100644 index 0000000..ac5e02b --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfigdisplay.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Display +Name[de]=Erscheinungsbild +Name[es]=Visualización +Comment=Display Options +Comment[de]=Erscheinungsbild +Comment[es]=Opciones de visualización +Icon=looknfeel +ServiceTypes=KCModule +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfigdisplay +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfigdisplay +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=3 +X-KDE-ParentApp=kshowmail \ No newline at end of file diff --git a/kshowmail/kcmconfigs/kshowmailconfigfilter.desktop b/kshowmail/kcmconfigs/kshowmailconfigfilter.desktop new file mode 100644 index 0000000..cd6b801 --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfigfilter.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Type=Service +Name=Filter +Name[de]=Filter +Name[es]=Filtro +Comment=Filter +Comment[de]=Filter +Comment[es]=Filtro +Icon=filter +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfigfilter +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfigfilter +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=6 +X-KDE-ParentApp=kshowmail diff --git a/kshowmail/kcmconfigs/kshowmailconfiggeneral.desktop b/kshowmail/kcmconfigs/kshowmailconfiggeneral.desktop new file mode 100644 index 0000000..1f4db6d --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfiggeneral.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=General +Name[de]=Allgemeines +Name[es]=General +Comment=General Options +Comment[de]=Allgemeine Einstellungen +Comment[es]=Opciones generales +Icon=exec +ServiceTypes=KCModule +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfiggeneral +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfiggeneral +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=4 +X-KDE-ParentApp=kshowmail \ No newline at end of file diff --git a/kshowmail/kcmconfigs/kshowmailconfiglog.desktop b/kshowmail/kcmconfigs/kshowmailconfiglog.desktop new file mode 100644 index 0000000..4a5dc5f --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfiglog.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Log +Name[de]=Log +Name[es]=Registro +Comment=Log +Comment[de]=Log +Comment[es]=Registro +Icon=kedit +ServiceTypes=KCModule +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfiglog +X-KDE-FactoryName=kshowmailconfiglog +X-KDE-Weight=7 +X-KDE-ParentApp=kshowmail diff --git a/kshowmail/kcmconfigs/kshowmailconfigspamcheck.desktop b/kshowmail/kcmconfigs/kshowmailconfigspamcheck.desktop new file mode 100644 index 0000000..5f6cb3b --- /dev/null +++ b/kshowmail/kcmconfigs/kshowmailconfigspamcheck.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Type=Service +Name=Spam Checking +Name[de]=Spam-Prüfung +Name[es]=Análisis de spam +Comment=Checking for Spam +Comment[de]=Prüfung auf Spam +Comment[es]=Analizar el spam +Icon=kfind +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=kshowmailconfigspamcheck +X-KDE-CfgDlgHierarchy= +X-KDE-FactoryName=kshowmailconfigspamcheck +X-KDE-IsHiddenByDefault= +X-KDE-RootOnly= +X-KDE-Weight=6 +X-KDE-ParentApp=kshowmail + diff --git a/kshowmail/kcmconfigs/kwalletaccess.cpp b/kshowmail/kcmconfigs/kwalletaccess.cpp new file mode 100644 index 0000000..20dccc6 --- /dev/null +++ b/kshowmail/kcmconfigs/kwalletaccess.cpp @@ -0,0 +1,137 @@ +// +// C++ Implementation: kwalletaccess +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "kwalletaccess.h" + + +bool KWalletAccess::savePassword( const QString & account, const QString & password ) +{ + //check for enabled KWallet + if( !KWallet::Wallet::isEnabled() ) + { + KMessageBox::error( NULL, i18n( "KWallet is not available." ) ); + return false; + } + + //get wallet name for network data + QString name = KWallet::Wallet::NetworkWallet(); + if( name == "" || name == QString::null ) + { + KMessageBox::error( NULL, i18n( "Could not get wallet name for network datas from KWallet." ) ); + return false; + } + + //open wallet + //we want to create a connection object just at first call of this function + static KWallet::Wallet* wallet; + + if( wallet == NULL ) + { + wallet = KWallet::Wallet::openWallet( name ); + } + else if( !wallet->isOpen() ) + { + delete wallet; + wallet = KWallet::Wallet::openWallet( name ); + } + + if( wallet == NULL ) + { + KMessageBox::error( NULL, i18n( "Could not open KWallet." ) ); + return false; + } + + //create kshowmail folder if it does not exist + if( !wallet->hasFolder( "KShowmail" ) ) + { + bool createFolderSuccess = wallet->createFolder( "KShowmail" ); + + if( !createFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not create folder for KShowmail in KWallet." ) ); + return false; + } + } + + //set folder + bool setFolderSuccess = wallet->setFolder( "KShowmail" ); + if( !setFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not open folder for KShowmail in KWallet." ) ); + return false; + } + + //write password + int writePasswordSuccess = wallet->writePassword( account, password ); + if( writePasswordSuccess != 0 ) + { + KMessageBox::error( NULL, i18n( "Could not save password in KWallet." ) ); + return false; + } + + + return true; +} + +QString KWalletAccess::getPassword( const QString & account ) +{ + //check for enabled KWallet + if( !KWallet::Wallet::isEnabled() ) + { + KMessageBox::error( NULL, i18n( "KWallet is not available." ) ); + return QString::null; + } + + //get wallet name for network data + QString name = KWallet::Wallet::NetworkWallet(); + if( name == "" || name == QString::null ) + { + KMessageBox::error( NULL, i18n( "Could not get wallet name for network datas from KWallet." ) ); + return QString::null; + } + + //open wallet + //we want to create a connection object just at first call of this function + static KWallet::Wallet* wallet; + + if( wallet == NULL ) + { + wallet = KWallet::Wallet::openWallet( name ); + } + else if( !wallet->isOpen() ) + { + delete wallet; + wallet = KWallet::Wallet::openWallet( name ); + } + + if( wallet == NULL ) + { + KMessageBox::error( NULL, i18n( "Could not open KWallet." ) ); + return QString::null; + } + + //set folder + bool setFolderSuccess = wallet->setFolder( "KShowmail" ); + if( !setFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not open folder for KShowmail in KWallet." ) ); + return QString::null; + } + + //read password + QString password; + + int readPasswordSuccess = wallet->readPassword( account, password ); + if( readPasswordSuccess != 0 ) + { + KMessageBox::error( NULL, i18n( "Could not get password of account %1 from KWallet." ).arg( account) ); + return QString::null; + } + + return password; +} diff --git a/kshowmail/kcmconfigs/kwalletaccess.h b/kshowmail/kcmconfigs/kwalletaccess.h new file mode 100644 index 0000000..8e9c537 --- /dev/null +++ b/kshowmail/kcmconfigs/kwalletaccess.h @@ -0,0 +1,45 @@ +// +// C++ Interface: kwalletaccess +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef KWALLETACCESS_H +#define KWALLETACCESS_H + +//Qt headers +#include + +//KDE headers +#include +#include +#include +#include + +/** + * @brief Provides routines to save and read passwords using KWallet. + * @author Ulrich Weigelt + */ +namespace KWalletAccess +{ + + /** + * Saves the given password into KWallet. + * @param account account name + * @param password the password + * @return TRUE - password successfully saved + * @return FALSE - password could not be saved + */ + bool savePassword( const QString& account, const QString& password ); + + /** + * Returns the password of the given account. + * @param account account name + * @return the password or QString::null, if the sought password is not stored in KWallet. + */ + QString getPassword( const QString& account ); +} + +#endif diff --git a/kshowmail/kcmconfigs/mailboxwizard.cpp b/kshowmail/kcmconfigs/mailboxwizard.cpp new file mode 100644 index 0000000..d6ab904 --- /dev/null +++ b/kshowmail/kcmconfigs/mailboxwizard.cpp @@ -0,0 +1,164 @@ +// +// C++ Implementation: mailboxwizard +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "mailboxwizard.h" + +MailBoxWizard::MailBoxWizard( QWidget* parent, const char* name ) + : QWizard( parent, name, true ) +{ + + //this is page one + //in this the user can chosse his mail directory + //---------------------------------------------- + QWidget* page1 = new QWidget( this, "page1" ); + QHBoxLayout* layMain1 = new QHBoxLayout( page1, 0, 10 ); + + txtMailDir = new KLineEdit( page1, "txtMailDir" ); + layMain1->addWidget( txtMailDir ); + + btnMailDir = new KPushButton( KGuiItem( QString(), QString( "folder" ), i18n( "Press to choose the mail directory" ), i18n( "Press to choose the mail directory" ) ), page1, "btnMailDir" ); + btnMailDir->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + layMain1->addWidget( btnMailDir ); + connect( btnMailDir, SIGNAL( clicked() ), this, SLOT( slotOpenDirDialog() ) ); + + title1 = i18n( "Please choose the path to the mailboxes.\nKShowmail supports only MailDir boxes." ); + addPage( page1, title1 ); + + + //this is page two + //in this the user can choose the mailbox + //--------------------------------------- + QWidget* page2 = new QWidget( this, "page2" ); + QHBoxLayout* layMain2 = new QHBoxLayout( page2, 0, 10 ); + + lstMailboxes = new KListView( page2, "lstMailboxes" ); + lstMailboxes->addColumn( "Mailbox" ); + lstMailboxes->setRootIsDecorated( true ); + layMain2->addWidget( lstMailboxes ); + + title2 = i18n( "Please choose the mailbox" ); + addPage( page2, title2 ); + setFinishEnabled( page2, true ); + + connect( this, SIGNAL( selected( const QString& ) ), this, SLOT( slotPageChanged( const QString& ) ) ); +} + + +MailBoxWizard::~MailBoxWizard() +{ +} + +void MailBoxWizard::slotOpenDirDialog( ) +{ + //save old path + QString oldPath = txtMailDir->text(); + + //get new path + QString path = KFileDialog::getExistingDirectory( oldPath, this, i18n( "Choose the mailbox directory") ); + + //put new or old path in the edit line + if( path == QString::null ) + txtMailDir->setText( oldPath ); + else + txtMailDir->setText( path ); +} + +void MailBoxWizard::slotPageChanged( const QString& pageTitle ) +{ + //just we looking for mailboxes if the page 2 was opened + if( pageTitle == title2 ) + { + //clear all entries + lstMailboxes->clear(); + + //create an directory object to browse the given directory + QDir mailDir( txtMailDir->text() ); + if( mailDir.isReadable() ) //is the dir readable? + { + //get a list of all entries in this directory + const QStringList entries = mailDir.entryList( QDir::Dirs | QDir::Readable | QDir::Writable | QDir::Hidden, QDir::Name | QDir::IgnoreCase | QDir::LocaleAware ); + + for( QStringList::const_iterator it = entries.begin(); it != entries.end(); ++it ) + { + //add an entry to the mailbox list + QDir newMailDir( mailDir ); + newMailDir.cd( (*it) ); + if( (*it) != ".." && (*it) != "." && isMailDir( newMailDir ) ) + addMailBoxListItem( *it, mailDir ); + } + } + } + +} + +bool MailBoxWizard::isMailDir( const QDir & path ) +{ + //get a list of all subdirectories in this directory + const QStringList entries = path.entryList( QDir::Dirs | QDir::Readable | QDir::Writable | QDir::Hidden, QDir::Name | QDir::IgnoreCase | QDir::LocaleAware ); + + //a maildir folder must contains the folders "cur", "new" and "tmp" + bool curFound = false; + bool newFound = false; + bool tmpFound = false; + + //iterate over all directories and look for the three necessary dirs + QStringList::const_iterator it = entries.begin(); + while( it != entries.end() && !( curFound && newFound && tmpFound ) ) + { + if( *it == "tmp" ) + tmpFound = true; + else if( *it == "cur" ) + curFound = true; + else if( *it == "new" ) + newFound = true; + + ++it; + } + + return curFound && newFound && tmpFound; +} + +void MailBoxWizard::addMailBoxListItem( QString boxname, QDir path ) +{ + //translate some default mailboxes + QString boxnameTrans; + if( boxname.lower() == "inbox" ) + boxnameTrans = i18n( "Inbox" ); + else if( boxname.lower() == "outbox" ) + boxnameTrans = i18n( "Outbox" ); + else if( boxname.lower() == "drafts" ) + boxnameTrans = i18n( "Drafts" ); + else if( boxname.lower() == "sent-mail" ) + boxnameTrans = i18n( "sent-mail" ); + else if( boxname.lower() == "trash" ) + boxnameTrans = i18n( "Trash" ); + else + boxnameTrans = boxname; + + //create item + MailBoxWizardListItem* newItem; + newItem = new MailBoxWizardListItem( lstMailboxes, boxnameTrans, path.absPath() + "/" + boxname + "/" ); + + +} + +QString MailBoxWizard::getPath( ) +{ + MailBoxWizardListItem* item = (MailBoxWizardListItem*)lstMailboxes->selectedItem(); + + QString path = QString::null; + if( item != NULL ) + path = item->getPath(); + + return path; +} + +#include "mailboxwizard.moc" diff --git a/kshowmail/kcmconfigs/mailboxwizard.h b/kshowmail/kcmconfigs/mailboxwizard.h new file mode 100644 index 0000000..2c32b7a --- /dev/null +++ b/kshowmail/kcmconfigs/mailboxwizard.h @@ -0,0 +1,131 @@ +// +// C++ Interface: mailboxwizard +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef MAILBOXWIZARD_H +#define MAILBOXWIZARD_H + +//C-headers +#include + +//Qt headers +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include +#include + +//Kshowmail headers +#include "../constants.h" +#include "mailboxwizardlistitem.h" + +/** + * Wizard to configure the mailbox to which a filteres mail shall be moved. + * @author Ulrich Weigelt + */ +class MailBoxWizard : public QWizard +{ + + Q_OBJECT + + public: + + /** + * Constructor + */ + MailBoxWizard( QWidget* parent = 0, const char* name = 0 ); + + /** + * Destructor + */ + ~MailBoxWizard(); + + /** + * Returns the absolute path of the selected mailbox. + * @return the path + */ + QString getPath(); + + private: + + /** + * This contains the path to the mail directory + */ + KLineEdit* txtMailDir; + + /** + * This button opens a file dialog to slecht the mail directory + */ + KPushButton* btnMailDir; + + /** + * This view shows the available mailboxes in the selected directory + */ + KListView* lstMailboxes; + + /** + * Title of page 1. + * Set by constructor + */ + QString title1; + + /** + * Title of page 2. + * Set by Constructor. + */ + QString title2; + + /** + * Returns whether the given directory is a maildir directory + * @param path the directory for test + * @return TRUE - directory is a maildir directory + */ + bool isMailDir( const QDir& path ); + + /** + * Adds a new mailbox list view item to the mailbox list or to a given parent item. + * @param boxname name of the mailbox + * @param path path to the directory of this mailbox + */ + void addMailBoxListItem( QString boxname, QDir path ); + + + + private slots: + + /** + * Connected with btnMailDir. + * Opens a file dialog to choose the mail directory. + */ + void slotOpenDirDialog(); + + /** + * Connected with the signal selected of this wizard. + * Searchs for mailboxes inside the path typed in page1. + * @param pageTitle title of the selected page + */ + void slotPageChanged( const QString& pageTitle ); + + +}; + +#endif diff --git a/kshowmail/kcmconfigs/mailboxwizardlistitem.cpp b/kshowmail/kcmconfigs/mailboxwizardlistitem.cpp new file mode 100644 index 0000000..4afdc2a --- /dev/null +++ b/kshowmail/kcmconfigs/mailboxwizardlistitem.cpp @@ -0,0 +1,28 @@ +// +// C++ Implementation: mailboxwizardlistitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "mailboxwizardlistitem.h" + +MailBoxWizardListItem::~MailBoxWizardListItem() +{ +} + +MailBoxWizardListItem::MailBoxWizardListItem( QListView* parent, QString label, QString path ) + : KListViewItem( parent, label ) +{ + this->path = path; +} + +QString MailBoxWizardListItem::getPath( ) +{ + return path; +} + diff --git a/kshowmail/kcmconfigs/mailboxwizardlistitem.h b/kshowmail/kcmconfigs/mailboxwizardlistitem.h new file mode 100644 index 0000000..603a9c8 --- /dev/null +++ b/kshowmail/kcmconfigs/mailboxwizardlistitem.h @@ -0,0 +1,61 @@ +// +// C++ Interface: mailboxwizardlistitem +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef MAILBOXWIZARDLISTITEM_H +#define MAILBOXWIZARDLISTITEM_H + +//Qt-Headers +#include + +//KDE-Headers +#include + +/** + * This is a list item in the mailbox list of the mailbox wizard + * @author Ulrich Weigelt + */ +class MailBoxWizardListItem : public KListViewItem +{ + + public: + + /** + * Constructor + * Constructs a new top-level entry in the mailbox list. + * @param parent pointer to mailbox list. + * @param label column content + * @param path the absolute path to this mailbox + */ + MailBoxWizardListItem( QListView* parent, QString label, QString path ); + + /** + * Destructor + */ + ~MailBoxWizardListItem(); + + /** + * Returns the path to this mailbox. + * @return path to this mailbox + */ + QString getPath(); + + private: + + /** + * The path to this mailbox + */ + QString path; + + + +}; + +#endif diff --git a/kshowmail/kcmconfigs/senderlistdialog.cpp b/kshowmail/kcmconfigs/senderlistdialog.cpp new file mode 100644 index 0000000..c30804c --- /dev/null +++ b/kshowmail/kcmconfigs/senderlistdialog.cpp @@ -0,0 +1,151 @@ +// +// C++ Implementation: senderlistdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "senderlistdialog.h" + +SenderListDialog::SenderListDialog(QWidget *parent, ListType list, const char *name) + : KDialogBase( parent, name, true, QString::null, Ok|Cancel, Ok, true ) +{ + //save list type + this->list = list; + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //set caption + if( list == White ) + setCaption( "Whitelist" ); + else + setCaption( "Blacklist" ); + + //build GUI + //--------- + + //main widget and layout + QWidget* wdgMain = new QWidget( this ); + setMainWidget( wdgMain ); + QVBoxLayout* layMain = new QVBoxLayout( wdgMain, 0, spacingHint() ); + + //edit frame + editFrame = new KEditListBox( wdgMain, "editFrame", true, KEditListBox::Add | KEditListBox::Remove ); + editFrame->setTitle( i18n( "List" ) ); + if( list == White ) + QToolTip::add( editFrame->listBox(), i18n( "A mail whose sender is listed here will pass the filter.\nA mail will be accepted, if its From line incloses a list entry.\nE.g. a line of\n\"Ulrich Weigelt\" is accepted by the entries\nUlrich Weigelt\nulrich.weigelt@gmx.de\n\"Ulrich Weigelt\" " ) ); + else + QToolTip::add( editFrame->listBox(), i18n( "A mail whose sender is listed here will be hold up by the filter.\nA mail will be stopped, if its From line incloses a list entry.\nE.g. a line of\n\"Ulrich Weigelt\" is filtered by the entries\nUlrich Weigelt\nulrich.weigelt@gmx.de\n\"Ulrich Weigelt\" " ) ); + + layMain->addWidget( editFrame ); + + connect( editFrame->addButton(), SIGNAL( clicked() ), this, SLOT( slotSort() ) ); + connect( editFrame->lineEdit(), SIGNAL( returnPressed( const QString & ) ), this, SLOT( slotSort() ) ); + + //this radio buttons we just need in the blacklist + if( list == Black ) + { + QGroupBox* gboxAction = new QGroupBox( 0, Qt::Horizontal, i18n( "Action" ), wdgMain, "gboxAction" ); + QHBoxLayout* layAction = new QHBoxLayout( gboxAction->layout(), 10 ); + layMain->addWidget( gboxAction ); + + grpAction = new QButtonGroup( NULL, "grpAction" ); + QRadioButton* btnDelete = new QRadioButton( i18n( "Delete"), gboxAction, "btnDelete" ); + QRadioButton* btnMark = new QRadioButton( i18n( "Mark" ), gboxAction, "btnMark" ); + + grpAction->insert( btnDelete, ID_BUTTON_FILTER_SENDERLIST_DELETE ); + grpAction->insert( btnMark, ID_BUTTON_FILTER_SENDERLIST_MARK ); + + QToolTip::add( btnDelete, i18n( "The mails will be deleted." ) ); + QToolTip::add( btnMark, i18n( "The mails will be marked." ) ); + + layAction->addWidget( btnDelete ); + layAction->addWidget( btnMark ); + + //set default + switch( DEFAULT_FILTER_BLACKLIST_ACTION ) + { + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_DELETE ); break; + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_MARK ); break; + default : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_DELETE ); break; + } + } + //set size + setGeometry( 50, 50, (int)( this->width() / 2 ), this->height() ); + + //get values + fillDialog(); +} + + +SenderListDialog::~SenderListDialog() +{ +} + +void SenderListDialog::slotSort( ) +{ + editFrame->listBox()->sort(); +} + +void SenderListDialog::slotOk( ) +{ + //set config group + config->setGroup( CONFIG_GROUP_FILTER ); + + //save the list of senders + if( list == Black ) + config->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST, editFrame->items() ); + else + config->writeEntry( CONFIG_ENTRY_FILTER_WHITELIST, editFrame->items() ); + + //save blacklist action + if( list == Black ) + { + int action = grpAction->selectedId(); + if( action != ID_BUTTON_FILTER_SENDERLIST_DELETE && action != ID_BUTTON_FILTER_SENDERLIST_MARK ) + action = DEFAULT_FILTER_BLACKLIST_ACTION; + + switch( action ) + { + case ID_BUTTON_FILTER_SENDERLIST_DELETE : config->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE ); break; + case ID_BUTTON_FILTER_SENDERLIST_MARK : config->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK ); break; + default : config->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE ); break; + } + } + + config->sync(); + + //call slot of super class to close the dialog + KDialogBase::slotOk(); +} + +void SenderListDialog::fillDialog( ) +{ + //set config group + config->setGroup( CONFIG_GROUP_FILTER ); + + //get list of senders + if( list == Black ) + editFrame->setItems( config->readListEntry( CONFIG_ENTRY_FILTER_BLACKLIST ) ); + else + editFrame->setItems( config->readListEntry( CONFIG_ENTRY_FILTER_WHITELIST ) ); + + //get blacklist action + if( list == Black ) + { + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, DEFAULT_FILTER_BLACKLIST_ACTION ) ) + { + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_DELETE ); break; + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_MARK ); break; + default : grpAction->setButton( ID_BUTTON_FILTER_SENDERLIST_DELETE ); break; + } + } +} + + +#include "senderlistdialog.moc" diff --git a/kshowmail/kcmconfigs/senderlistdialog.h b/kshowmail/kcmconfigs/senderlistdialog.h new file mode 100644 index 0000000..eeb0661 --- /dev/null +++ b/kshowmail/kcmconfigs/senderlistdialog.h @@ -0,0 +1,112 @@ +// +// C++ Interface: senderlistdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef SENDERLISTDIALOG_H +#define SENDERLISTDIALOG_H + +//Qt headers +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "../constants.h" + +//Button IDs +#define ID_BUTTON_FILTER_SENDERLIST_DELETE 1 +#define ID_BUTTON_FILTER_SENDERLIST_MARK 2 + +/** + * @brief This is a dialog to edit the blacklist and whitelist. It is used by the class ConfigFilter. + * @author Ulrich Weigelt + */ +class SenderListDialog : public KDialogBase +{ + + Q_OBJECT + + public: + + /** + * Type of list. + */ + enum ListType { Black, White }; + + /** + * Constructor + * @param parent parent widget + * @param list list which shall be opened + * @param name widget name + */ + SenderListDialog( QWidget *parent = 0, ListType list = Black, const char *name = 0 ); + + /** + * Destructor + */ + ~SenderListDialog(); + + private: + + /** + * list which shall be opened + */ + ListType list; + + /** + * Application Config Object + */ + KConfig* config; + + /** + * Edit Frame + */ + KEditListBox* editFrame; + + /** + * Combines the action radio buttons for the blacklist. + */ + QButtonGroup* grpAction; + + /** + * Reads the entries for the dialog from the config file fill them in it. + */ + void fillDialog(); + + private slots: + + /** + * Connected with add button of the edit frame. + * Sorts the content of the list box. + */ + void slotSort(); + + /** + * Overwritten method of KDialogBase. + * Called if OK was clicked. + * Stores the entered values. + * After then it invokes slotOk() of KDialogBase. + */ + void slotOk(); + + +}; + +#endif diff --git a/kshowmail/kfeedback.cpp b/kshowmail/kfeedback.cpp new file mode 100644 index 0000000..daadfe8 --- /dev/null +++ b/kshowmail/kfeedback.cpp @@ -0,0 +1,504 @@ + +/* + * File name: kfeedback.cpp + * Summary: User feedback form + * License: LGPL - See file COPYING.LIB for details. + * Author: Stefan Hundhammer + * modified by Eggert Ehmke + * + * Updated: 2002-02-24 + * + * $Id: kfeedback.cpp,v 1.3 2007/03/18 15:05:39 kuddel-fl Exp $ + * + */ + + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kfeedback.h" + + +KFeedbackDialog::KFeedbackDialog( const QString & feedbackMailAddress, const QString & helpTopic ) + : KDialogBase( Plain, i18n( "Feedback" ), Apply | ( helpTopic.isEmpty() ? Cancel : Cancel | Help ), Apply ) +{ + QVBoxLayout * layout = new QVBoxLayout( plainPage(), 0, spacingHint() ); + // setButtonApplyText( i18n( "&Mail this..." ) ); deprecated + setButtonApply(KGuiItem (i18n( "&Mail this..." ))); + + if ( ! helpTopic.isEmpty() ) + setHelp( helpTopic ); + + _form = new KFeedbackForm( feedbackMailAddress, plainPage() ); + CHECK_PTR( _form ); + + layout->addWidget( _form ); + checkSendButton(); + + connect( this, SIGNAL( applyClicked() ), + _form, SLOT ( sendMail() ) ); + + connect( _form, SIGNAL( mailSent() ), + this, SLOT ( hide() ) ); + + connect( _form, SIGNAL( mailSent() ), + this, SIGNAL( mailSent() ) ); + + connect( _form, SIGNAL( checkComplete() ), + this, SLOT ( checkSendButton() ) ); +} + + +KFeedbackDialog::~KFeedbackDialog() +{ + // NOP +} + + +void +KFeedbackDialog::checkSendButton() +{ + enableButtonApply( _form->readyToSend() ); +} + + + + + +KFeedbackForm::KFeedbackForm( const QString & feedbackMailAddress, + QWidget * parent ) + : QVBox( parent ) + , _feedbackMailAddress( feedbackMailAddress ) +{ + // + // Explanation above the question list + // + + QLabel * label = new QLabel( i18n( "

Please tell us your opinion about this program.

" + "

You will be able to review everything in your mailer " + "before any mail is sent.
" + "Nothing will be sent behind your back.

" + ), this ); + // + // Question list + // + + _questionList = new KFeedbackQuestionList( this ); + CHECK_PTR( _questionList ); + + connect( _questionList, SIGNAL( checkComplete() ), + this, SLOT ( slotCheckComplete() ) ); + + + // + // Explanation below the question list + // + + QHBox * hbox = new QHBox( this ); + CHECK_PTR( hbox ); + + QSizePolicy pol( QSizePolicy::Fixed, QSizePolicy::Fixed ); // hor / vert + + label = new QLabel( i18n( "Questions marked with " ), hbox ); + CHECK_PTR( label ); + label->setSizePolicy( pol ); + + label = new QLabel( hbox ); + CHECK_PTR( label ); + label->setPixmap( KGlobal::iconLoader()->loadIcon( "edit", KIcon::Small ) ); + label->setSizePolicy( pol ); + + label = new QLabel( i18n( " must be answered before a mail can be sent.") , hbox ); + CHECK_PTR( label ); + label->setSizePolicy( pol ); + + new QWidget( hbox ); // Fill any leftover space to the right. + + + // + // Free-text comment field + // + + label = new QLabel( "\n" + i18n( "&Additional comments:" ), this ); CHECK_PTR( label ); + _comment = new QMultiLineEdit( this ); CHECK_PTR( _comment ); + + label->setBuddy( _comment ); +#if (QT_VERSION < 300) + _comment->setFixedVisibleLines( 5 ); +#endif + _comment->setWordWrap( QMultiLineEdit::FixedColumnWidth ); + _comment->setWrapColumnOrWidth( 70 ); +} + + +KFeedbackForm::~KFeedbackForm() +{ + // NOP +} + + +void +KFeedbackForm::sendMail() +{ + // + // Build mail subject + // + + QString subject; + + const KAboutData * aboutData = KGlobal::instance()->aboutData(); + + if ( aboutData ) + subject = aboutData->programName() + "-" + aboutData->version(); + else + subject = kapp->name(); + + subject += " user feedback"; + + + // + // Build mail body + // + + QString body = subject + "\n\n" + + formatComment() + + _questionList->result(); + + + // + // Build "mailto:" URL from all this + // + + KURL mail; + mail.setProtocol( "mailto" ); + mail.setPath( _feedbackMailAddress ); + mail.setQuery( "?subject=" + KURL::encode_string( subject ) + + "&body=" + KURL::encode_string( body ) ); + + // TODO: Check for maximum command line length. + // + // The hard part with this is how to get this from all that 'autoconf' + // stuff into 'config.h' or some other include file without hardcoding + // anything - this is too system dependent. + + + // + // Actually send mail + // + + kapp->invokeMailer( mail ); + + emit mailSent(); +} + + +void +KFeedbackForm::slotCheckComplete() +{ + emit checkComplete(); +} + + +QString +KFeedbackForm::formatComment() +{ + QString result = _comment->text(); + + if ( ! result.isEmpty() ) + { + result = "\n" + result + "\n\n\n"; + } + + return result; +} + + +bool +KFeedbackForm::readyToSend() +{ + return _questionList->isComplete(); +} + + + + + + +KFeedbackQuestionList::KFeedbackQuestionList( QWidget *parent ) + : QListView( parent ) +{ + addColumn( "" ); + header()->hide(); +} + + +KFeedbackQuestionList::~KFeedbackQuestionList() +{ + // NOP +} + + +bool +KFeedbackQuestionList::isComplete() +{ + KFeedbackQuestion * question = firstQuestion(); + + while ( question ) + { + if ( question->isRequired() && ! question->isAnswered() ) + return false; + + question = question->nextQuestion(); + } + + return true; +} + + +QString KFeedbackQuestionList::result() +{ + QString res; + KFeedbackQuestion * question = firstQuestion(); + + while ( question ) + { + res += question->result(); + + question = question->nextQuestion(); + } + res += "Compiled on KDE version: "; + res += KDE_VERSION_STRING; + + return res; +} + + +KFeedbackQuestion* KFeedbackQuestionList::addQuestion( const QString & text, + const QString & id, + bool exclusiveAnswer, + bool required ) +{ + KFeedbackQuestion * question = new KFeedbackQuestion( this, text, id, + exclusiveAnswer, + required ); + CHECK_PTR( question ); + + return question; +} + + +void +KFeedbackQuestionList::addYesNoQuestion( const QString & text, + const QString & id, + bool required ) +{ + + KFeedbackQuestion * question = new KFeedbackQuestion( this, text, id, + true, // exclusive + required ); + CHECK_PTR( question ); + question->addAnswer( i18n( "yes" ), "yes" ); + question->addAnswer( i18n( "no" ), "no" ); +} + + +void +KFeedbackQuestionList::questionAnswered() +{ + emit checkComplete(); +} + +void +KFeedbackQuestionList::questionAdded( KFeedbackQuestion * question) +{ + if ( question->isRequired() ) + emit checkComplete(); +} + + + + + +static int nextNo = 0; + +KFeedbackQuestion::KFeedbackQuestion( KFeedbackQuestionList * parent, + const QString & text, + const QString & id, + bool exclusiveAnswer, + bool required, + bool open ) + : QCheckListItem( parent, text ) + , _id( id ) + , _exclusiveAnswer( exclusiveAnswer ) + , _required( required ) +{ + if ( required ) + { + setPixmap( 0, KGlobal::iconLoader()->loadIcon( "edit", KIcon::Small ) ); + } + + setOpen( open ); + _no = nextNo++; + + parent->questionAdded( this ); +} + + +void +KFeedbackQuestion::addAnswer( const QString & text, + const QString & id ) +{ + new KFeedbackAnswer( this, text, id, _exclusiveAnswer ); +} + + +bool +KFeedbackQuestion::isAnswered() +{ + if ( ! _exclusiveAnswer ) + { + /** + * If any number of answers is permitted for this question, this + * question is always considered to be answered. + **/ + + return true; + } + + + /** + * If this question requires an exclusive answer, exactly one of them + * should be checked. We don't need to bother about more than one being + * checked here - QListView does that for us. + **/ + + KFeedbackAnswer *answer = firstAnswer(); + + while ( answer ) + { + if ( answer->isChecked() ) + return true; + + answer = answer->nextAnswer(); + } + + return false; +} + + +QString +KFeedbackQuestion::result() +{ + QString res; + int answers = 0; + + KFeedbackAnswer *answer = firstAnswer(); + + while ( answer ) + { + if ( answer->isChecked() ) + { + res += _id + "=\"" + answer->id() + "\"\n"; + answers++; + } + + answer = answer->nextAnswer(); + } + + if ( answers > 1 ) + { + res = "\n" + res + "\n"; + } + + return res; +} + + +QString +KFeedbackQuestion::text() +{ + return QCheckListItem::text(0); +} + + +QString +KFeedbackQuestion::key( int, bool ) const +{ + QString no; + no.sprintf( "%08d", _no ); + + return no; +} + + +KFeedbackQuestionList * +KFeedbackQuestion::questionList() const +{ + return dynamic_cast( listView() ); +} + + + + + + + +KFeedbackAnswer::KFeedbackAnswer( KFeedbackQuestion * parent, + const QString & text, + const QString & id, + bool exclusive ) + : QCheckListItem( parent, + text, + exclusive + ? QCheckListItem::RadioButton + : QCheckListItem::CheckBox ) + , _id( id ) +{ + _no = nextNo++; +} + + +QString +KFeedbackAnswer::text() +{ + return QCheckListItem::text(0); +} + + +QString +KFeedbackAnswer::key( int, bool ) const +{ + QString no; + no.sprintf( "%08d", _no ); + + return no; +} + + +void +KFeedbackAnswer::stateChange( bool newState ) +{ + if ( newState && question()->isRequired() ) + { + KFeedbackQuestionList * list = question()->questionList(); + + if ( list ) + list->questionAnswered(); + } +} + + + +// EOF diff --git a/kshowmail/kfeedback.h b/kshowmail/kfeedback.h new file mode 100644 index 0000000..620ace7 --- /dev/null +++ b/kshowmail/kfeedback.h @@ -0,0 +1,463 @@ +/* + * File name: kfeedback.h + * Summary: User feedback form and mailing utilities + * License: LGPL - See file COPYING.LIB for details. + * Author: Stefan Hundhammer + * + * Updated: 2002-02-24 + * + * $Id: kfeedback.h,v 1.2 2007/03/18 15:05:39 kuddel-fl Exp $ + * + */ + + +#ifndef KFeedback_h +#define KFeedback_h + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + + +#ifndef NOT_USED +# define NOT_USED(PARAM) ( (void) (PARAM) ) +#endif + + +class KFeedbackForm; +class KFeedbackQuestionList; +class KFeedbackQuestion; +class KFeedbackAnswer; +class QMultiLineEdit; + + +/** + * Dialog containing a @ref KFeedbackForm and all the infrastructure for + * sending a mail etc. + **/ +class KFeedbackDialog: public KDialogBase +{ + Q_OBJECT + +public: + + /** + * Constructor. + **/ + KFeedbackDialog( const QString & feedbackMailAddress, + const QString & helpTopic = QString::null ); + + + /** + * Destructor. + **/ + virtual ~KFeedbackDialog(); + + + /** + * Returns the internal @KFeedbackForm + **/ + KFeedbackForm *form() { return _form; } + + +public slots: + + /** + * Check if sufficient information is available to send a mail now and + * enable / disable the "send mail" button accordingly. + **/ + void checkSendButton(); + + +signals: + /** + * Emitted when the user has sent the feedback mail - i.e. when he clicked + * on the "Send mail" button and the mail has successfully been forwarded + * to the mailer. He can still choose not to send the mail from within the + * mailer, though. + **/ + void mailSent(); + + +protected: + + KFeedbackForm * _form; +}; + + +/** + * User feedback form: + * + * User is asked a list of questions, the answers of which will be sent via + * mail back to a feedback mail address. + **/ +class KFeedbackForm: public QVBox +{ + Q_OBJECT + +public: + /** + * Constructor. + **/ + KFeedbackForm( const QString & feedbackMailAddress, + QWidget * parent ); + + /** + * Destructor. + **/ + virtual ~KFeedbackForm(); + + +public slots: + + /** + * Compose a mail from the user's answers and send it to the feedback mail + * address passed to the constructor. + * + * This method will check with @ref readyToSend() if the mail can be sent + * with the questions answered until now and prompt the user to answer more + * questions if not. + * + * Connect the @ref mailSent() signal if you are interested when exactly + * all this was successful. + **/ + virtual void sendMail(); + + +public: + + /** + * Checks if the mail is ready to send, i.e. if all required fields are + * filled. + **/ + virtual bool readyToSend(); + + /** + * Returns the @ref KFeedbackQuestionList . + **/ + KFeedbackQuestionList * questionList() { return _questionList; } + + +signals: + /** + * Emitted when the user has sent the feedback mail - i.e. when he clicked + * on the "Send mail" button and the mail has successfully been forwarded + * to the mailer. He can still choose not to send the mail from within the + * mailer, though. + **/ + void mailSent(); + + /** + * Emitted when it is time to check for completeness of all information in + * this form: Either when a new question is added or when a question is + * answered. + **/ + void checkComplete(); + + +protected slots: + /** + * Check for completeness of this form. + **/ + void slotCheckComplete(); + + +protected: + + /** + * Format the "personal comments" field for sending mail. + **/ + QString formatComment(); + + + QString _feedbackMailAddress; + KFeedbackQuestionList * _questionList; + QMultiLineEdit * _comment; +}; + + + +/** + * List of feedback questions presented in a @ref QListView widget. + **/ +class KFeedbackQuestionList: public QListView +{ + Q_OBJECT + +public: + + /** + * Constructor. + **/ + KFeedbackQuestionList( QWidget *parent ); + + /** + * Destructor. + **/ + virtual ~KFeedbackQuestionList(); + + /** + * Returns whether or not this question list is answered satisfactorily, + * i.e. if all questions marked as "required" are answered. + **/ + virtual bool isComplete(); + + /** + * The result of all answered questions in ASCII. + **/ + QString result(); + + /** + * Add a yes/no question to the list. + * + * 'text' is the text the user will see (in his native language). + * + * 'id' is what will be sent with the feedback mail, thus it should be + * unique within the application, yet human readable (preferably English) + * and not contain any weird characters that might confuse scripts that are + * later used to automatically parse those mails. + * Examples: "would_recommend_to_a_friend" + * + * Set 'required' to 'true' if answering this question is required to + * successfully complete this form. + * + * Returns a pointer to this question so you can add answers. + **/ + + KFeedbackQuestion * addQuestion( const QString & text, + const QString & id, + bool exclusiveAnswer = true, + bool required = false ); + + /** + * Add a yes/no question to the list. + **/ + void addYesNoQuestion( const QString & text, + const QString & id, + bool required = false ); + + /** + * Returns the first question of that list. + * Use @ref KFeedbackQuestion::next() to get the next one. + **/ + KFeedbackQuestion * firstQuestion() const + { return (KFeedbackQuestion *) QListView::firstChild(); } + + /** + * Notify the list that another question has been answered. + * Emits the @ref checkComplete() signal when all required questions are + * answered. + **/ + void questionAnswered(); + + /** + * Notify the list that another question has been added. + * Emits the @ref checkComplete() signal when a required question is + * added. + **/ + void questionAdded( KFeedbackQuestion * question ); + +signals: + /** + * Emitted when all required questions are answered. + **/ + void checkComplete(); +}; + + +/** + * A user feedback question to be inserted into a @ref KFeedbackQuestionList. + **/ +class KFeedbackQuestion: public QCheckListItem +{ +public: + + /** + * Constructor. + * + * The parent @ref KFeedbackQuestionList assumes ownership of this object, + * so don't delete it unless you want to delete it from the question list + * as well. + * + * 'text' is the text the user will see (in his native language). + * + * 'id' is what will be sent with the feedback mail, thus it should be + * unique within the application, yet human readable (preferably English) + * and not contain any weird characters that might confuse scripts that are + * later used to automatically parse those mails. + * Examples: "features_not_liked", "stability" + * + * Set 'required' to 'true' if answering this question is required to + * successfully complete this form. + * + * Set 'exclusiveAnswer' to 'true' if only one of all answers may be + * checked at any one time, to 'false' if multiple answers are allowed. + **/ + KFeedbackQuestion( KFeedbackQuestionList * parent, + const QString & text, + const QString & id, + bool exclusiveAnswer = true, + bool required = false, + bool open = true ); + + /** + * Add an answer to this question. Again, 'text' is what the user will see + * (translated to his native language), 'id' is what you will get back with + * the mail. The answer IDs need only be unique for that question; answers + * to other questions may have the same ID. + **/ + void addAnswer( const QString & text, + const QString & id ); + + /** + * Returns if answering this question is required. + **/ + bool isRequired() { return _required; } + + /** + * Returns if this question is answered satisfactorily. + **/ + bool isAnswered(); + + /** + * The result of this question in ASCII, e.g. + * recommend="yes" + * or + * features_i_like="builtin_tetris" + * features_i_like="pink_elephant" + * features_i_like="studlycapslyfier" + **/ + QString result(); + + /** + * Return this question's ID. + **/ + QString id() { return _id; } + + /** + * Return this question's text. + **/ + QString text(); + + /** + * Returns whether or not this question requires an exclusive answer. + **/ + bool exclusiveAnswer() { return _exclusiveAnswer; } + + + /** + * Returns the sort key. + * + * Reimplemented from @ref QListViewItem to maintain insertion order. + **/ + virtual QString key( int column, bool ascending ) const; + + /** + * Returns the next question or 0 if there is no more. + **/ + KFeedbackQuestion * nextQuestion() const + { return (KFeedbackQuestion *) QListViewItem::nextSibling(); } + + /** + * Returns the first possible answer to this question. + * Use @ref KFeedbackAnswer::nextAnswer() to get the next one. + **/ + KFeedbackAnswer * firstAnswer() const + { return (KFeedbackAnswer *) QListViewItem::firstChild(); } + + /** + * Returns the @ref KFeedbackQuestionList this question belongs to or 0 if + * the parent is no @ref KFeedbackQuestionList. + **/ + KFeedbackQuestionList * questionList() const; + + +protected: + + QString _id; + bool _exclusiveAnswer; + bool _required; + int _no; +}; + + +class KFeedbackAnswer: public QCheckListItem +{ +public: + /** + * Constructor. + * + * 'exclusive' tells the type of answer: One of many allowed or any number + * of many. + **/ + KFeedbackAnswer( KFeedbackQuestion * parent, + const QString & text, + const QString & id, + bool exclusive = true ); + + /** + * Return this answer's ID. + **/ + QString id() { return _id; } + + /** + * Return this answer's text. + **/ + QString text(); + + /** + * Returns whether or not this is an exclusive answer. + **/ + bool isExclusive() { return _exclusive; } + + /** + * Returns whether or not this answer is checked. + **/ + bool isChecked() { return QCheckListItem::isOn(); } + + /** + * Returns the next possible answer or 0 if there is no more. + **/ + KFeedbackAnswer * nextAnswer() const + { return (KFeedbackAnswer *) QListViewItem::nextSibling(); } + + /** + * Returns the question to this answer. + **/ + KFeedbackQuestion * question() const + { return (KFeedbackQuestion *) QListViewItem::parent(); } + + /** + * Returns the sort key. + * + * Reimplemented from @ref QListViewItem to maintain insertion order. + **/ + virtual QString key( int column, bool ascending ) const; + + + /** + * On/off change. + * + * Reimplemented from @ref QCheckListItem to monitor answering required + * questions. This method notifies the @ref KFeedbackQuestionList whenever + * a required question is being answered. + **/ + virtual void stateChange( bool newState ); + +protected: + + QString _id; + bool _exclusive; + int _no; +}; + + + +#endif // KFeedback_h + + +// EOF diff --git a/kshowmail/kshowmail.cpp b/kshowmail/kshowmail.cpp new file mode 100644 index 0000000..16e9db6 --- /dev/null +++ b/kshowmail/kshowmail.cpp @@ -0,0 +1,861 @@ +/*************************************************************************** + kshowmail.cpp - description + ------------------- + begin : Sat May 6 12:13:57 MEST 2000 + copyright : (C) 2000-2002 by Eggert Ehmke + email : eggert.ehmke@berlin.de + + 26 Sep 2002 - Allow for columns to be hidden. Allistar Melville + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 "kshowmail.h" + +using namespace KIO; + +KAboutData* KShowMailApp::m_pAbout; + +KShowMailApp::KShowMailApp() +{ + //set up actions + initActions(); + + // create GUI from ui resource file + setXMLFile( "kshowmailui.rc", true ); + createGUI(); + + //the main window settings will be saved automatically + setAutoSaveSettings(); + + //initiate GUI parts + initStatusBar(); + initDocument(); + initView(); + + //the application is idle at beginning + m_state = idle; + + //the setup dialog will be created in slotSetup() at first use + SetupDialog = NULL; + + m_pTimer = new QTimer (this); + m_pAlertDialog = NULL; + m_pDockWindow = new KShowMailDock (this, m_actionRefresh); + m_bForceClose = false; + + + //read the setup + m_ConfigList.refreshSetup( m_pView->m_pListAccounts ); + + //load stored mails + m_ConfigList.readStoredMails(); + + //connect signals with slots + + connect (m_pDockWindow, SIGNAL (quitSelected ()), SLOT (slotForceClose ())); + connect (m_pTimer, SIGNAL (timeout ()), SLOT (slotRefresh ())); + connect (m_pView->m_pListAccounts, SIGNAL (currentChanged(QListViewItem*)), SLOT(slotAccountActivated(QListViewItem*))); + connect (m_pView, SIGNAL (signalActiveChanged()), SLOT (slotRefreshView())); + + connect( &m_ConfigList, SIGNAL( sigDeleteReady() ), this, SLOT( slotDeletionReady() ) ); + connect( &m_ConfigList, SIGNAL( sigShowBodiesReady() ), this, SLOT( slotShowMessageReady() ) ); + connect( &m_ConfigList, SIGNAL( sigMessageWindowOpened() ), this, SLOT( slotNormalCursor() ) ); + connect( &m_ConfigList, SIGNAL( sigAllMessageWindowsClosed() ), this, SLOT( slotWaitingCursor() ) ); + connect( &m_ConfigList, SIGNAL( sigRefreshReady() ), this, SLOT( slotRefreshReady() ) ); + + //show welcome message + KMessageBox::information( NULL, i18n( "Thank You for using KShowmail.\nPlease use the feedback dialog to tell us your experience with this program." ), i18n("Welcome"), "WelcomeMessage" ); + + // this starts the one-second-interval timer + // this is a QObject method + startTimer (1000); + + //we are ready to take off! Lets initiate the first refresh (if desired) + initFirstRefresh(); +} + +KShowMailApp::~KShowMailApp() +{ + kdDebug() << "cleaning up" << endl; + delete m_pTimer; + delete m_pDockWindow; + kdDebug() << "cleanup finished" << endl; +} + +/** + * This is reimplemented from QObject + */ +void KShowMailApp::timerEvent (QTimerEvent *) +{ + if (m_nSecondsToGo) + { + QTime time; + time = time.addSecs (m_nSecondsToGo--); + QCString msg (i18n("Autorefresh: %1").arg (time.toString())); + statusBar()->changeItem( msg, STATUSBAR_FIELD_NEXT_REFRESH ); + } + else + statusBar()->changeItem( "", STATUSBAR_FIELD_NEXT_REFRESH ); + + // if busy, animate the traybar + if ( m_state == refreshing || m_state == deleting ) + { + static int color = 0; + color = (color+1)%2; + switch (color) + { + case 0: + m_pDockWindow->clear (); + break; + default: + m_pDockWindow->drawText ("?", Qt::red); + } + } +} + + + +void KShowMailApp::initActions () +{ + // file menu + KStdAction::quit( this, SLOT( slotFileQuit() ), actionCollection() ); + + // action menu + m_actionRefresh = new KAction( i18n( "&Refresh messages" ), "reload", Key_F5, this, SLOT( slotRefresh() ), actionCollection(), "refresh" ); + new KAction( i18n( "Show &header of highlighted messages" ), "letter-closed", Key_F2, this, SLOT( slotShowHeader() ), actionCollection(), "show_header" ); + new KAction( i18n( "Show &complete highlighted messages" ), "letter-open", Key_F3, this, SLOT( slotShowMessage() ), actionCollection(), "show_complete" ); + new KAction( i18n( "&Delete highlighted messages" ), "eraser", Key_Delete, this, SLOT( slotDelete() ), actionCollection(), "delete" ); + new KAction( i18n( "S&top current transfer" ), "stop", 0, this, SLOT( slotStop() ), actionCollection(), "stop" ); + new KAction( i18n( "Show Filter Log" ), "log", Key_F4, this, SLOT( slotShowFilterLog() ), actionCollection(), "show_filterlog" ); + new KAction( i18n( "Add sender to whitelist" ), "add_user", 0, this, SLOT( slotAddToWhitelist() ), actionCollection(), "addWhitelist" ); + new KAction( i18n( "Add sender to blacklist" ), "delete_user", 0, this, SLOT( slotAddToBlacklist() ), actionCollection(), "addBlacklist" ); + + // setup menu + KStdAction::preferences( this, SLOT( slotSetup() ), actionCollection() ); + KStdAction::configureToolbars( this, SLOT( slotEditToolbars() ), actionCollection() ); + + //create menu items for toggle tool and status bar + setStandardToolBarMenuEnabled( true ); + createStandardStatusBarAction(); + + //help menu + new KAction( i18n( "Send &Feedback Mail" ), "email", 0, this, SLOT( slotSendFeedbackMail() ),actionCollection(), "sendFeedback" ); + + //for account context menu + new KAction(i18n( "Setup &account" ), "tool", 0, this, SLOT( slotSetupAccount() ), actionCollection(), "setupAccount" ); +} + + +void KShowMailApp::initStatusBar() +{ + statusBar()->insertItem( i18n( "Ready." ), STATUSBAR_FIELD_STATE ); + statusBar()->insertItem( "", STATUSBAR_FIELD_FILTER, 1 ); + statusBar()->setItemAlignment( STATUSBAR_FIELD_FILTER, AlignLeft | AlignVCenter ); + statusBar()->insertItem( "", STATUSBAR_FIELD_NEXT_REFRESH ); + statusBar()->insertItem( "", STATUSBAR_FIELD_LAST_REFRESH ); + + QToolTip::add( statusBar(), i18n( "Shows the number of deleted, moved or ignored mails by the filter.\nThe positions denotes:\nby last refresh / since application start / listed by the log" ) ); + + refreshFilterStatusBar(); +} + +void KShowMailApp::initDocument() +{ + m_pDoc = new KshowmailDoc(this); + m_pDoc->newDocument(); +} + +void KShowMailApp::initView() +{ + //////////////////////////////////////////////////////////////////// + // create the main widget here that is managed by KMainWindow's view-region and + // connect the widget to your document to display document contents. + + m_pView = new KshowmailView(this); + m_pDoc->addView(m_pView); + setCentralWidget(m_pView); +} + +void KShowMailApp::slotSaveOptions() +{ + KConfig* config = KGlobal::config(); + + //order application parts to save their setup + m_pView->saveOptions( config ); + m_ConfigList.saveOptions (); + fLog.save(); + + //save config to file + config->sync (); + +} + +bool KShowMailApp::queryClose() +{ + bool result; + kdDebug() << "KShowMailApp::queryClose()" << endl; + + if (m_bForceClose) { + // We are forced to close app - so just do it + kdDebug() << "forced exit" << endl; + result = true; + } else if( m_ConfigList.closeToTray() ) { + // Don't close - close button must minimize the window + result = false; + kdDebug() << "ignoring close request and minimizing the window" << endl; + KMainWindow* w = memberList->first(); + w->hide(); + } else { + // Need to ask user first + result = askCloseConfirmation(); + } + return result; +} + +bool KShowMailApp::queryExit() +{ + kdDebug() << "KShowMailApp::queryExit()" << endl; + slotSaveOptions (); + + return true; +} + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + +void KShowMailApp::slotFileQuit() +{ + kdDebug () << "KShowMailApp::slotFileQuit()" << endl; + if(memberList && askCloseConfirmation()) + { + m_bForceClose = true; // Forcing the closing + KMainWindow* w = memberList->first(); + w->close(); + } +} + + +void KShowMailApp::slotSetupAccount() +{ + //just open the dialog, if the app is idle + if (m_state != idle) + { + kapp->beep(); + return; + } + + //set application state + m_state = configure; + + //stop the refresh timer + stopRefreshTimer(); + + //get account to configure + ConfigElem* pConfig = m_ConfigList.getSelectedAccount(); + + if( pConfig != NULL ) + { + //open dialog + //the dialog sets the new options directly in the account + ServerDialog dlg( this, pConfig ); + + if( dlg.exec() == QDialog::Accepted ) + { + //if OK was clicked, refresh the account list view + slotConfChanged(); + } + } + + //we are ready, set application state to idle and initiate next refresh + m_state = idle; + initNextRefresh(); +} + +void KShowMailApp::slotAccountActivated (QListViewItem* pItem) +{ + QPtrListIterator it(m_ConfigList); + // this is = not == !!! + while (ConfigElem* pConfig = it()) + { + if (pConfig->getListViewItem() == pItem) + { + setCaption (pConfig->getAccountName()); + return; + } + } +} + +void KShowMailApp::slotAlertDestroyed() +{ + m_pAlertDialog = NULL; +} + +void KShowMailApp::slotAlertOk () +{ + //switch main window to normal view + showNormal(); + raise(); +} + +void KShowMailApp::slotRefresh() +{ + //return, if the app is not idle + if ( m_state != idle ) + { + kapp->beep(); + initNextRefresh(); + return; + } + + //stop the refresh timer + stopRefreshTimer(); + + //set the state + m_state = refreshing; + + //show status message + slotStatusMsg( i18n( "Refreshing ..." ) ); + + //set waiting cursor + QApplication::setOverrideCursor( Qt::waitCursor ); + + //order the account list to refresh its mail lists + m_ConfigList.refreshMailLists( &fLog ); + + return; +} + +void KShowMailApp::slotStop () +{ + if (m_state == idle) + { + kapp->beep (); + return; + } + kdDebug() << "KShowMailApp::slotStop" << endl; + + //kill all running pop3 jobs + m_ConfigList.killPOP3Jobs(); + + slotRefreshView (); + + // make sure the view is refreshed before the state gets idle again + // bug #853651 + + //set state to idle + m_state = idle; + + //set normal cursor + //might be more than one override cursor ... + while (QApplication::overrideCursor()) + QApplication::restoreOverrideCursor (); + + //print status message + slotStatusMsg(i18n("Job was stopped")); +} + +void KShowMailApp::slotRefreshView () +{ + + //clear mail list view + m_pView->clearMailListView(); + + //fill mail list view + m_ConfigList.fillMailListView( m_pView ); + + //refresh account list + m_ConfigList.refreshAccountList(); + + //get some informations + int numberMails = m_ConfigList.getNumberMails(); + bool hasNewMails = m_ConfigList.getNumberNewMails() > 0; + + //draw number of mails into dock + if( hasNewMails ) + //draw red number, because we have new mails + m_pDockWindow->drawNumber( numberMails, Qt::red ); + else + //we haven't new mails, draw black + m_pDockWindow->drawNumber( numberMails, Qt::black ); + + //show message in status bar + long totalSize = m_ConfigList.getTotalSize(); + slotStatusMsg( i18n( "%1 message(s) with a total of %2 bytes are waiting" ).arg( numberMails ).arg( totalSize ) ); + + //refresh filter view in the status bar + refreshFilterStatusBar(); +} + +void KShowMailApp::slotDelete() +{ + //just delete, if no operation is running + if( m_state != idle ) + { + kapp->beep(); + return; + } + + //return, if no mails are selected + if( !m_ConfigList.hasSelectedMails() ) + return; + + //confirm deletion if required + if( m_ConfigList.confirmDeletion() ) + { + //get subjects off all selected mails + QStringList subjects = m_ConfigList.getSelectedSubjects(); + + //show question + int answer = KMessageBox::questionYesNoList( this, i18n( "Do you want to delete these mails?"), subjects, i18n( "Delete?" ) ); + + if( answer == KMessageBox::No ) + return; + } + + //set the state + m_state = deleting; + + //show status message + slotStatusMsg( i18n( "Deleting Mail(s) ..." ) ); + + //set waiting cursor + QApplication::setOverrideCursor( Qt::waitCursor ); + + //order the account list to delete the selected mails + //test! + m_ConfigList.deleteSelectedMails(); +} + +void KShowMailApp::slotShowHeader () +{ + //only show headers, if the app is idle + if( m_state != idle ) + { + kapp->beep (); + return; + } + + //show the headers + m_ConfigList.showSelectedHeaders(); + +} + +void KShowMailApp::slotShowMessage () +{ + //return, if application is not idle + if( m_state != idle ) + { + kapp->beep (); + return; + } + + //return, if no mails are selected + if( !m_ConfigList.hasSelectedMails() ) + return; + + //set the state + m_state = showing; + + //show status message + slotStatusMsg( i18n( "Downloading ..." ) ); + + //set waiting cursor + QApplication::setOverrideCursor( Qt::waitCursor ); + + //order the account list to show the selected mails + m_ConfigList.showSelectedMails(); +} + +void KShowMailApp::slotStatusMsg(const QString& text) +{ + //get current time + // added by Gustavo Zamorano to include time + QString sTime = QTime::currentTime ().toString (); + + //clear status bar + statusBar()->clear(); + + //set given text + statusBar()->changeItem( text, STATUSBAR_FIELD_STATE ); + + //set current time + statusBar()->changeItem( i18n( "Last Refresh: %1" ).arg( sTime ), STATUSBAR_FIELD_LAST_REFRESH ); +} + +void KShowMailApp::slotStatusHelpMsg(const QString &text) +{ + statusBar()->message(text, 2000); +} + + + + +bool KShowMailApp::event(QEvent *e) +{ + // to hide the taskbar button; any better solution ?? + if ((e->type() == QEvent::Hide) && m_ConfigList.minimizesToTray() ) { + hide (); + } + + return(KMainWindow::event(e)); +} + +void KShowMailApp::slotForceClose() +{ + m_bForceClose = true; +} + +bool KShowMailApp::askCloseConfirmation() +{ + bool result; + + if( m_ConfigList.confirmClose() ) { + // Need to ask user + result = (KMessageBox::questionYesNo (this, i18n ("KShowmail will be closed.\n" + "Are you sure?")) == KMessageBox::Yes); + } else { + // User doesn't want to be asked - just close it + result = true; + } + + return result; +} + +void KShowMailApp::slotDeletionReady( ) +{ + //set state to idle + m_state = idle; + + //set normal cursor + while( QApplication::overrideCursor() ) + QApplication::restoreOverrideCursor(); + + //show status message + slotStatusMsg( i18n( "Ready." ) ); + + //refresh mail list + slotRefresh(); +} + +void KShowMailApp::slotShowMessageReady( ) +{ + //set state to idle + m_state = idle; + + //set normal cursor + while( QApplication::overrideCursor() ) + QApplication::restoreOverrideCursor(); + + //show status message + slotStatusMsg( i18n( "Ready." ) ); + + +} + +void KShowMailApp::slotNormalCursor( ) +{ + //set normal cursor + while( QApplication::overrideCursor() ) + QApplication::restoreOverrideCursor(); + +} + +void KShowMailApp::slotWaitingCursor( ) +{ + //set waiting cursor + QApplication::setOverrideCursor( Qt::waitCursor ); +} + +void KShowMailApp::slotRefreshReady( ) +{ + //set state to idle + m_state = idle; + + //set normal cursor + while( QApplication::overrideCursor() ) + QApplication::restoreOverrideCursor(); + + //refresh mail list view + slotRefreshView(); + + //inform the user about new mails + bool hasNewMails = m_ConfigList.getNumberNewMails() > 0; + if ( hasNewMails ) + { + //show main window if desired + if( m_ConfigList.showMainWindowForNewMails() ) + { + showNormal(); + raise(); + } + + //get out some sounds + m_ConfigList.beep(); + m_ConfigList.playSound(); + + //execute a command + m_ConfigList.executeNewMailCommand(); + + //show alert message if desired + if( m_ConfigList.showAlertMessageForNewMails() ) + { + //have we created one already? + if( m_pAlertDialog != NULL ) + { + //yes, we have one + m_pAlertDialog->show(); + m_pAlertDialog->raise(); + } + else + { + //create a message dialog + m_pAlertDialog = new AlertDialog( this ); + connect( m_pAlertDialog, SIGNAL( destroyed() ), SLOT( slotAlertDestroyed() ) ); + connect( m_pAlertDialog, SIGNAL( signalOk() ), SLOT( slotAlertOk() ) ); + } + } + + } + else + { + //no new mails was received + //perform configured actions + + //terminate app if desired + if( m_ConfigList.quitNoNewMails() ) + slotFileQuit(); + else if( m_ConfigList.minimizeMainWindowNoNewMails() ) + { + showMinimized(); + hide(); + } + } + + //show status message + slotStatusMsg( i18n( "Ready." ) ); + + + //prepare next refresh cycle + initNextRefresh(); +} + +void KShowMailApp::initFirstRefresh( ) +{ + //is auto refresh on? if not, we do nothing + if( m_ConfigList.AutoRefreshOn() ) + { + //is an initial time configured? if not, we refresh immediately + if( m_ConfigList.hasInitTime() ) + { + //starts refresh timer with the configured initial time to first refresh + m_pTimer->start( m_ConfigList.getInitTime() * 1000, true ); + m_nSecondsToGo = m_ConfigList.getInitTime(); + } + else + { + //just to set a defined state + m_pTimer->stop(); + m_nSecondsToGo = 0; + + //start refresh cycle + slotRefresh(); + } + } + else + { + //set a defined state + m_pTimer->stop(); + m_nSecondsToGo = 0; + } +} + +void KShowMailApp::stopRefreshTimer( ) +{ + m_pTimer->stop(); + m_nSecondsToGo = 0; +} + +void KShowMailApp::initNextRefresh( ) +{ + if( m_ConfigList.AutoRefreshOn() ) + { + //auto refresh is activated + //restart the refresh timer + m_pTimer->start( m_ConfigList.getRefreshTimeInterval() * 60000, true ); + m_nSecondsToGo = m_ConfigList.getRefreshTimeInterval() * 60; + } + else + { + //auto refresh is not activated + //set a defined state of the refresh timer + m_pTimer->stop(); + m_nSecondsToGo = 0; + } +} + +void KShowMailApp::delayNextRefresh( ) +{ + const unsigned long DELAY_TIME = 60; + + //delay only if the timer is active and the remaining time is less than one minute + if( m_pTimer->isActive() ) + { + if( m_nSecondsToGo < DELAY_TIME ) + { + m_pTimer->start( DELAY_TIME * 1000, true ); + m_nSecondsToGo = DELAY_TIME; + } + } +} + +void KShowMailApp::slotEditToolbars() +{ + //create the toolbar config dialog + KEditToolbar *dlg = new KEditToolbar(guiFactory()); + if( dlg->exec() ) + { + //if dialog closed by OK, create the GUI new + //the dialog has changed the kshowmailui.rc file + createGUI(); + } + + //destruct dialog + delete dlg; +} + +void KShowMailApp::slotSetup( ) +{ + //just open the dialog, if the app is idle + if (m_state != idle) + { + kapp->beep(); + return; + } + + //set application state + m_state = configure; + + //stop the refresh timer + stopRefreshTimer(); + + if ( SetupDialog == NULL ) + { + //if no preferences dialog was created as yet, create one + SetupDialog = new KCMultiDialog( KCMultiDialog::IconList, i18n( "Options" ), this, "SetupDialog" ); + SetupDialog->addModule( "kshowmailconfigaccounts.desktop" ); + SetupDialog->addModule( "kshowmailconfiggeneral.desktop" ); + SetupDialog->addModule( "kshowmailconfigdisplay.desktop" ); + SetupDialog->addModule( "kshowmailconfigactions.desktop" ); + SetupDialog->addModule( "kshowmailconfigfilter.desktop" ); + SetupDialog->addModule( "kshowmailconfigspamcheck.desktop" ); + SetupDialog->addModule( "kshowmailconfiglog.desktop" ); + + //If the configuration was changed, it will call slotConfChanged + connect( SetupDialog, SIGNAL( configCommitted() ), this, SLOT( slotConfChanged() ) ); + } + + //execute preferences dialog + SetupDialog->exec(); + + //we are ready, set application state to idle and initiate next refresh + m_state = idle; + initNextRefresh(); + +} + +void KShowMailApp::slotConfChanged( ) +{ + //read the new setup + m_ConfigList.refreshSetup( m_pView->m_pListAccounts ); + m_pView->refreshSetup(); + fLog.loadSetup(); + +} + +void KShowMailApp::slotShowFilterLog( ) +{ + //open dialog + FilterLogView view( this, &fLog ); + view.exec(); + + refreshFilterStatusBar(); +} + +void KShowMailApp::refreshFilterStatusBar( ) +{ + int numberDeletedLastRefresh = m_ConfigList.numberDeletedMailsLastRefresh(); + int numberDeletedSinceStart = m_ConfigList.numberDeletedMailsStart(); + int numberDeletedLog = fLog.numberDeletedMails(); + + int numberMovedLastRefresh = m_ConfigList.numberMovedMailsLastRefresh(); + int numberMovedSinceStart = m_ConfigList.numberMovedMailsStart(); + int numberMovedLog = fLog.numberMovedMails(); + + int numberIgnored = m_ConfigList.numberIgnoredMails(); + + statusBar()->changeItem( i18n( "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" ).arg( numberDeletedLastRefresh ).arg( numberDeletedSinceStart ).arg( numberDeletedLog ).arg( numberMovedLastRefresh ).arg( numberMovedSinceStart ).arg( numberMovedLog ).arg( numberIgnored ), STATUSBAR_FIELD_FILTER ); +} + +void KShowMailApp::slotAddToWhitelist( ) +{ + //get new entries + QStringList newEntries = m_ConfigList.getSelectedSenders(); + + //get previous whitelist from config + KConfig* config = KApplication::kApplication()->config(); + config->setGroup( CONFIG_GROUP_FILTER ); + QStringList whiteList = config->readListEntry( CONFIG_ENTRY_FILTER_WHITELIST ); + + //append new entries + for( QStringList::Iterator it = newEntries.begin(); it != newEntries.end(); ++it ) + { + if( whiteList.contains( *it ) == 0 ) + { + whiteList.append( *it ); + } + } + + //write extended whitelist back + config->writeEntry( CONFIG_ENTRY_FILTER_WHITELIST, whiteList ); + config->sync(); + + //load new config + m_ConfigList.refreshFilterSetup(); +} + +void KShowMailApp::slotAddToBlacklist( ) +{ + //get new entries + QStringList newEntries = m_ConfigList.getSelectedSenders(); + + //get previous blacklist from config + KConfig* config = KApplication::kApplication()->config(); + config->setGroup( CONFIG_GROUP_FILTER ); + QStringList blackList = config->readListEntry( CONFIG_ENTRY_FILTER_BLACKLIST ); + + //append new entries + for( QStringList::Iterator it = newEntries.begin(); it != newEntries.end(); ++it ) + { + if( blackList.contains( *it ) == 0 ) + { + blackList.append( *it ); + } + } + + //write extended whitelist back + config->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST, blackList ); + config->sync(); + + //load new config + m_ConfigList.refreshFilterSetup(); +} + diff --git a/kshowmail/kshowmail.desktop b/kshowmail/kshowmail.desktop new file mode 100644 index 0000000..54c5651 --- /dev/null +++ b/kshowmail/kshowmail.desktop @@ -0,0 +1,13 @@ +# KDE Config File +[KDE Desktop Entry] +Name=Kshowmail +Encoding=UTF-8 +Type=Application +Exec=kshowmail +Icon=kshowmail +DocPath=kshowmail/index.html +Comment=A powerful POP3 mail checker +Comment[de]=Ein leistungsf�higer POP3 Mailchecker +Comment[en]=A powerful POP3 mail checker +Terminal=0 +StartupNotify=true diff --git a/kshowmail/kshowmail.h b/kshowmail/kshowmail.h new file mode 100644 index 0000000..0d8dccb --- /dev/null +++ b/kshowmail/kshowmail.h @@ -0,0 +1,424 @@ +/*************************************************************************** + kshowmail.h - description + ------------------- + begin : Sat May 6 12:13:57 MEST 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 KSHOWMAIL_H +#define KSHOWMAIL_H + + +#ifdef HAVE_CONFIG_H +#include +#endif + +// include files for KDE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +//include files for KShowMail +#include "configlist.h" +#include "alertdialog.h" +#include "showrecord.h" +#include "showlistviewitem.h" +#include "kshowmaildock.h" +#include "kfeedback.h" +#include "types.h" +#include "kshowmailview.h" +#include "kshowmaildoc.h" +#include "serverdialog.h" +#include "filterlog.h" +#include "filterlogview.h" + + +// forward declaration of the Kshowmail classes +class KshowmailDoc; +class KshowmailView; + +using namespace Types; + +/** + * The base class for Kshowmail application windows. It sets up the main + * window and reads the config file as well as providing a menubar, toolbar + * and statusbar. An instance of KshowmailView creates your center view, which is connected + * to the window's Doc object. + * KShowMailApp reimplements the methods that KMainWindow provides for main window handling and supports + * full session management as well as keyboard accelerator configuration by using KAccel. + * @see KMainWindow + * @see KApplication + * @see KConfig + * @see KAccel + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 0.4 code generation + */ +class KShowMailApp : public KMainWindow +{ + Q_OBJECT + + friend class KshowmailView; + friend class KshowmailDock; + friend class UniqueApp; + + + private: + + /** + * The central document of our application. Just contains the view (m_pView). + */ + KshowmailDoc* m_pDoc; + + /** + * Contains the account and messages list views. + */ + KshowmailView *m_pView; + + /** + * The setup dialog. Created and used by slotSetup(). + */ + KCMultiDialog* SetupDialog; + + /** + * refresh messages action; connected with slotRefresh() + */ + KAction* m_actionRefresh; + + /** + * Contains the application and account settings. The account + * settings are stored in ConfigElem objects. + */ + ConfigList m_ConfigList; + + /** + * Message box which will be shown, when new mail has arrived. + */ + AlertDialog* m_pAlertDialog; + + /** + * The window into the system tray. + */ + KShowMailDock* m_pDockWindow; + + /** + * The refresh timer. Its timeout signal is connected with slotRefresh(). + */ + QTimer* m_pTimer; + + /** + * Application state during the run time. Shows what KShowMail is doing :-) . + */ + Types::State_Type m_state; + + /** + * Number of seconds until the next refresh + */ + unsigned long m_nSecondsToGo; + + /** + * The filter log. + */ + FilterLog fLog; + + + public: + /** + * Constructor of KShowMailApp, calls all init functions to create the application. + * @see initMenuBar initToolBar + */ + KShowMailApp(); + + /** + * Destructor + */ + ~KShowMailApp(); + + /** + * Contains information about KShowMail, including author, license, version etc. + * This is accessed in main() when calling KShowMailApp::initMenuBar() to create the help menu. + */ + static KAboutData* m_pAbout; + + /** + * Delays the next refresh for one minute. + */ + void delayNextRefresh(); + + + protected: + + /** + * sets up the statusbar for the main window by initialzing a statuslabel. + */ + void initStatusBar(); + + /** + * sets up the actions. + */ + void initActions(); + + /** + * initializes the document object of the main window that is connected to the view in initView(). + * @see initView(); + */ + void initDocument(); + + /** + * creates the centerwidget of the KMainWindow instance and sets it as the view + */ + void initView(); + + /** + * queryClose is called by KMainWindow 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 should be saved if Modified; on cancel the closeEvent is rejected. + * @see KMainWindow#queryClose + * @see KMainWindow#closeEvent + */ + virtual bool queryClose(); + + /** + * queryExit is called by KMainWindow when the last window of the app 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 KMainWindow#queryExit + * @see KMainWindow#closeEvent + */ + virtual bool queryExit(); + + /** + * overwrite method of QObject; will be invoked by the internal QObject-Timer + * the timer is set to 1 second in the construtor; + * this method sets the time to the next refresh in the statusbar and + * animates the "?" in the traybar, when the refresh is working + */ + virtual void timerEvent( QTimerEvent * ); + + /** + * overwrite method of QWidget; + * to hide the taskbar button + */ + virtual bool event(QEvent *e); + + /** + * Starts the first refresh or starts the refresh timer + * with the configured init time. + */ + void initFirstRefresh(); + + /** + * Stops the refresh timer. + */ + void stopRefreshTimer(); + + /** + * Starts the refresh timer for the next refresh. + */ + void initNextRefresh(); + + /** + * Refreshes the status bar filter field. + */ + void refreshFilterStatusBar(); + + protected slots: + + /** + * Changes the status message of the whole statusbar for two seconds, + * then restores the last status. This is used to display + * statusbar messages that give information about actions for toolbar + * icons and menu entries. + * @param text the text that is displayed in the statusbar + */ + void slotStatusHelpMsg(const QString &text); + + /** + * Changes the contents in the left status bar item permanently, + * used to indicate current actions. And sets the current time + * in the right item. + * @param text the text that is displayed in the statusbar + */ + void slotStatusMsg(const QString &text); + + /** + * Connected with the setup dialog. + * Reloads the configuration, if it was changed from the dialog. + */ + void slotConfChanged(); + + /** + * Connected with action m_actionDelete. + * Deletes all selected mails. + */ + void slotDelete(); + + /** + * Connected with signal sigDeleteReady of m_ConfigList. + * This signal will be emitted when one or many accounts have + * ended a deletion. + * This slot refreshes the view, sets the state to idle and sets + * a normal cursor. + */ + void slotDeletionReady(); + + /** + * Connected with action m_actionShowMessage. + * Shows all selected mails. + */ + void slotShowMessage(); + + /** + * Connected with signal sigShowBodiesReady of m_ConfigList. + * This signal will be emitted when all accounts have downloaded + * and shown the selected messages. + * This slot sets the state to idle and sets a normal cursor. + */ + void slotShowMessageReady(); + + /** + * Connected with signal sigMessageWindowOpened of m_ConfigList. + * This signal will be emitted when a window to show a mail body + * was opened. + * Switches the cursor to normal view. + */ + void slotNormalCursor(); + + /** + * Connected with signal sigAllMessageWindowsClosed of m_ConfigList. + * This signal will be emitted when all windows to show a mail body + * have been closed. + * Switches the cursor to waiting view. + */ + void slotWaitingCursor(); + + /** + * Connected with m_actionRefresh. + * Refreshes the mail list. + */ + void slotRefresh(); + + /** + * Connected with signal sigRefreshReady of m_ConfigList. + * This signal will be emitted when all accounts have refreshed + * their mail list. + * This slot refreshes the mail view. + */ + void slotRefreshReady(); + + /** + * Connected with signal destroyed of the alert message dialog. + * Sets m_pAlertDialog to NULL, if the dialog was destroyed. + * If m_pAlertDialog == NULL, slotRefreshReady will create a new instance of it. + * @see m_pAlertDialog + * @see slotRefreshReady() + */ + void slotAlertDestroyed(); + + /** + * Connected with signal signalOk of the alert message dialog. + * Switches the main window to normal view. + * @see m_pAlertDialog; + */ + void slotAlertOk (); + + /** + * Refreshes the account and messages list view. + */ + void slotRefreshView (); + + /** + * If the application state is not "idle" it will stop all current running POP3 jobs. + * Connected with m_actionStop(). + */ + void slotStop (); + + /** + * Shows the headers of all selected mails. + * Connected with action m_actionShowHeader. + */ + void slotShowHeader(); + + /** + * Connected with standard action configureToolbars. + * Opens a dialog to configure the icons of the toolbar. + */ + void slotEditToolbars(); + + /** + * Saves GUI options, account and filter settings to the configuration file. + */ + void slotSaveOptions(); + + /** + * Calls the close() method of KShowMailApp to exit the application. Uses askCloseConfirmation() to ask + * the user (if configured). Sets m_bForceClose to TRUE, therefore queryClose() will be passed without + * anything to do. After that in queryExit() slotSaveOptions() will be invoked. + */ + void slotFileQuit(); + + /** + * Opens the setup dialog for the highlighted account. Connected with m_actionSetupAccount. + */ + void slotSetupAccount(); + + /** + * Connected with the standard setup action. + * If the application state is "idle" (m_state == idle) it will open the configuration dialog. + */ + void slotSetup(); + + /** + * Shows the filter log. + */ + void slotShowFilterLog(); + + /** + * Adds the sender of the selected mails to the whitelist + */ + void slotAddToWhitelist(); + + /** + * Adds the sender of the selected mails to the blacklist + */ + void slotAddToBlacklist(); + + void slotAccountActivated(QListViewItem*); + void slotSendFeedbackMail(); + void slotForceClose(); + + + + +private: + + bool m_bForceClose; + + + protected: + void addFeatureList(KFeedbackQuestion * question); + bool askCloseConfirmation(); + +}; + +#endif // KSHOWMAIL_H diff --git a/kshowmail/kshowmaildoc.cpp b/kshowmail/kshowmaildoc.cpp new file mode 100644 index 0000000..05516ac --- /dev/null +++ b/kshowmail/kshowmaildoc.cpp @@ -0,0 +1,81 @@ +/*************************************************************************** + kshowmaildoc.cpp - description + ------------------- + begin : Fre Sep 28 23:29:54 CEST 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +// include files for Qt +#include +#include + +// include files for KDE +#include +#include +#include +#include + +// application specific includes +#include "kshowmaildoc.h" +#include "kshowmail.h" +#include "kshowmailview.h" + +KshowmailView *KshowmailDoc::pView = 0L; + +KshowmailDoc::KshowmailDoc(QWidget *parent, const char *name) : QObject(parent, name) +{ +} + +KshowmailDoc::~KshowmailDoc() +{ +} + +void KshowmailDoc::addView(KshowmailView *view) +{ + pView = view; +} + +void KshowmailDoc::removeView(KshowmailView*) +{ + delete pView; +} + +void KshowmailDoc::setURL(const KURL &url) +{ + doc_url=url; +} + +const KURL& KshowmailDoc::URL() const +{ + return doc_url; +} + +// this could be deleted; perhaps we build a tree view sometime ? +void KshowmailDoc::slotUpdateAllViews(KshowmailView *sender) +{ + if(pView) + { + if(pView!=sender) + pView->repaint(); + } +} + +bool KshowmailDoc::newDocument() +{ + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here + ///////////////////////////////////////////////// + doc_url.setFileName(i18n("Untitled")); + + return true; +} diff --git a/kshowmail/kshowmaildoc.h b/kshowmail/kshowmaildoc.h new file mode 100644 index 0000000..7f9a541 --- /dev/null +++ b/kshowmail/kshowmaildoc.h @@ -0,0 +1,81 @@ +/*************************************************************************** + kshowmaildoc.h - description + ------------------- + begin : Fre Sep 28 23:29:54 CEST 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 KSHOWMAILDOC_H +#define KSHOWMAILDOC_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +// include files for QT +#include +#include + +// include files for KDE +#include + +// forward declaration of the Kshowmail classes +class KshowmailView; + +/** KshowmailDoc provides a document object for a document-view model. + * + * The KshowmailDoc class provides a document object that can be used in conjunction with the classes KshowmailApp and KshowmailView + * to create a document-view model for standard KDE applications based on KApplication and KMainWindow. Thereby, the document object + * is created by the KshowmailApp instance and contains the document structure with the according methods for manipulation of the document + * data by KshowmailView objects. Also, KshowmailDoc contains the methods for serialization of the document data from and to files. + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.2 code generation + */ +class KshowmailDoc : public QObject +{ + Q_OBJECT + public: + /** Constructor for the fileclass of the application */ + KshowmailDoc(QWidget *parent, const char *name=0); + /** Destructor for the fileclass of the application */ + ~KshowmailDoc(); + + /** adds a view to the document which represents the document contents. Usually this is your main view. */ + void addView(KshowmailView *view); + /** removes a view from the list of currently connected views */ + void removeView(KshowmailView *view); + /** initializes the document generally */ + bool newDocument(); + /** returns the KURL of the document */ + const KURL& URL() const; + /** sets the URL of the document */ + void setURL(const KURL& url); + + public slots: + /** calls repaint() on all views connected to the document object and is called by the view by which the document has been changed. + * As this view normally repaints itself, it is excluded from the paintEvent. + */ + void slotUpdateAllViews(KshowmailView *sender); + + public: + /** the list of the views currently connected to the document */ + // no List; just one view + static KshowmailView *pView; + + private: + /** the modified flag of the current document */ + KURL doc_url; +}; + +#endif // KSHOWMAILDOC_H diff --git a/kshowmail/kshowmaildock.cpp b/kshowmail/kshowmaildock.cpp new file mode 100644 index 0000000..c5eaa97 --- /dev/null +++ b/kshowmail/kshowmaildock.cpp @@ -0,0 +1,83 @@ +/*************************************************************************** + kshowmaildock.cpp - description + ------------------- + begin : Wed Jan 3 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "kshowmail.h" +#include "kshowmaildock.h" + +KShowMailDock::KShowMailDock(QWidget* parent, KAction *actionRefresh ) +: KSystemTray (parent, 0), + m_background (QPixmap(::locate ("data", "kshowmail/pics/kshowmail24.png"))) +{ +// kdDebug () << "KShowMailDock::KShowMailDock" << endl; + drawText ("?", Qt::red); + QToolTip::add (this, i18n("KShowmail: a powerful pop3 email checker")); + + show(); + + actionRefresh->plug( contextMenu() ); + //((KShowMailApp*)parent)->m_actionRefresh->plug (contextMenu()); + connect (contextMenu(),SIGNAL(activated(int)),this, SIGNAL(sigActivated(int))); + connect (contextMenu(),SIGNAL(highlighted(int)),this, SIGNAL(sigHighlighted(int))); +} + +void KShowMailDock::drawText (const QString str, const QColor& color) +{ + setPixmap (m_background); + QPixmap* pix = pixmap (); + if (pix && !pix->isNull ()) + { + QPainter p (pix); +// p.setFont (KGlobalSettings::toolBarFont()); + p.setFont (KGlobalSettings::windowTitleFont()); + p.setPen (color); + p.drawText (0,0,24,24,QPainter::AlignCenter,str,str.length()); + } + else + kdError () << "No pixmap for traybar !" << endl; +} + +void KShowMailDock::drawNumber (int n, const QColor& color) +{ + setPixmap (m_background); + QPixmap* pix = pixmap (); + if (pix && !pix->isNull ()) + { + QString num (QString::number(n)); + QPainter p (pix); + p.setFont (KGlobalSettings::toolBarFont()); + p.setPen (color); + p.drawText (0,0,24,24,QPainter::AlignCenter,num,num.length()); + } + else + kdError () << "No pixmap for traybar !" << endl; +} + +void KShowMailDock::clear () +{ + setPixmap (m_background); +} + diff --git a/kshowmail/kshowmaildock.h b/kshowmail/kshowmaildock.h new file mode 100644 index 0000000..bc84f5b --- /dev/null +++ b/kshowmail/kshowmaildock.h @@ -0,0 +1,46 @@ +/*************************************************************************** + kshowmaildock.h - description + ------------------- + begin : Wed Jan 3 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 KSHOWMAILDOCK_H +#define KSHOWMAILDOCK_H + +#include +#include +#include +#include + +/** + *@author Eggert Ehmke + */ + +class KShowMailDock : public KSystemTray +{ + Q_OBJECT +public: + KShowMailDock(QWidget*, KAction *actionRefresh ); + ~KShowMailDock() {}; + void drawText (const QString str, const QColor& color); + void drawNumber (int n, const QColor& color); + void clear (); +signals: + void sigActivated(int); + void sigHighlighted(int); +private: + QPixmap m_background; +}; + +#endif diff --git a/kshowmail/kshowmailfeedback.cpp b/kshowmail/kshowmailfeedback.cpp new file mode 100644 index 0000000..b1fe297 --- /dev/null +++ b/kshowmail/kshowmailfeedback.cpp @@ -0,0 +1,159 @@ +/* + * File name: kshowmailfeedback.cpp + * Summary: User feedback questions for KShowmail + * License: GPL - See file COPYING for details. + * + * Author: Stefan Hundhammer + * Eggert Ehmke + * + * Updated: 2002-05-30 + * + * $Id: kshowmailfeedback.cpp,v 1.8 2008/04/17 20:13:20 kuddel-fl Exp $ + * + */ + + +#include + +#include "kshowmail.h" +#include "kfeedback.h" + + + +void KShowMailApp::slotSendFeedbackMail() +{ + KFeedbackDialog* feedbackDialog = new KFeedbackDialog( "eggert.ehmke@berlin.de, ulrich.weigelt@gmx.de", "feedback_mail" ); + CHECK_PTR( feedbackDialog ); + + KFeedbackQuestionList * list = feedbackDialog->form()->questionList(); + + KFeedbackQuestion * question = + list->addQuestion( i18n( "What is your general opinion about this program?" ), "general_opinion", true, true ); + + question->addAnswer( i18n( "It's one of my favourites"), "1/8_favourite"); + question->addAnswer( i18n( "I like it"), "2/8_like_it"); + question->addAnswer( i18n( "It's sometimes useful"), "3/8_sometimes_useful"); + question->addAnswer( i18n( "It's average"), "4/8_average"); + question->addAnswer( i18n( "Nice try, but this could be done better"), "5/8_nice_try"); + question->addAnswer( i18n( "It's poor"), "6/8_poor"); + question->addAnswer( i18n( "It's useless"), "7/8_useless"); + question->addAnswer( i18n( "It's crap"), "8/8_crap"); + + question = list->addQuestion( i18n( "Which features of this program do you like?" ), "features_liked", false ); + addFeatureList( question ); + + question = list->addQuestion( i18n( "What is your favourite feature?" ), "favourite_feature", true ); + addFeatureList( question ); + + question = list->addQuestion( i18n( "Which features don't you like?" ), "features_not_liked", false ); + addFeatureList( question ); + + question = list->addQuestion( i18n( "Which features do you never use?" ), "features_never_used", false ); + addFeatureList( question ); + + question = list->addQuestion( i18n( "Are there features you are missing?" ), "features_missing", true ); + question->addAnswer( i18n( "Yes, a lot! (please add comment below)" ), "1/4_lots" ); + question->addAnswer( i18n( "Some (please add comment below)" ), "2/4_some" ); + question->addAnswer( i18n( "None" ), "3/4_none" ); + question->addAnswer( i18n( "It has too many features already!" ), "4/4_too_many_already" ); + + question = list->addQuestion( i18n( "How do you rate the stability of this program?" ), "stability", true, true ); + question->addAnswer( i18n( "Rock solid"), "1/5_rock_solid" ); + question->addAnswer( i18n( "Good"), "2/5_good"); + question->addAnswer( i18n( "Average"), "3/5_average"); + question->addAnswer( i18n( "Poor"), "4/5_poor" ); + question->addAnswer( i18n( "It keeps crashing all the time"), "5/5_keeps_crashing" ); + + question = list->addQuestion( i18n( "How do you rate the performance of this program?" ), "performance", true ); + question->addAnswer( i18n( "Great"), "1/5_great"); + question->addAnswer( i18n( "Good"), "2/5_good"); + question->addAnswer( i18n( "Average"), "3/5_average"); + question->addAnswer( i18n( "Poor"), "4/5_poor"); + question->addAnswer( i18n( "It's so slow it drives me nuts"), "5/5_drives_me_nuts"); + + question = list->addQuestion( i18n( "What is your experience with computers in general?" ), "computer_experience", true ); + question->addAnswer( i18n( "Expert" ), "1/5_expert" ); + question->addAnswer( i18n( "Fair" ), "2/5_fair" ); + question->addAnswer( i18n( "Average" ), "3/5_average" ); + question->addAnswer( i18n( "Learning" ), "4/5_learning" ); + question->addAnswer( i18n( "Newbie" ), "5/5_newbie" ); + + question = list->addQuestion( i18n( "What is your experience with Unix/Linux systems?" ), "unix_experience", true ); + question->addAnswer( i18n( "Expert" ), "1/5_expert" ); + question->addAnswer( i18n( "Fair" ), "2/5_fair" ); + question->addAnswer( i18n( "Average" ), "3/5_average" ); + question->addAnswer( i18n( "Learning" ), "4/5_learning" ); + question->addAnswer( i18n( "Newbie" ), "5/5_newbie" ); + + question = list->addQuestion( i18n( "Did you have trouble figuring out how to work with this program?" ), + "learning_curve", true, true ); + question->addAnswer( i18n( "No problem" ), "1/5_no_problem" ); + question->addAnswer( i18n( "Some" ), "2/5_some_problems" ); + question->addAnswer( i18n( "I'm still learning" ), "3/5_still_learing" ); + question->addAnswer( i18n( "I didn't have a clue what to do at first" ), "4/5_no_clue_at_first" ); + question->addAnswer( i18n( "I still don't have a clue what to do" ), "5/5_still_no_clue" ); + + question = list->addQuestion( i18n( "Where do you use this program most?" ), "usage_where", true ); + question->addAnswer( i18n( "At work" ), "at_work" ); + question->addAnswer( i18n( "At home" ), "at_home" ); + question->addAnswer( i18n( "At university / school" ), "university" ); + + question = list->addQuestion( i18n( "What is your primary role there?" ), "primary_role", true ); + question->addAnswer( i18n( "Home user" ), "home_user" ); + question->addAnswer( i18n( "Student" ), "student" ); + question->addAnswer( i18n( "Educational (teacher / professor)" ), "educational" ); + question->addAnswer( i18n( "Non-computer related work" ), "non_computer" ); + question->addAnswer( i18n( "Developer" ), "developer" ); + question->addAnswer( i18n( "System administrator" ), "sysadmin" ); + + question = list->addQuestion( i18n( "Do you have any other roles there?" ), "other_roles", false ); + question->addAnswer( i18n( "Home user" ), "home_user" ); + question->addAnswer( i18n( "Student" ), "student" ); + question->addAnswer( i18n( "Educational (teacher / professor)" ), "educational" ); + question->addAnswer( i18n( "Non-computer related work" ), "non_computer" ); + question->addAnswer( i18n( "Developer" ), "developer" ); + question->addAnswer( i18n( "System administrator" ), "sysadmin" ); + + question = list->addQuestion( i18n( "How did you get to know this program?" ), "first_contact", true ); + question->addAnswer( i18n( "In a menu on my machine" ), "menu" ); + question->addAnswer( i18n( "Somebody told me about it" ), "told" ); + question->addAnswer( i18n( "On the internet" ), "internet" ); + question->addAnswer( i18n( "Printed magazine / book" ), "print_media" ); + question->addAnswer( i18n( "Other (please add comment below)" ), "other" ); + + list->addYesNoQuestion( i18n( "Would you recommend this program to a friend?" ), "recommend", true ); + + feedbackDialog->show(); +} + + +void KShowMailApp::addFeatureList( KFeedbackQuestion * question ) +{ + question->addAnswer( i18n( "The message list display in general"), "message_list" ); + question->addAnswer( i18n( "Display of message headers" ), "message_header" ); + question->addAnswer( i18n( "Display of complete messages"), "complete_message" ); + + question->addAnswer( i18n( "Filters" ), "filters" ); + question->addAnswer( i18n( "Manual delete of unwanted messages"), "manual_delete_messages" ); + question->addAnswer( i18n( "Automatic move of filtered messages" ), "move_messages" ); + question->addAnswer( i18n( "Automatic delete of filtered messages" ), "delete_messages" ); + question->addAnswer( i18n( "Automatic mark of filtered messages" ), "mark_messages" ); + question->addAnswer( i18n( "Ignoring of filtered messages" ), "ignoring_messages" ); + question->addAnswer( i18n( "Integration of SpamAssassin" ), "SpamAssassin_Integration" ); + question->addAnswer( i18n( "White- and Blacklist" ), "white_blacklist" ); + question->addAnswer( i18n( "Filter Log" ), "filter_log" ); + question->addAnswer( i18n( "Filter messages by regular expressions"), "filter_messages_by regular_expression" ); + + + question->addAnswer( i18n( "Sorting of messages by size, date etc." ), "sorting" ); + + question->addAnswer( i18n( "Play sound"), "play_sound" ); + question->addAnswer( i18n( "Play beep"), "play_beep" ); + question->addAnswer( i18n( "Initial timer"), "initial_timer" ); + question->addAnswer( i18n( "Interval timer"), "interval_timer" ); + question->addAnswer( i18n( "This feedback survey :-)"), "feedback" ); +} + + + +// EOF diff --git a/kshowmail/kshowmailui.rc b/kshowmail/kshowmailui.rc new file mode 100644 index 0000000..ace6ca4 --- /dev/null +++ b/kshowmail/kshowmailui.rc @@ -0,0 +1,45 @@ + + + + &Actions + + + + + + + + + + + + + &Settings + + + &Help + + + + + + + + + + + + + + + + + + + Main Toolbar + + + + + + \ No newline at end of file diff --git a/kshowmail/kshowmailview.cpp b/kshowmail/kshowmailview.cpp new file mode 100644 index 0000000..d7fb3a5 --- /dev/null +++ b/kshowmail/kshowmailview.cpp @@ -0,0 +1,449 @@ +/*************************************************************************** + kshowmailview.cpp - description + ------------------- + begin : Sat May 6 12:13:57 MEST 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.de + + 26 Sep 2002 - Allow for columns to be hidden. Allistar Melville + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 files for Qt +#include +#include +#include +#include +#include + +#include +#include +#include + +// application specific includes +#include "kshowmailview.h" +#include "kshowmaildoc.h" +#include "kshowmail.h" + +KshowmailView::KshowmailView(QWidget *parent, const char *name): + QSplitter(Vertical, parent, name) +{ + setBackgroundMode( PaletteBase ); + setFocusPolicy( QWidget::StrongFocus ); + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //load active pic for the account list + m_pixOk = new QPixmap( ::locate( "data", "kshowmail/pics/ok.png" ) ); + + //create account list + m_pListAccounts = new KListView( this, "accounts" ); + m_pListAccounts->setSelectionMode( QListView::Extended ); + m_pListAccounts->setSorting( 1 ); // sort account column + m_pListAccounts->setShowSortIndicator( true ); + m_pListAccounts->addColumn( i18n( "Active" ), DEFAULT_WIDTH_ACCOUNT_ACTIVE ); + m_pListAccounts->addColumn( i18n( "Account" ), DEFAULT_WIDTH_ACCOUNT_ACCOUNT ); + m_pListAccounts->addColumn( i18n( "Server" ), DEFAULT_WIDTH_ACCOUNT_SERVER ); + m_pListAccounts->addColumn( i18n( "User" ), DEFAULT_WIDTH_ACCOUNT_USER ); + m_pListAccounts->addColumn( i18n( "Messages" ), DEFAULT_WIDTH_ACCOUNT_MESSAGES ); + m_pListAccounts->addColumn( i18n( "Size" ), DEFAULT_WIDTH_ACCOUNT_SIZE ); + m_pListAccounts->setAllColumnsShowFocus( true ); + connect( m_pListAccounts, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint &, int ) ), SLOT( slotAccountContext( QListViewItem*, const QPoint &, int ) ) ); + connect( m_pListAccounts, SIGNAL( clicked( QListViewItem*, const QPoint &, int) ), SLOT( slotAccountClicked( QListViewItem*, const QPoint &, int ) ) ); + + //create message list + m_pListMessages = new KListView( this, "messages" ); + m_pListMessages->setSelectionMode( QListView::Extended ); + m_pListMessages->setAllColumnsShowFocus( true ); + m_pListMessages->setSorting( ShowListViewItem::_colNumber ); // sort number column + m_pListMessages->setShowSortIndicator( true ); + m_pListMessages->addColumn( i18n( "Number" ), DEFAULT_WIDTH_MESSAGE_NUMBER ); + m_pListMessages->addColumn( i18n( "Account" ), DEFAULT_WIDTH_MESSAGE_ACCOUNT ); + m_pListMessages->addColumn( i18n( "From" ), DEFAULT_WIDTH_MESSAGE_FROM ); + m_pListMessages->addColumn( i18n( "To" ), DEFAULT_WIDTH_MESSAGE_TO ); + m_pListMessages->addColumn( i18n( "Subject" ), DEFAULT_WIDTH_MESSAGE_SUBJECT ); + m_pListMessages->addColumn( i18n( "Date" ), DEFAULT_WIDTH_MESSAGE_DATE ); + m_pListMessages->addColumn( i18n( "Size" ), DEFAULT_WIDTH_MESSAGE_SIZE ); + m_pListMessages->addColumn( i18n( "Content" ), DEFAULT_WIDTH_MESSAGE_CONTENT ); + m_pListMessages->addColumn( i18n( "State" ), DEFAULT_WIDTH_MESSAGE_STATE ); + connect( m_pListMessages, SIGNAL( rightButtonClicked( QListViewItem*, const QPoint &, int) ), SLOT( slotMessageContext( QListViewItem*, const QPoint &, int ) ) ); + connect( m_pListMessages, SIGNAL( doubleClicked( QListViewItem* ) ), SLOT( slotMessageDoubleClicked( QListViewItem* ) ) ); + connect( m_pListMessages, SIGNAL( clicked( QListViewItem* ) ), SLOT( slotMessageClicked( QListViewItem* ) ) ); + + //read the geometry from the application config file + readOptions(); + + +} + +KshowmailView::~KshowmailView() +{ + delete m_pListAccounts; + delete m_pListMessages; +} + +void KshowmailView::readOptions() +{ + //read splitter geometry + config->setGroup ("Display Options"); + QValueList size; + size.append (config->readNumEntry ("sizeaccounts", 40)); + size.append (config->readNumEntry ("sizemessages", 50)); + setSizes (size); + + // read layout of the list views + m_pListAccounts->restoreLayout( config, CONFIG_GROUP_ACCOUNT_LIST ); + m_pListMessages->restoreLayout( config, CONFIG_GROUP_MESSAGE_LIST ); +} + +void KshowmailView::saveOptions (KConfig* config) +{ +// kdDebug () << "KshowmailView::saveOptions" << endl; + config->setGroup("Display Options"); + //splitter + QValueList size = sizes (); + config->writeEntry ("sizeaccounts", size [0]); + config->writeEntry ("sizemessages", size [1]); + // layout + m_pListAccounts->saveLayout ( config, CONFIG_GROUP_ACCOUNT_LIST ); + m_pListMessages->saveLayout (config, CONFIG_GROUP_MESSAGE_LIST ); +} + + +void KshowmailView::slotMessageContext( QListViewItem* pItem, const QPoint&, int ) +{ + if( pItem != NULL ) + { + //get pointer to the main widget + KShowMailApp* theApp = ( KShowMailApp * )parentWidget(); + + //create and show popup menu + QWidget* w = theApp->factory()->container( "mail_context_popup", theApp ); + QPopupMenu* popup = static_cast( w ); + popup->exec( QCursor::pos() ); + + //select clicked item + m_pListMessages->setSelected (pItem, true); + } +} + +void KshowmailView::slotAccountContext( QListViewItem* pItem, const QPoint&, int ) +{ + if ( pItem != NULL ) + { + //get pointer to the main widget + KShowMailApp* theApp = ( KShowMailApp * )parentWidget(); + + //create and show popup menu + QWidget* w = theApp->factory()->container( "account_context_popup", theApp ); + QPopupMenu* popup = static_cast( w ); + popup->exec( QCursor::pos() ); + + //select clicked item + m_pListAccounts->setSelected( pItem, true ); + } +} + +void KshowmailView::slotAccountClicked( QListViewItem* pItem, const QPoint&, int col ) +{ + + //get application config object (kshowmailrc) + KConfig* config = KApplication::kApplication()->config(); + + if( col == 0 ) + { + KShowMailApp *theApp = (KShowMailApp *)parentWidget(); + ConfigElem* pElem = theApp->m_ConfigList.getSelectedAccount(); + + if( pElem != NULL ) + { + //get account name + QString name = pElem->getAccountName(); + + //set config group + config->setGroup( name ); + + //toggle account active state + pElem->setActive( !pElem->isActive() ); + + if( pElem->isActive() ) + { + //set active picture + pItem->setPixmap( 0, *m_pixOk ); + + //write active state into config file + config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, true ); + config->sync(); + } + else + { + //remove active picture + pItem->setPixmap( 0, 0 ); + + //write active state into config file + config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, false ); + config->sync(); + } + + emit signalActiveChanged (); + } + } +} + +void KshowmailView::slotMessageDoubleClicked (QListViewItem* pItem) +{ + if (pItem) + { +// m_pListMessages->setSelected (pItem, true); + + KShowMailApp *theApp=(KShowMailApp *) parentWidget(); + theApp->slotShowHeader (); + } +} + +void KshowmailView::slotMessageClicked (QListViewItem* pItem) +{ + if (pItem) + { +// m_pListMessages->setSelected (pItem, true); + + KShowMailApp *theApp=(KShowMailApp *) parentWidget(); + theApp->delayNextRefresh(); + } +} + +void KshowmailView::clearMailListView( ) +{ + m_pListMessages->clear(); +} + +ShowListViewItem* KshowmailView::insertMail( QString& number, QString& account, QString& from, QString& to, QString& subject, QString& date, QString& size, QString& content, QString& state, QString& time ) +{ + //create item + ShowListViewItem* item = new ShowListViewItem( m_pListMessages ); + + //set content + item->setNumber( number ); + item->setAccount( account ); + item->setFrom( from ); + item->setTo( to ); + item->setSubject( subject ); + item->setDate( date ); + item->setSize( size ); + item->setContent( content ); + item->setState( state ); + item->setTime( time ); + + return item; +} + +void KshowmailView::refreshSetup( ) +{ + QString ConfigEntryDisplay; //entry of the config about show or hide column + QString ConfigEntrySavedWidth; //entry of the config about saved width + int DefaultWidth = 100; //default width of the proceeded column + bool DefaultDisplay = true; //default show or hide of the proceeded column + + //set columns of the account list + config->setGroup( CONFIG_GROUP_ACCOUNT_LIST ); + for( int column = 0; column <= 5; column++ ) //iterate over all columns + { + //get config entries and defaults of the proceeded column from the constants header + switch( column ) + { + case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACTIVE; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACTIVE; + break; + + case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACCOUNT; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACCOUNT; + break; + + case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SERVER; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SERVER; + break; + + case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_USER; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_USER; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_USER; + break; + + case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_MESSAGES; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_MESSAGES; + break; + + case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE; + DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SIZE; + DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SIZE; + break; + } //end select + + //get desired column state + bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay ); + + //get currently column state + bool curShowed = m_pListAccounts->columnWidth( column ) > 0; + + if( showColumn ) + { + //column will be shown + + if( !curShowed ) + { + //the column is currently not be shown + + //get saved width or take default width + int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth ); + + //set column width + m_pListAccounts->setColumnWidth( column, savedWidth ); + } + //else: the column is currently shown; do nothing + } + else + { + //column will not be shown + + if( curShowed ) + { + //the column is currently shown + + //save current width + config->writeEntry( ConfigEntrySavedWidth, m_pListAccounts->columnWidth( column ) ); + + //hide column + m_pListAccounts->hideColumn( column ); + } + //else: the column is already hidden; do nothing + } + + } //end column loop + + //set columns of the message list + config->setGroup( CONFIG_GROUP_MESSAGE_LIST ); + for( int column = 0; column <= 8; column++ ) //iterate over all columns + { + //get config entries and defaults of the proceeded column from the constants header + switch( column ) + { + case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_NUMBER; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_NUMBER; + break; + + case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_ACCOUNT; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_ACCOUNT; + break; + + case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_FROM; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_FROM; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_FROM; + break; + + case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_TO; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_TO; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_TO; + break; + + case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_SUBJECT; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SUBJECT; + break; + + case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_DATE; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_DATE; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_DATE; + break; + + case 6: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_SIZE; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SIZE; + break; + + case 7: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_CONTENT; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_CONTENT; + break; + + case 8: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_STATE; + ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE; + DefaultWidth = DEFAULT_WIDTH_MESSAGE_STATE; + DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_STATE; + break; + + } //end select + + //get desired column state + bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay ); + + //get currently column state + bool curShowed = m_pListMessages->columnWidth( column ) > 0; + + if( showColumn ) + { + //column will be shown + + if( !curShowed ) + { + //the column is currently not be shown + + //get saved width or take default width + int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth ); + + //set column width + m_pListMessages->setColumnWidth( column, savedWidth ); + } + //else: the column is currently shown; do nothing + } + else + { + //column will not be shown + + if( curShowed ) + { + //the column is currently shown + + //save current width + config->writeEntry( ConfigEntrySavedWidth, m_pListMessages->columnWidth( column ) ); + + //hide column + m_pListMessages->hideColumn( column ); + } + //else: the column is already hidden; do nothing + } + + } //end column loop + + //save current layout + m_pListAccounts->saveLayout( config, CONFIG_GROUP_ACCOUNT_LIST ); + m_pListMessages->saveLayout( config, CONFIG_GROUP_MESSAGE_LIST ); + config->sync(); +} diff --git a/kshowmail/kshowmailview.h b/kshowmail/kshowmailview.h new file mode 100644 index 0000000..e417e2e --- /dev/null +++ b/kshowmail/kshowmailview.h @@ -0,0 +1,157 @@ +/*************************************************************************** + kshowmailview.h - description + ------------------- + begin : Sat May 6 12:13:57 MEST 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.de + + 26 Sep 2002 - Allow for columns to be hidden. Allistar Melville + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 KSHOWMAILVIEW_H +#define KSHOWMAILVIEW_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +//Qt headers +#include +#include +#include +#include + +//KDE headers +#include +#include +#include + +//KShowmail headers +#include "configlist.h" +#include "showlistviewitem.h" + + + +class ConfigList; +class KshowmailDoc; + +/** The KshowmailView class provides the view widget for the KShowMailApp instance. + * The View instance inherits QWidget as a base class and represents the view object of a KMainWindow. + * As KshowmailView is part of the document-view model, it needs a reference to the document object + * connected with it by the KShowMailApp class to manipulate and display + * the document structure provided by the KshowmailDoc class. + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @author Ulrich Weigelt + * @version KDevelop version 0.4 code generation + */ +class KshowmailView : public QSplitter +{ + Q_OBJECT + + public: + + /** + * Constructor for the main view + */ + KshowmailView(QWidget *parent = 0, const char *name=0); + + + /** + * Destructor for the main view + */ + ~KshowmailView(); + + /** + * Saves the options + */ + void saveOptions( KConfig* config ); + + /** + * Clears the mail list view. + */ + void clearMailListView(); + + /** + * Creates a mail list view item with the given content and + * inserts it into the mail list view. + * @param number mail number + * @param account account name + * @param from sender of the mail + * @param to recipient of the mail + * @param subject mail subject + * @param date date on which the mail was sent, formated to the current locale's conventions. + * @param size size of the mail + * @param content content type + * @param state new or old + * @param time send date, formated to the ISO 8601 extended specification (YYYY-MM-DDTHH:MM:SS) + * @return pointer to the created list view item + */ + ShowListViewItem* insertMail( QString& number, QString& account, QString& from, QString& to, QString& subject, QString& date, QString& size, QString& content, QString& state, QString& time ); + + /** + * Refreshes the geometry. + * Reads from the config file the properties about show or hide columns. + * If a shown column should be hidden, the current width will be saved and the column will be hidden. + * If a hidden column should be shown, it will be set to the old saved width. + */ + void refreshSetup(); + + KListView* m_pListAccounts; + KListView* m_pListMessages; + + private: + + QPixmap* m_pixOk; + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * Reads the some geometry options from the application config file. + */ + void readOptions(); + +private slots: + + /** + * Connected with signal rightButtonClicked of m_pListMessages. + * Invoked, when the user has clicked on a list item with the right mouse button. + * Selects the clicked item and shows the popup menu mail_context_popup defined in + * kshowmailui.rc. + */ + void slotMessageContext( QListViewItem*, const QPoint&, int ); + + void slotMessageDoubleClicked (QListViewItem*); + void slotMessageClicked (QListViewItem*); + + /** + * Connected with signal rightButtonClicked of m_pListAccounts. + * Invoked, when the user has clicked on a list item with the right mouse button. + * Selects the clicked item and shows the popup menu account_context_popup defined in + * kshowmailui.rc. + */ + void slotAccountContext( QListViewItem*, const QPoint &, int ); + + /** + * Connected with signal clicked of the account list. + * Activate or deactivate the account, if the user has clicked in the first column + */ + void slotAccountClicked( QListViewItem*, const QPoint& point, int col ); + +signals: + void signalActiveChanged (); +}; + +#endif // KSHOWMAILVIEW_H diff --git a/kshowmail/kwalletaccess.cpp b/kshowmail/kwalletaccess.cpp new file mode 100644 index 0000000..20dccc6 --- /dev/null +++ b/kshowmail/kwalletaccess.cpp @@ -0,0 +1,137 @@ +// +// C++ Implementation: kwalletaccess +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "kwalletaccess.h" + + +bool KWalletAccess::savePassword( const QString & account, const QString & password ) +{ + //check for enabled KWallet + if( !KWallet::Wallet::isEnabled() ) + { + KMessageBox::error( NULL, i18n( "KWallet is not available." ) ); + return false; + } + + //get wallet name for network data + QString name = KWallet::Wallet::NetworkWallet(); + if( name == "" || name == QString::null ) + { + KMessageBox::error( NULL, i18n( "Could not get wallet name for network datas from KWallet." ) ); + return false; + } + + //open wallet + //we want to create a connection object just at first call of this function + static KWallet::Wallet* wallet; + + if( wallet == NULL ) + { + wallet = KWallet::Wallet::openWallet( name ); + } + else if( !wallet->isOpen() ) + { + delete wallet; + wallet = KWallet::Wallet::openWallet( name ); + } + + if( wallet == NULL ) + { + KMessageBox::error( NULL, i18n( "Could not open KWallet." ) ); + return false; + } + + //create kshowmail folder if it does not exist + if( !wallet->hasFolder( "KShowmail" ) ) + { + bool createFolderSuccess = wallet->createFolder( "KShowmail" ); + + if( !createFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not create folder for KShowmail in KWallet." ) ); + return false; + } + } + + //set folder + bool setFolderSuccess = wallet->setFolder( "KShowmail" ); + if( !setFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not open folder for KShowmail in KWallet." ) ); + return false; + } + + //write password + int writePasswordSuccess = wallet->writePassword( account, password ); + if( writePasswordSuccess != 0 ) + { + KMessageBox::error( NULL, i18n( "Could not save password in KWallet." ) ); + return false; + } + + + return true; +} + +QString KWalletAccess::getPassword( const QString & account ) +{ + //check for enabled KWallet + if( !KWallet::Wallet::isEnabled() ) + { + KMessageBox::error( NULL, i18n( "KWallet is not available." ) ); + return QString::null; + } + + //get wallet name for network data + QString name = KWallet::Wallet::NetworkWallet(); + if( name == "" || name == QString::null ) + { + KMessageBox::error( NULL, i18n( "Could not get wallet name for network datas from KWallet." ) ); + return QString::null; + } + + //open wallet + //we want to create a connection object just at first call of this function + static KWallet::Wallet* wallet; + + if( wallet == NULL ) + { + wallet = KWallet::Wallet::openWallet( name ); + } + else if( !wallet->isOpen() ) + { + delete wallet; + wallet = KWallet::Wallet::openWallet( name ); + } + + if( wallet == NULL ) + { + KMessageBox::error( NULL, i18n( "Could not open KWallet." ) ); + return QString::null; + } + + //set folder + bool setFolderSuccess = wallet->setFolder( "KShowmail" ); + if( !setFolderSuccess ) + { + KMessageBox::error( NULL, i18n( "Could not open folder for KShowmail in KWallet." ) ); + return QString::null; + } + + //read password + QString password; + + int readPasswordSuccess = wallet->readPassword( account, password ); + if( readPasswordSuccess != 0 ) + { + KMessageBox::error( NULL, i18n( "Could not get password of account %1 from KWallet." ).arg( account) ); + return QString::null; + } + + return password; +} diff --git a/kshowmail/kwalletaccess.h b/kshowmail/kwalletaccess.h new file mode 100644 index 0000000..8e9c537 --- /dev/null +++ b/kshowmail/kwalletaccess.h @@ -0,0 +1,45 @@ +// +// C++ Interface: kwalletaccess +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef KWALLETACCESS_H +#define KWALLETACCESS_H + +//Qt headers +#include + +//KDE headers +#include +#include +#include +#include + +/** + * @brief Provides routines to save and read passwords using KWallet. + * @author Ulrich Weigelt + */ +namespace KWalletAccess +{ + + /** + * Saves the given password into KWallet. + * @param account account name + * @param password the password + * @return TRUE - password successfully saved + * @return FALSE - password could not be saved + */ + bool savePassword( const QString& account, const QString& password ); + + /** + * Returns the password of the given account. + * @param account account name + * @return the password or QString::null, if the sought password is not stored in KWallet. + */ + QString getPassword( const QString& account ); +} + +#endif diff --git a/kshowmail/main.cpp b/kshowmail/main.cpp new file mode 100644 index 0000000..a28067a --- /dev/null +++ b/kshowmail/main.cpp @@ -0,0 +1,114 @@ +/*************************************************************************** + main.cpp - description + ------------------- + begin : Fre Sep 28 23:29:54 CEST 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +//KDE-Header +#include +#include +#include +#include +#include + +//KShowmail-Header +#include "uniqueapp.h" +#include "kshowmail.h" +#include "constants.h" + +using namespace Constants; + +//description of the application +static const char *description = I18N_NOOP("A powerful pop3 mail checker"); + +//the command line options +//see constants.h +static KCmdLineOptions kshowmailOptions[] = + { + { CMDLINE_REFRESH_SHORT, 0, 0}, + { CMDLINE_REFRESH, I18N_NOOP("Refresh messages now"), 0 }, + { CMDLINE_CONFIG_SHORT, 0, 0}, + { CMDLINE_CONFIG, I18N_NOOP("Launch configure dialog"), 0 }, + KCmdLineLastOption + }; + +int main(int argc, char *argv[]) +{ + //create datas for the about box + KShowMailApp::m_pAbout = new KAboutData ( + /*appName */ "kshowmail", + /*programName*/ "KShowmail", + /*version */ VERSION, + /*description*/ description, + /*license */ KAboutData::License_GPL_V2, + /*copyright */ "(C) 2000-2005, Eggert Ehmke", + /*text */ 0, + /*homepage */ "http://sourceforge.net/projects/kshowmail", + /*bug email */ "eggert.ehmke@berlin.de"); + + //add authors + KShowMailApp::m_pAbout->addAuthor ("Eggert Ehmke", 0, "eggert.ehmke@berlin.de", "http://kshowmail.sourceforge.net"); + KShowMailApp::m_pAbout->addAuthor ("Allistar Melville", 0, "allistar@silvermoon.co.nz", 0); + KShowMailApp::m_pAbout->addAuthor ("Oleg Ivanov", 0, "saruman@unigsm.com", 0); + KShowMailApp::m_pAbout->addAuthor( "Ulrich Weigelt", 0, "ulrich.weigelt@gmx.de", 0 ); + KShowMailApp::m_pAbout->setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\nYour names") ,I18N_NOOP("_: EMAIL OF TRANSLATORS\nYour emails")); + + //Initialize command line arguments + KCmdLineArgs::init(argc, argv, KShowMailApp::m_pAbout); + //add the special command line options of kshowmail which was specified above + KCmdLineArgs::addCmdLineOptions(kshowmailOptions); + + // when released, this must be 0! +#if 0 + + kdDebug () << "KShowmail running in debug mode" << endl; + KApplication::addCmdLineOptions(); + + KApplication app; + KShowMailApp* kshow = new KShowMailApp (); + kshow->show(); + app.exec(); + +#else + + //print debug message about run mode + kdDebug () << "KShowmail running in normal mode" << endl; + + //add special command line options for unique KDE applications + KUniqueApplication::addCmdLineOptions(); + + //test whether the new application to start is unique + if (KUniqueApplication::start()) + { + //yes, wa can start a unique kshowmail instance + + //create a new unique appliction + //UniqueApp is a inherited class of KUniqueApplication + //see uniqueapp.h + UniqueApp* app = new UniqueApp (); + + //start the application + app->exec (); + } + else + { + //kshowmail is already running + kdWarning() << I18N_NOOP ("Kshowmail is already running!") << endl; + } + +#endif + + return 0; +} + diff --git a/kshowmail/senderlistfilter.cpp b/kshowmail/senderlistfilter.cpp new file mode 100644 index 0000000..fcb4e6d --- /dev/null +++ b/kshowmail/senderlistfilter.cpp @@ -0,0 +1,102 @@ +// +// C++ Implementation: senderlistfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "senderlistfilter.h" + +SenderListFilter::SenderListFilter() +{ + + //get the application config object + config = KApplication::kApplication()->config(); + + //load the setup + load(); + +} + + +SenderListFilter::~SenderListFilter() +{ +} + +FilterAction_Type SenderListFilter::check( QString sender ) const +{ + //return with none action if the given string is empty + if( sender.isEmpty() ) return FActNone; + + //check the whitelist first + if( search( whitelist, sender ) ) return FActPass; + + //check blacklist + if( search( blacklist, sender ) ) return blacklistAction; + + //this is the default + return FActNone; +} + +void SenderListFilter::load( ) +{ + //set group + config->setGroup( CONFIG_GROUP_FILTER ); + + //get lists + blacklist = config->readListEntry( CONFIG_ENTRY_FILTER_BLACKLIST ); + whitelist = config->readListEntry( CONFIG_ENTRY_FILTER_WHITELIST ); + + //get blacklist action + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, DEFAULT_FILTER_BLACKLIST_ACTION ) ) + { + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_DELETE : blacklistAction = FActDelete; break; + case CONFIG_VALUE_FILTER_BLACKLIST_ACTION_MARK : blacklistAction = FActMark; break; + default : blacklistAction = FActMark; break; + } +} + +bool SenderListFilter::search( QStringList list, QString sender ) const +{ + //return with FALSE if the list or the search string are empty + if( list.isEmpty() || sender.isEmpty() ) return false; + + //iterate over the list to search for the sender + bool found = false; + for( QStringList::Iterator it = list.begin(); it != list.end() && found == false; ++it ) + { + if( sender.contains( *it, false ) || (*it).contains( sender, false ) ) + found = true; + } + + return found; +} + +void SenderListFilter::print( ) +{ + kdDebug() << "Blacklist:" << endl; + for( QStringList::Iterator it = blacklist.begin(); it != blacklist.end(); ++it ) + { + kdDebug() << *it << endl; + } + + switch( blacklistAction ) + { + case FActDelete : kdDebug() << "Blacklist Action: DELETE" << endl; break; + case FActMark : kdDebug() << "Blacklist Action: MARK " << endl; break; + default : kdDebug() << "Blacklist Action: Unknown" << endl; break; + } + + kdDebug() << endl; + + kdDebug() << "Whitelist:" << endl; + for( QStringList::Iterator it = whitelist.begin(); it != whitelist.end(); ++it ) + { + kdDebug() << *it << endl; + } + +} diff --git a/kshowmail/senderlistfilter.h b/kshowmail/senderlistfilter.h new file mode 100644 index 0000000..d54237f --- /dev/null +++ b/kshowmail/senderlistfilter.h @@ -0,0 +1,113 @@ +// +// C++ Interface: senderlistfilter +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef SENDERLISTFILTER_H +#define SENDERLISTFILTER_H + +//Qt headers +#include +#include + +//KDE headers +#include +#include +#include + +//Kshowmail headers +#include "types.h" +#include "constants.h" + +using namespace Types; + +/** + * @brief This class represents both the blacklist and the whitelist. + * For using create an object of it and call check() to test a sender address. + * You have to call load() after the settings in the config file was changed. + * @author Ulrich Weigelt + */ + +class SenderListFilter{ + + public: + + /** + * Constructor + */ + SenderListFilter(); + + /** + * Destructor + */ + ~SenderListFilter(); + + /** + * Checks the given sender whether it is listed in the blacklist or whitelist. + * @param sender sender which shall be checked + * @return appointed action (FActPass, FActDelete, FActMark, FActNone) + */ + FilterAction_Type check( QString sender ) const; + + /** + * Loads the setup from the application config file. + */ + void load(); + + /** + * Prints the settings. + */ + void print(); + + private: + + /** + * Connector to the configuration file + */ + KConfig* config; + + /** + * blacklisted addresses + */ + QStringList blacklist; + + /** + * whitelisted addresses + */ + QStringList whitelist; + + /** + * appointed action of the blacklist. + */ + FilterAction_Type blacklistAction; + + protected: + + /** + * Returns TRUE if the given list contains the sender or a part of it. + * e.g.: The list contains: + * Ulrich Weigelt + * spam@spamhouse.com + * "Lara Croft" + * + * This sender strings will cause a return value of TRUE: + * "Ulrich Weigelt" + * "Spam King" + * spam@spamhouse.com + * lara.croft@tombraider.com + * "Lara Croft" + * + * @param list blacklist or whitelist + * @param sender searched sender name + * @return TRUE - the given sender name is listed. FALSE - is not listed + */ + bool search( QStringList list, QString sender ) const; +}; + +#endif diff --git a/kshowmail/serverdialog.cpp b/kshowmail/serverdialog.cpp new file mode 100644 index 0000000..b61aa25 --- /dev/null +++ b/kshowmail/serverdialog.cpp @@ -0,0 +1,336 @@ +/*************************************************************************** + serverdialog.cpp - description + ------------------- + begin : Sun Oct 28 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "serverdialog.h" + +ServerDialog::ServerDialog( QWidget* parent, ConfigElem* item ) + : KDialogBase( parent, "ServerDialog", true, QString::null, Ok|Cancel, Ok, true ) +{ + //save pointer to account and view + account = item; + + //tab widget + KTabWidget* tabs = new KTabWidget( this, "tabs" ); + tabs->setMargin( 10 ); + + //pages + QWidget* pgGeneral = new QWidget( this ); + QWidget* pgSecurity = new QWidget( this ); + setMainWidget( tabs ); + + //layouts of general page + QVBoxLayout* layGeneral = new QVBoxLayout( pgGeneral, 0, spacingHint() ); + QGridLayout* layTop = new QGridLayout( layGeneral, 5, 2 ); + + //layouts of security page + QVBoxLayout* laySecurity = new QVBoxLayout( pgSecurity, 0, spacingHint() ); + laySecurity->setAlignment( Qt::AlignTop ); + + //upper items + QLabel* lblAccount = new QLabel( i18n( "Account:" ), pgGeneral, "lblAccount" ); + txtAccount = new KLineEdit( pgGeneral, "txtAccount" ); + txtAccount->setEnabled( false ); + QToolTip::add( lblAccount, i18n( "Unique Account Name" ) ); + QToolTip::add( txtAccount, i18n( "Unique Account Name" ) ); + layTop->addWidget( lblAccount, 0, 0 ); + layTop->addWidget( txtAccount, 0, 1 ); + + QLabel* lblServer = new QLabel( i18n( "Server:" ), pgGeneral, "lblServer" ); + txtServer = new KLineEdit( pgGeneral, "txtServer" ); + txtServer->setFocus(); + QToolTip::add( lblServer, i18n( "Server Name" ) ); + QToolTip::add( txtAccount, i18n( "Server Name" ) ); + layTop->addWidget( lblServer, 1, 0 ); + layTop->addWidget( txtServer, 1, 1 ); + + QLabel* lblProtocol = new QLabel( i18n( "Protocol:" ), pgGeneral, "lblProtocol" ); + cboProtocol = new KComboBox( pgGeneral, "cboProtocol" ); + cboProtocol->insertItem( "POP3" ); //currently KShowmail just supports POP3 + QToolTip::add( lblProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); + QToolTip::add( cboProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); + layTop->addWidget( lblProtocol, 2, 0 ); + layTop->addWidget( cboProtocol, 2, 1 ); + + QLabel* lblPort = new QLabel( i18n( "Port:" ), pgGeneral, "lblPort" ); + spbPort = new QSpinBox( 0, 65535, 1, pgGeneral, "spbPort" ); + spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); + QToolTip::add( lblPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); + QToolTip::add( spbPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); + layTop->addWidget( lblPort, 3, 0 ); + layTop->addWidget( spbPort, 3, 1 ); + + QLabel* lblUser = new QLabel( i18n( "User:" ), pgGeneral, "lblUser" ); + txtUser = new KLineEdit( pgGeneral, "txtUser" ); + QToolTip::add( lblUser, i18n( "To authenticate to the mail server you need an user name." ) ); + QToolTip::add( txtUser, i18n( "To authenticate to the mail server you need an user name." ) ); + layTop->addWidget( lblUser, 4, 0 ); + layTop->addWidget( txtUser, 4, 1 ); + + //password groupbox and layouts + QGroupBox* gboxPassword = new QGroupBox( 0, Qt::Horizontal, i18n( "Password" ), pgGeneral, "gboxPassword" ); + layGeneral->addWidget( gboxPassword ); + + QVBoxLayout* layPassword = new QVBoxLayout( gboxPassword->layout(), spacingHint() ); + QGridLayout* layPasswordStorage = new QGridLayout( layPassword, 2, 2, spacingHint() ); + + + //radio buttons to set storage of the password + grpPasswordStorage = new QButtonGroup( NULL, "grpPasswordStorage" ); + connect( grpPasswordStorage, SIGNAL( clicked( int ) ), this, SLOT( slotPasswordStorageChanged( int ) ) ); + + QRadioButton* btnPasswordDontSave = new QRadioButton( i18n( "Don't save" ), gboxPassword, "btnPasswordDontSave" ); + QRadioButton* btnPasswordSaveFile = new QRadioButton( i18n( "Save password"), gboxPassword, "btnPasswordSaveFile" ); + QRadioButton* btnPasswordSaveKWallet = new QRadioButton( i18n( "Use KWallet" ), gboxPassword, "btnPasswordSaveKWallet" ); + grpPasswordStorage->insert( btnPasswordDontSave, ID_BUTTON_PASSWORD_DONT_SAVE ); + grpPasswordStorage->insert( btnPasswordSaveFile, ID_BUTTON_PASSWORD_SAVE_FILE ); + grpPasswordStorage->insert( btnPasswordSaveKWallet, ID_BUTTON_PASSWORD_SAVE_KWALLET ); + QToolTip::add( btnPasswordDontSave, i18n( "Don't save password. KShowmail will ask you for it at first server connect." ) ); + QToolTip::add( btnPasswordSaveFile, i18n( "Save password in the configuration file. Not recommended, because the password is just lightly encrypted" ) ); + QToolTip::add( btnPasswordSaveKWallet, i18n( "Use KWallet to save the password. Maybe you have to type in the KWallet master password at first server connect." ) ); + layPasswordStorage->addWidget( btnPasswordDontSave, 0, 0 ); + layPasswordStorage->addWidget( btnPasswordSaveFile, 0, 1 ); + layPasswordStorage->addWidget( btnPasswordSaveKWallet, 1, 0 ); + + //password edit line + txtPassword = new KPasswordEdit( gboxPassword, "txtUser" ); + layPassword->addWidget( txtPassword ); + + //set password defaults + grpPasswordStorage->setButton( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + slotPasswordStorageChanged( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); + + //active check box + QGridLayout* layActive = new QGridLayout( layGeneral, 1, 1 ); + layActive->setAlignment( Qt::AlignCenter ); + chkActive = new QCheckBox( i18n( "Active"), pgGeneral, "chkActive" ); + QToolTip::add( chkActive, i18n( "Select it to activate this account." ) ); + layActive->addWidget( chkActive, 0, 0 ); + chkActive->setChecked( DEFAULT_ACCOUNT_ACTIVE ); + + //secure transfer groupbox and layouts + QGroupBox* gboxSecureTransfer = new QGroupBox( 0, Qt::Horizontal, i18n( "Encryption" ), pgSecurity, "gboxSecureTransfer" ); + gboxSecureTransfer->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Maximum ) ); + laySecurity->addWidget( gboxSecureTransfer ); + + QHBoxLayout* laySecureTransfer = new QHBoxLayout( gboxSecureTransfer->layout(), spacingHint() ); + + //radio buttons to set secure transfer + grpSecureTransfer = new QButtonGroup( NULL, "grpSecureTransfer" ); + connect( grpSecureTransfer, SIGNAL( clicked( int ) ), this, SLOT( slotSecureTransferChanged ( int ) ) ); + + QRadioButton* btnSecureTransferNone = new QRadioButton( i18n( "None" ), gboxSecureTransfer, "btnSecureTransferNone" ); + QRadioButton* btnSecureTransferSSL = new QRadioButton( i18n( "SSL"), gboxSecureTransfer, "btnSecureTransferSSL" ); + QRadioButton* btnSecureTransferTLS = new QRadioButton( i18n( "TLS" ), gboxSecureTransfer, "btnSecureTransferTLS" ); + grpSecureTransfer->insert( btnSecureTransferNone, ID_BUTTON_SECTRANSFER_NONE ); + grpSecureTransfer->insert( btnSecureTransferSSL, ID_BUTTON_SECTRANSFER_SSL ); + grpSecureTransfer->insert( btnSecureTransferTLS, ID_BUTTON_SECTRANSFER_TLS ); + QToolTip::add( btnSecureTransferNone, i18n( "The download of the mail header and body will not be encrypted. Use this, if your provider doesn't make a secure transfer available." ) ); + QToolTip::add( btnSecureTransferSSL, i18n( "Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure communications on the Internet." ) ); + QToolTip::add( btnSecureTransferTLS, i18n( "Transport Layer Security (TLS) is a cryptographic protocol that provides secure communications on the Internet. It is the successor of SSL." ) ); + laySecureTransfer->addWidget( btnSecureTransferNone ); + laySecureTransfer->addWidget( btnSecureTransferSSL ); + laySecureTransfer->addWidget( btnSecureTransferTLS ); + + grpSecureTransfer->setButton( DEFAULT_ACCOUNT_SECTRANSFER ); + + + //set pages to tab widget + tabs->addTab( pgGeneral, i18n( "General" ) ); + tabs->addTab( pgSecurity, i18n( "Security" ) ); + + //set caption + if( item == NULL ) + setCaption( i18n( "New account" ) ); + else + setCaption( i18n( "Edit account" ) ); + + //write values of the given account into the dialog items + if( account != NULL ) + fillDialog(); + + +} + + +ServerDialog::~ServerDialog() +{ +} + +void ServerDialog::slotPasswordStorageChanged( int id ) +{ + if( id == ID_BUTTON_PASSWORD_DONT_SAVE ) + { + txtPassword->setEnabled( false ); + txtPassword->clear(); + } + else + txtPassword->setEnabled( true ); +} + +void ServerDialog::slotOk( ) +{ + //check for necessary values + if( account == NULL ) + { + kdError() << "ServerDialog::slotOk: Given account pointer is Null." << endl; + return; + } + if( txtServer->text() == "" ) + { + KMessageBox::error( this, i18n( "Please enter an server." ) ); + return; + } + + if( txtUser->text() == "" ) + { + KMessageBox::error( this, i18n( "Please enter an user name." ) ); + return; + } + + //get application config object (kshowmailrc) + KConfig* config = KApplication::kApplication()->config(); + + config->setGroup( txtAccount->text() ); + + config->writeEntry( CONFIG_ENTRY_ACCOUNT_SERVER, txtServer->text() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PROTOCOL, cboProtocol->currentText().upper() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PORT, spbPort->value() ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_USER, txtUser->text() ); + + //get the password + //the class KPasswordEdit doesn't have a method to set the password + //therefore we use setText(). But if we use this method, KPasswordEdit::password() + //will return an empty string. If the user has typed in a new password, KPasswordEdit::password() + //will return the correct password + QString pass; + if( txtPassword->password() == "" || txtPassword->password() == QString::null ) + pass = txtPassword->text(); + else + pass = txtPassword->password(); + + //used to encrypt password + KURL url; + url.setUser( txtUser->text() ); + url.setHost( txtServer->text() ); + url.setPass( pass ); + + //save password (or not) + switch( grpPasswordStorage->selectedId() ) + { + case ID_BUTTON_PASSWORD_DONT_SAVE : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null ); + break; + case ID_BUTTON_PASSWORD_SAVE_FILE : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, crypt( url ) ); + break; + case ID_BUTTON_PASSWORD_SAVE_KWALLET : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null ); + KWalletAccess::savePassword( txtAccount->text(), pass ); + break; + default : config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD_STORAGE, CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ); + config->writeEntry( CONFIG_ENTRY_ACCOUNT_PASSWORD, QString::null ); + } + + config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, chkActive->isChecked() ); + + switch( grpSecureTransfer->selectedId() ) + { + case ID_BUTTON_SECTRANSFER_NONE : config->writeEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE ); break; + case ID_BUTTON_SECTRANSFER_SSL : config->writeEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL ); break; + case ID_BUTTON_SECTRANSFER_TLS : config->writeEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ); break; + default : config->writeEntry( CONFIG_ENTRY_ACCOUNT_SECTRANSFER, DEFAULT_ACCOUNT_SECTRANSFER ); break; + } + + //save config to file + config->sync(); + + //call slot of super class to close the dialog + KDialogBase::slotOk(); +} + +void ServerDialog::fillDialog( ) +{ + //check for valid account pointer + if( account == NULL ) + { + kdError() << "ServerDialog::fillDialog: invalid pointer to account item." << endl; + return; + } + + txtAccount->setText( account->getAccountName() ); + txtServer->setText( account->getHost() ); + + QString proto = account->getProtocol( true ); + bool tls = account->getTLS(); + + if( proto == "POP3S" ) + { + cboProtocol->setCurrentText( "POP3" ); + grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_SSL ); + } + else if( tls ) + { + cboProtocol->setCurrentText( proto ); + grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_TLS ); + } + else + { + cboProtocol->setCurrentText( proto ); + grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_NONE ); + } + + spbPort->setValue( account->getPort() ); + txtUser->setText( account->getUser() ); + + int type = account->getPasswordStorage(); + if( type != CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET ) + type = DEFAULT_ACCOUNT_PASSWORD_STORAGE; + + switch( type ) + { + case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_DONT_SAVE ); + txtPassword->setEnabled( false ); + txtPassword->clear(); + break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_FILE ); + txtPassword->setEnabled( true ); + txtPassword->setText( account->getPassword() ); + break; + case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_KWALLET : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_KWALLET ); + txtPassword->setEnabled( true ); + txtPassword->setText( account->getPassword() ); + break; + default : grpPasswordStorage->setButton( 1 ); + txtPassword->clear(); + } + + chkActive->setChecked( account->isActive() ); + + +} + +void ServerDialog::slotSecureTransferChanged( int id ) +{ + switch( id ) + { + case ID_BUTTON_SECTRANSFER_NONE : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; + case ID_BUTTON_SECTRANSFER_SSL : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3SSL ); break; + case ID_BUTTON_SECTRANSFER_TLS : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; + } +} + +#include "serverdialog.moc" diff --git a/kshowmail/serverdialog.h b/kshowmail/serverdialog.h new file mode 100644 index 0000000..2168003 --- /dev/null +++ b/kshowmail/serverdialog.h @@ -0,0 +1,168 @@ +/*************************************************************************** + serverdialog.h - description + ------------------- + begin : Sun Oct 28 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 SERVERDIALOG_H +#define SERVERDIALOG_H + +//Qt headers +#include +#include +#include +#include +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "configelem.h" +#include "constants.h" +#include "encryption.h" +#include "kwalletaccess.h" +#include + +//radio button IDs +#define ID_BUTTON_PASSWORD_DONT_SAVE 1 +#define ID_BUTTON_PASSWORD_SAVE_FILE 2 +#define ID_BUTTON_PASSWORD_SAVE_KWALLET 3 +#define ID_BUTTON_SECLOGIN_NONE 1 +#define ID_BUTTON_SECLOGIN_APOP 2 +#define ID_BUTTON_SECLOGIN_SASL 3 +#define ID_BUTTON_SECTRANSFER_NONE 1 +#define ID_BUTTON_SECTRANSFER_SSL 2 +#define ID_BUTTON_SECTRANSFER_TLS 3 + +/** + * @brief Dialog to edit account options. You can not create a new account or edit the account name. + * @author Eggert Ehmke + * @author Ulrich Weigelt + */ + +class ServerDialog : public KDialogBase +{ + Q_OBJECT + public: + + public: + + /** + * General constructor + * @param parent parent of the dialog + * @param item account to setup + */ + ServerDialog( QWidget* parent, ConfigElem* item = NULL ); + + /** + * Destructor + */ + ~ServerDialog(); + + private: + + /** + * account to setup + */ + ConfigElem* account; + + /** + * Edit line which contains the unique account name. + */ + KLineEdit* txtAccount; + + /** + * Edit line which contains the server name. + */ + KLineEdit* txtServer; + + /** + * Combo box to choose the protocol. + */ + KComboBox* cboProtocol; + + /** + * Spinbox to choose the tcp port. + */ + QSpinBox* spbPort; + + /** + * Edit line which contains the user name. + */ + KLineEdit* txtUser; + + /** + * Edit line which contains the password. + */ + KPasswordEdit* txtPassword; + + /** + * Check box to select whether the account is active or not. + */ + QCheckBox* chkActive; + + /** + * Combines the radio buttons of password storage. + */ + QButtonGroup* grpPasswordStorage; + + /** + * Combines the radio buttons of secure transfer. + */ + QButtonGroup* grpSecureTransfer; + + protected slots: + + /** + * Connected with the password button group. + * Enabled or disabled the password edit line. + * @param id button identifier + */ + void slotPasswordStorageChanged( int id ); + + /** + * Connected with the secure transfer button group. + * Changes the port number. + * @param id button identifier + */ + void slotSecureTransferChanged( int id ); + + /** + * Overwritten methode of KDialogBase. + * Called if OK was clicked. + * Stores the entered values into the given account item. + * If no item was given, it creates a new one. + * After then it invokes slotOk() of KDialogBase. + */ + void slotOk(); + + protected: + + /** + * Writes the values of the account into the dialog items. + */ + void fillDialog(); +}; + +#endif diff --git a/kshowmail/showheaderdialog.cpp b/kshowmail/showheaderdialog.cpp new file mode 100644 index 0000000..829fa98 --- /dev/null +++ b/kshowmail/showheaderdialog.cpp @@ -0,0 +1,52 @@ +// +// C++ Implementation: showheaderdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "showheaderdialog.h" + +ShowHeaderDialog::ShowHeaderDialog( QWidget * parent, QString & caption, QString & subject, QString header ) : + KDialogBase( parent, "showheaderdialog", true, caption, KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, true ) +{ + //create main widget + QWidget* mainWidget = new QWidget( this ); + setMainWidget( mainWidget ); + + //this layout seperates meta data area (subject) from the mail header area + QVBoxLayout* layMain = new QVBoxLayout( mainWidget, 0, spacingHint() ); + + //this layout arranges the labels and lines for the meta datas + QHBoxLayout* layMetaDatas = new QHBoxLayout( layMain, spacingHint() ); + + //create label for subject + QLabel* lblSubject = new QLabel( i18n( "Subject:" ), mainWidget, "lblSubject" ); + layMetaDatas->addWidget( lblSubject ); + + //create line edit for subject + KLineEdit* liSubject = new KLineEdit( subject, mainWidget, "liSubject" ); + liSubject->setReadOnly( true ); + layMetaDatas->addWidget( liSubject ); + + //create text edit for the header + KTextEdit* txtHeader = new KTextEdit( mainWidget ); + + txtHeader->setText( header ); + txtHeader->setMinimumSize( WIDTH_VIEW_MAILHEADER, HEIGHT_VIEW_MAILHEADER ); + + layMain->addWidget( txtHeader ); +} + + + +ShowHeaderDialog::~ShowHeaderDialog() +{ +} + + +#include "showheaderdialog.moc" diff --git a/kshowmail/showheaderdialog.h b/kshowmail/showheaderdialog.h new file mode 100644 index 0000000..c337c8b --- /dev/null +++ b/kshowmail/showheaderdialog.h @@ -0,0 +1,53 @@ +// +// C++ Interface: showheaderdialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef SHOWHEADERDIALOG_H +#define SHOWHEADERDIALOG_H + +//QT headers +#include +#include + +//KDE headers +#include +#include +#include +#include + +//KShowmail headers +#include "constants.h" + +/** + * Used in ShowRecordElem to show the mail header. + * + * @author Ulrich Weigelt + */ +class ShowHeaderDialog : public KDialogBase +{ +Q_OBJECT + + public: + /** + * Generic constructor. + * @param parent parent of the dialog + * @param caption the dialog caption + * @param subject mail subject + * @param header mail header + */ + ShowHeaderDialog( QWidget* parent, QString& caption, QString& subject, QString header ); + + /** + * Destructor + */ + ~ShowHeaderDialog(); +}; + +#endif diff --git a/kshowmail/showlistviewitem.cpp b/kshowmail/showlistviewitem.cpp new file mode 100644 index 0000000..e95ce94 --- /dev/null +++ b/kshowmail/showlistviewitem.cpp @@ -0,0 +1,114 @@ +/*************************************************************************** + showlistviewitem.cpp - description + ------------------- + begin : Son Apr 21 2002 + copyright : (C) 2002 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "showlistviewitem.h" + +ShowListViewItem::ShowListViewItem (QListView * parent, + ShowListViewItem* after): +QListViewItem (parent, after) +{} + +ShowListViewItem::ShowListViewItem( QListView * parent ) : + QListViewItem( parent ) +{ +} + +ShowListViewItem::~ShowListViewItem() +{} + +QString ShowListViewItem::key (int column, bool /*ascending*/) const +{ + switch (column) + { + case _colNumber: + return text (_colAccount) + text (_colNumber); + case _colDate: + return m_time; + default: + return text (column); + } +} + +/** + * reimplement compare to solve bug #856005 + * standard compare is locale dependant + */ +int ShowListViewItem::compare( QListViewItem *i, int col, + bool ascending ) const +{ + if( col == _colNumber ) + { + return text( _colNumber ).toInt() - i->text( _colNumber ).toInt(); + } + else if( col == _colSize ) + { + return text( _colSize ).toInt() - i->text( _colSize ).toInt(); + } + else + return key( col, ascending ).compare( i->key( col, ascending) ); +} + +void ShowListViewItem::setNumber (const QString& number) +{ + setText (_colNumber, number); +} + +void ShowListViewItem::setAccount(const QString& account) +{ + setText (_colAccount, account); +} + +void ShowListViewItem::setFrom(const QString& from) +{ + setText (_colFrom, from); +} + +void ShowListViewItem::setTo(const QString& to) +{ + setText (_colTo, to); +} + +void ShowListViewItem::setSubject(const QString& subject) +{ + setText (_colSubject, subject); +} + +void ShowListViewItem::setDate(const QString& date) +{ + setText (_colDate, date); +} + +void ShowListViewItem::setSize(const QString& size) +{ + setText (_colSize, size); +} + +void ShowListViewItem::setContent(const QString& content) +{ + setText (_colContent, content); +} + +void ShowListViewItem::setState(const QString& state) +{ + setText (_colState, state); +} + +void ShowListViewItem::setTime (const QString& time) +{ + m_time = time; +} + diff --git a/kshowmail/showlistviewitem.h b/kshowmail/showlistviewitem.h new file mode 100644 index 0000000..0f56f1b --- /dev/null +++ b/kshowmail/showlistviewitem.h @@ -0,0 +1,69 @@ +/*************************************************************************** + showlistviewitem.h - description + ------------------- + begin : Son Apr 21 2002 + copyright : (C) 2002 by Eggert Ehmke + email : eggert.ehmke@berlin.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 SHOWLISTVIEWITEM_H +#define SHOWLISTVIEWITEM_H + +#include + +/** + *@author Eggert Ehmke + */ + +class ShowListViewItem : public QListViewItem +{ +public: + + /** + * Constructor + * @param parent mail list view + * @param after insert the new item after this item + */ + ShowListViewItem (QListView * parent, ShowListViewItem * after); + + /** + * Constructor + * @param parent mail list view + */ + ShowListViewItem( QListView* parent ); + + + virtual ~ShowListViewItem(); + virtual QString key (int column, bool ascending) const; + /** + * reimplement compare to solve bug #856005 + * standard compare is locale dependant + */ + virtual int compare( QListViewItem *i, int col, bool ascending ) const; + void setNumber (const QString&); + void setAccount(const QString&); + void setFrom(const QString&); + void setTo(const QString&); + void setSubject(const QString&); + void setDate(const QString&); + void setSize(const QString&); + void setContent(const QString&); + void setState(const QString&); + void setTime (const QString&); + enum {_colNumber, _colAccount, _colFrom, _colTo, _colSubject, _colDate, + _colSize, _colContent, _colState}; +private: + QString m_time; +}; + + +#endif diff --git a/kshowmail/showmaildialog.cpp b/kshowmail/showmaildialog.cpp new file mode 100644 index 0000000..1d911db --- /dev/null +++ b/kshowmail/showmaildialog.cpp @@ -0,0 +1,101 @@ +// +// C++ Implementation: showmaildialog +// +// Description: +// +// +// Author: Ulrich Weigelt addWidget( lblSender ); + + QLabel* lblDate = new QLabel( i18n( "Date:" ), mainWidget, "lblDate" ); + layLabels->addWidget( lblDate ); + + QLabel* lblSize = new QLabel( i18n( "Size:" ), mainWidget, "lblSize" ); + layLabels->addWidget( lblSize ); + + QLabel* lblSubject = new QLabel( i18n( "Subject:" ), mainWidget, "lblSubject" ); + layLabels->addWidget( lblSubject ); + + //create edit lines to show the meta data + KLineEdit* liSender = new KLineEdit( sender, mainWidget, "liSender" ); + liSender->setReadOnly( true ); + layLines->addWidget( liSender ); + + KLineEdit* liDate = new KLineEdit( date, mainWidget, "liDate" ); + liDate->setReadOnly( true ); + layLines->addWidget( liDate ); + + KLineEdit* liSize = new KLineEdit( size, mainWidget, "liSize" ); + liSize->setReadOnly( true ); + layLines->addWidget( liSize ); + + KLineEdit* liSubject = new KLineEdit( subject, mainWidget, "liSubject" ); + liSubject->setReadOnly( true ); + layLines->addWidget( liSubject ); + + //create text browser for the mail body + KTextBrowser* txtBody = new KTextBrowser( mainWidget ); + txtBody->setReadOnly( true ); + + if( !allowHTML ) //set HTML view or not + txtBody->setTextFormat( KTextBrowser::PlainText ); + + txtBody->setText( body ); + txtBody->setMinimumSize( WIDTH_VIEW_MAILBODY, HEIGHT_VIEW_MAILBODY ); + + layMain->addWidget( txtBody ); + + //store body, subject and sender for reply (slotUser1()) + m_body = body; + m_subject = subject; + m_sender = sender; +} + +ShowMailDialog::~ShowMailDialog() +{ +} + +void ShowMailDialog::slotUser1( ) +{ + //make copy of body to manipulate + QString body = m_body; + + //add '>' at front of every line + body.insert( 0, "> " ); + body.replace( "\n", "\n> " ); + + //set data of the answer mail + KURL mail; + mail.setProtocol( "mailto" ); + mail.setPath( m_sender ); + mail.setQuery( "?subject=" + KURL::encode_string( "Re: " + m_subject ) + "&body=" + KURL::encode_string( body ) ); + + //invoke mailer + kapp->invokeMailer( mail ); +} + + +#include "showmaildialog.moc" diff --git a/kshowmail/showmaildialog.h b/kshowmail/showmaildialog.h new file mode 100644 index 0000000..39890b0 --- /dev/null +++ b/kshowmail/showmaildialog.h @@ -0,0 +1,90 @@ +// +// C++ Interface: showmaildialog +// +// Description: +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef SHOWMAILDIALOG_H +#define SHOWMAILDIALOG_H + +//QT headers +#include +#include + +//KDE headers +#include +#include +#include +#include +#include +#include +#include + +//KShowmail headers +#include "constants.h" + +/** + * This dialog is used in ConfigElem to show a downloaded mail. + * + * @author Ulrich Weigelt +*/ +class ShowMailDialog : public KDialogBase +{ + +Q_OBJECT + +public: + + /** + * generic constructor + * @param parent parent of the dialog + * @param caption the dialog caption + * @param allowHTML TRUE - allow the dialog to use the HTML in the mail body; FALSE - don't allow + * @param sender mail sender + * @param date date of send + * @param size mail size + * @param subject mail subject + * @param body mail body + */ + ShowMailDialog( QWidget* parent, QString& caption, bool allowHTML, QString& sender, QString& date, QString& size, QString& subject, QString& body ); + + /** + * Destructor + */ + ~ShowMailDialog(); + +private: + + /** + * mail subject + * Stored by constructor and used by slotUser1. + */ + QString m_subject; + + /** + * mail body + * Stored by constructor and used by slotUser1. + */ + QString m_body; + + /** + * mail sender + * Stored by constructor and used by slotUser1. + */ + QString m_sender; + + /** + * Overloaded methode of KDialogBase. + * Will be invoked, when reply button was clicked. + * Starts the composer of the preset mail application which contains + * the necessary data for a reply. + */ + void slotUser1(); +}; + +#endif diff --git a/kshowmail/showrecord.cpp b/kshowmail/showrecord.cpp new file mode 100644 index 0000000..b5df70a --- /dev/null +++ b/kshowmail/showrecord.cpp @@ -0,0 +1,669 @@ +/*************************************************************************** + showrecord.cpp - description + ------------------- + begin : Mon Dec 3 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "showrecord.h" + +int const ShowRecord::continueShowHeaders( 0 ); +int const ShowRecord::cancelShowHeaders( 1 ); + +ShowRecord::ShowRecord() +{ + //set auto delete to true. This is a function of the parent class, which deletes + //all items when the list is deleted or cleared. + setAutoDelete( true ); +} + +ShowRecord::~ShowRecord() +{ +} + +void ShowRecord::saveOptions( QDomDocument& doc, QDomElement& parent ) +{ + //Loop over all mail items + for( ShowRecordElem* pElem = first(); pElem; pElem = next() ) + { + //call the method of the mail to save it + pElem->saveOptions( doc, parent ); + } +} + +void ShowRecord::readStoredMails( QDomElement& parent ) +{ + //clear the list + clear(); + + //get first DOM node (mail) + QDomNode n = parent.firstChild(); + + //iterate over all mail items stored in the given account + while( !n.isNull() ) + { + //get element of the current node + QDomElement e = n.toElement(); + + //create mail object + ShowRecordElem* pElem = new ShowRecordElem(); + + //store the currently read mail data in the new object + pElem->readOptions( e ); + + //store the new mail object in this list + append( pElem ); + + //get next DOM node + n = n.nextSibling(); + } +} + +bool ShowRecord::hasSelectedMails( ) +{ + bool selected = false; //TRUE when a selected mail was found + ShowRecordElem* mail; //mail which we want to check + + //get first mail + mail = first(); + + //iterate over all mails until we have found a selected mail + while( mail != NULL && !selected ) + { + //check the current mail + selected = mail->isSelected(); + + //get next mail + mail = next(); + } + + return selected; +} + +MailNumberList_Type ShowRecord::getSelectedMails( ) +{ + MailNumberList_Type list; //contains the numbers of selected mails + ShowRecordElem* mail; //mail from which we want to get the number (if selected) + QPtrListIterator it( *this ); //iterator for the mail list + + //iterate over all mails + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if current mail is selected append its number to the mail number list + if( mail->isSelected() ) + list.append( mail->number() ); + } + + return list; +} + +void ShowRecord::removeMail( int number ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, remove it + if( mail->number() == number ) + remove( mail ); + } +} + +QStringList ShowRecord::getSelectedSubjects( ) const +{ + QStringList subjects; //contains the subjects + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + + //iterate over all mails + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if the mail is selected, append subject to list + if( mail->isSelected() ) + subjects.append( mail->subject() ); + } + + return subjects; +} + +QString ShowRecord::getSenderOf( int number ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString sender; //sender of the wanted mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, remove it + if( mail->number() == number ) + { + sender = mail->from(); + found = true; + } + } + return sender; +} + +QString ShowRecord::getDateOf( int number ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString date; //sent date of the wanted mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, remove it + if( mail->number() == number ) + { + date = mail->date(); + found = true; + } + } + return date; + +} + +QString ShowRecord::getSizeOf( int number ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString size; //size of the wanted mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, remove it + if( mail->number() == number ) + { + size = mail->strSizePrefix(); + found = true; + } + } + return size; + +} + +QString ShowRecord::getSubjectOf( int number ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString subject; //subject of the wanted mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, get the subject + if( mail->number() == number ) + { + subject = mail->subject(); + found = true; + } + } + return subject; + +} + +QString ShowRecord::decodeMailBody( QByteArray body, int number, bool preferHTML ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString mailbody; //decoded mail + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, decode the mail + if( mail->number() == number ) + { + mailbody = mail->decodeMailBody( body, preferHTML ); + found = true; + } + } + return mailbody; + +} + +bool ShowRecord::hasMail( QString uid ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //compare the uid + if( mail->uidl() == uid ) + { + found = true; + } + } + return found; +} + +void ShowRecord::appendNewMail( int number, QString uid, bool isNew ) +{ + //create new mail + ShowRecordElem* newMail = new ShowRecordElem( number, uid, isNew ); + + //append new mail + if( newMail != NULL ) + append( newMail ); +} + +void ShowRecord::printMailList( ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + + while( ( mail = it.current() ) ) + { + //increment iterator to next mail + ++it; + + //print mail + cout << mail->number() << " - UID: " << mail->uidl() << "; Size: " << mail->size() << "; Subject: " << mail->subject() << "; New: " << mail->isNew() << endl; + } + +} + +void ShowRecord::setSize( int number, long size ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, decode the mail + if( mail->number() == number ) + { + mail->setSize( size ); + found = true; + } + } +} + +Types::MailNumberList_Type ShowRecord::getNewMails( ) +{ + MailNumberList_Type list; //contains the numbers of the new mails + ShowRecordElem* mail; //mail from which we want to get the number (if new) + QPtrListIterator it( *this ); //iterator for the mail list + + //iterate over all mails + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if current mail is new append its number to the mail number list + if( mail->isNew() ) + list.append( mail->number() ); + } + + return list; +} + +void ShowRecord::setHeader( int number, QString header ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, set the header + if( mail->number() == number ) + { + mail->setHeader( header ); + found = true; + } + } +} + +QStringList ShowRecord::getUIDsOfOldMails( ) +{ + QStringList list; //contains the UIDs of the old mails + ShowRecordElem* mail; //mail from which we want to get the uid (if old) + QPtrListIterator it( *this ); //iterator for the mail list + + //iterate over all mails + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if current mail is new append its number to the mail number list + if( !mail->isNew() ) + list.append( mail->uidl() ); + } + + return list; +} + +QString ShowRecord::getHeaderOf( QString uid ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + QString header; //header of the wanted mail + + //looking for the mail with the UID 'uid' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given uid, get the header + if( mail->uidl() == uid ) + { + header = mail->header(); + found = true; + } + } + return header; +} + +void ShowRecord::setHeader( QString uid, QString header ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the UID 'uid' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given UID, set the header + if( mail->uidl() == uid ) + { + mail->setHeader( header ); + found = true; + } + } +} + +int ShowRecord::getNumberNewMails( ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + int number = 0; //number of new mails + + while( ( mail = it.current() ) ) + { + //increment iterator to next mail + ++it; + + //increment number, if this mail is new + if( mail->isNew() ) + number++; + } + + return number; +} + +int ShowRecord::getNumberMails( ) +{ + return count(); +} + +long ShowRecord::getTotalSize( ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + long size = 0; //total size of all mails + + while( ( mail = it.current() ) ) + { + //increment iterator to next mail + ++it; + + size += mail->size(); + } + + return size; +} + +void ShowRecord::fillMailListView( KshowmailView * view, QString & account ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + + //iterate over all mails and order the mail to create a list view item + while( ( mail = it.current() ) ) + { + //increment iterator to next mail + ++it; + + //insert list view item + QString number = QString( "%1" ).arg( mail->number() ); + QString from = mail->from(); + QString to = mail->to(); + QString subject = mail->subject(); + QString date = mail->date(); + QString size = QString( "%1" ).arg( mail->size() ); + QString content = mail->content(); + QString state = mail->state(); + QString time = mail->strUnixTime(); + mail->setViewItem( view->insertMail( number, account, from, to, subject, date, size, content, state, time ) ); + } + +} + +int ShowRecord::showSelectedHeaders( QString& account ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + int showNextHeader = ShowRecordElem::continueShowHeaders; //return value of ShowRecordElem::showHeader() + + while( ( mail = it.current() ) && showNextHeader == ShowRecordElem::continueShowHeaders ) + { + //increment iterator to next mail + ++it; + + //order the mail to show its header + if( mail->isSelected() ) + showNextHeader = mail->showHeader( account ); + } + + return showNextHeader == ShowRecordElem::continueShowHeaders ? ShowRecord::continueShowHeaders : ShowRecord::cancelShowHeaders; +} + +bool ShowRecord::isNew( QString uid ) const +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + bool newMail = false; //at time we have not found it, therefore the return value is false + + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //compare the uid + if( mail->uidl() == uid ) + { + found = true; + newMail = mail->isNew(); + } + } + + return newMail; +} + +void ShowRecord::applyHeaderFilter( HeaderFilter * filter, QString account, MailNumberList_Type& deleteList, MailToDownloadMap_Type& downloadList, int& nmbIgnoredMails, FilterLog* log ) +{ + + MailNumberList_Type mailsToIgnore; //this list holds the numbers of all mails, which shall be ignored + + //Loop over all mails in this list + for( ShowRecordElem* pElem = first(); pElem; pElem = next() ) + { + //apply the filters to the current mail + QString mailbox; + FilterAction_Type action = pElem->applyHeaderFilter( filter, account, mailbox, log ); + + //do recommend action + //we don't need to do everything for action MARK, because ShowRecordElem::applyHeaderFilter() marks the mail entry itself + struct DownloadActionParams_Type params; + switch( action ) + { + case FActDelete : deleteList.append( pElem->number() ); break; + case FActMove : params.action = FActMove; + params.mailbox = mailbox; + downloadList.insert( pElem->number(), params ); + break; + case FActIgnore : mailsToIgnore.append( pElem->number() ); break; + case FActSpamcheck : params.action = FActSpamcheck; + downloadList.insert( pElem->number(), params ); + default : break; + } + } + + //remove all mails which shall be ignored from the mail list + nmbIgnoredMails = mailsToIgnore.count(); + MailNumberList_Type::iterator it; + for ( it = mailsToIgnore.begin(); it != mailsToIgnore.end(); ++it ) + removeMail( *it ); + + +} + +void ShowRecord::writeToMoveLog( FilterLog * log, int number, QString account, QString mailbox ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, set the header + if( mail->number() == number ) + { + mail->writeToMoveLog( log, account, mailbox ); + found = true; + } + } +} + +void ShowRecord::writeToDeleteLog( FilterLog * log, int number, QString account ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, set the header + if( mail->number() == number ) + { + mail->writeToDeleteLog( log, account ); + found = true; + } + } +} + +void ShowRecord::setMarkAtNextViewRefresh( int number ) +{ + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + bool found = false; //True, when the wanted mail was found + + //looking for the mail with the number 'number' + while( ( mail = it.current() ) != NULL && !found ) + { + //increment iterator to next mail + ++it; + + //if the current mail has the given number, set the header + if( mail->number() == number ) + { + mail->setMarkAtNextViewRefresh(); + found = true; + } + } +} + +QStringList ShowRecord::getSelectedSenders( ) const +{ + QStringList senders; //contains the senders + QPtrListIterator it( *this ); //iterator for the mail list + ShowRecordElem* mail; //current mail + + //iterate over all mails + while( ( mail = it.current() ) != NULL ) + { + //increment iterator to next mail + ++it; + + //if the mail is selected, append subject to list + if( mail->isSelected() ) + senders.append( mail->from() ); + } + + return senders; +} diff --git a/kshowmail/showrecord.h b/kshowmail/showrecord.h new file mode 100644 index 0000000..db783f2 --- /dev/null +++ b/kshowmail/showrecord.h @@ -0,0 +1,314 @@ +/*************************************************************************** + showrecord.h - description + ------------------- + begin : Mon Dec 3 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 SHOWRECORD_H +#define SHOWRECORD_H + +//C++ header +#include + +//Qt headers +#include +#include + +//KDE headers +#include +#include + +//KShowmail headers +#include "kshowmailview.h" +#include "showrecordelem.h" +#include "types.h" +#include "headerfilter.h" +#include "filterlog.h" + +using namespace Types; +using namespace std; + +//forward class declarations +class ShowRecordElem; +class KshowmailView; + +/** + * @short List which contains all mails of an account. + * + * The mails are objects of ShowRecordElem. + * Inherits QPtrList. + * + * @see ShowRecordElem + * @author Eggert Ehmke + * @author Ulrich Weigelt + */ +class ShowRecord: public QPtrList +{ + + public: + + /** + * Returned by showSelectedHeaders() if the user has + * always clicked OK. + */ + static const int continueShowHeaders; + + /** + * Returned by showSelectedHeaders() if the user has + * clicked Cancel. + */ + static const int cancelShowHeaders; + + /** + * Constructor + */ + ShowRecord(); + + /** + * Destructor + * Does nothing. + */ + ~ShowRecord(); + + /** + * Saves all stored mails into the given DOM document inside the + * given account element. + * @param doc DOM document in that all options are stored + * @param parent account element + */ + void saveOptions( QDomDocument& doc, QDomElement& parent ); + + /** + * Reads out all mails stored inside the given account element, + * creates objects from class ShowRecordElem and stores them in + * this list. All old items will be removed. + * @param parent account element (DOM element) + */ + void readStoredMails( QDomElement& parent ); + + /** + * Apply the filters to the mails in this list. + * @param filter pointer to the header filter + * @param account name of this account + * @param deleteList reference to a list in which this methode writes the numbers of mails to delete + * @param downloadList reference to a list in which this methode writes the number of mails to download + * @param nmbIgnoredMails reference to an integer in which it writes the number of ignored mails + * @param log pointer to the filter log + */ + void applyHeaderFilter( HeaderFilter* filter, QString account, MailNumberList_Type& deleteList, MailToDownloadMap_Type& downloadList, int& nmbIgnoredMails, FilterLog* log = NULL ); + + + /** + * Returns whether there are mails in this list which are selected + * in the list view. + * @return TRUE - there are selected mails + * @return FALSE - there aren't selected mails + */ + bool hasSelectedMails(); + + /** + * Returns the numbers of all selected mails. + * @return numbers of selected mails. + */ + Types::MailNumberList_Type getSelectedMails(); + + /** + * Removes the mail which has the given number. + * @param number number of the mail which will be removed + */ + void removeMail( int number ); + + /** + * Returns the subjects of the selected mails. + * @return subjects of selected mails + */ + QStringList getSelectedSubjects() const; + + /** + * Returns the sender of the mail with the given number. + * @param number mail number + * @return sender + */ + QString getSenderOf( int number ) const; + + /** + * Returns the date of sent of the mail with the given number. + * @param number mail number + * @return date + */ + QString getDateOf( int number ) const; + + /** + * Returns the size of the mail with the given number. + * @param number mail number + * @return size + */ + QString getSizeOf( int number ) const; + + /** + * Returns the subject of the mail with the given number. + * @param number mail number + * @return subject + */ + QString getSubjectOf( int number ) const; + + /** + * Decodes the given mail body by the appropriate mail object. + * The mail object (ShowRecordElem) has to do this job, because + * it has stored the mail header and therefore it knows the content + * type and encoding of the mail. + * It decodes just the text or html part of the body. The rest of it + * will be rejected. + * @param body the encoded mail (including header) + * @param number number of the downloaded mail + * @param preferHTML decode HTML part if present + * @return decoded mail body + */ + QString decodeMailBody( QByteArray body, int number, bool preferHTML ) const; + + /** + * Returns whether there is mail with the given uid in the list. + * @param uid UID of the mail + * @return TRUE - mail is in the list + * @return FALSE - mail is not in the list + */ + bool hasMail( QString uid ); + + /** + * Returns whether the given mail is new. + * @param uid UID of the mail + * @return TRUE - mail is new + * @return FALSE - mail is not new or mail doesn't exist + */ + bool isNew( QString uid ) const; + + /** + * Appends a new mail to the list. + * @param number number of the mail on the server + * @param uid Unique ID of the mail + * @param isNew TRUE - mail is new; FALSE - mail is not new + */ + void appendNewMail( int number, QString uid, bool isNew ); + + /** + * Just for debugging. + * Prints a list of all contained mails to stdout. + */ + void printMailList(); + + /** + * Sets the size of a mail. + * @param number number of the mail + * @param size mail size + */ + void setSize( int number, long size ); + + /** + * Returns the numbers of mails which are marked as new. + * @return numbers of the new mails + */ + Types::MailNumberList_Type getNewMails(); + + /** + * Sets the header of the given mail. + * @param number number of the mail + * @param header the header + */ + void setHeader( int number, QString header ); + + /** + * Returns a list of the UIDs of all old mails. + * @return UIDs of all old mails + */ + QStringList getUIDsOfOldMails(); + + /** + * Returns the header of the mail with the given UID. + * @param uid UID + * @return mail header + */ + QString getHeaderOf( QString uid ); + + /** + * Sets the header of the mail with the given UID. + * @param uid UID + * @param header mail header + */ + void setHeader( QString uid, QString header ); + + /** + * Returns the number of new mails. + * @return number of new mails + */ + int getNumberNewMails(); + + /** + * Returns the number of mails. + * @return number of mails + */ + int getNumberMails(); + + /** + * Returns the total size of all mails. + * @return total size + */ + long getTotalSize(); + + /** + * Creates for every mail a list view item and insert it + * into the mail list view. + * @param view pointer to the application view + * @param account account name + */ + void fillMailListView( KshowmailView* view, QString& account ); + + /** + * Shows the headers of all selected mails. + * @param account account name + * @return continueShowHeaders - the user has always clicked OK. The invoking function will show the next header + * @return cancelShowHeaders - the user has clicked Cancel. The invoking function will not show the next header. + */ + int showSelectedHeaders( QString& account ); + + /** + * Writes the mail into the Move Log. + * @param log pointer to the log + * @param number number of the mail + * @param account name of the account + * @param mailbox name of the mailbox + */ + void writeToMoveLog( FilterLog* log, int number, QString account, QString mailbox ); + + /** + * Writes the mail into the Delete Log. + * @param log pointer to the log + * @param number number of the mail + * @param account name of the account + */ + void writeToDeleteLog( FilterLog* log, int number, QString account ); + + /** + * The given mail will be marked at the next view refresh. + * @param number number of the mail + */ + void setMarkAtNextViewRefresh( int number ); + + /** + * Returns the senders of the selected mails + * @return senders of the selected mails + */ + QStringList getSelectedSenders() const; +}; + +#endif diff --git a/kshowmail/showrecordelem.cpp b/kshowmail/showrecordelem.cpp new file mode 100644 index 0000000..63f5157 --- /dev/null +++ b/kshowmail/showrecordelem.cpp @@ -0,0 +1,632 @@ +/*************************************************************************** + showrecord.cpp - description + ------------------- + begin : Thu Dec 28 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + + + + +#include "showrecordelem.h" + +int const ShowRecordElem::continueShowHeaders( 0 ); +int const ShowRecordElem::cancelShowHeaders( 1 ); + +ShowRecordElem::ShowRecordElem () +{ + //set default values + m_from = "???"; + m_subject = "???"; + m_size = 0; + m_pItem = NULL; + m_new = false; + markAtViewRefresh = false; +} + +ShowRecordElem::ShowRecordElem( int number, QString& uid, bool isNew ) +{ + //set default values + m_from = "???"; + m_subject = "???"; + m_size = 0; + m_pItem = NULL; + markAtViewRefresh = false; + + //set given values + m_nNumber = number; + m_uid = uid; + m_new = isNew; +} + + +QCString ShowRecordElem::scanHeader( const QString& item ) const +{ + QCString headerline( "" ); //found header line + + //get e.g. the "From:" line, starting with cr,lf,"From:" and ending + //with a carriage return + + //build the search string + QString searchstring( QString( "\r\n%1:" ).arg( item ) ); + + //searching... + int pos1 = m_header.find( searchstring, 0, FALSE ); + int pos2 = m_header.find( '\r', pos1 + 2 ); + + //cut out the interesting content, if we have found a matching line + //if we have found nothing, the returned string will be "" + if( pos1 >= 0 ) + { + headerline = m_header.mid( pos1 + searchstring.length(), pos2 - pos1 - searchstring.length() ); + } + + return headerline; +} + +void ShowRecordElem::setHeader( const QString& header ) +{ + //store given header + m_header = header.ascii(); + + //extract sender and store it + QCString from = scanHeader( "From" ); + from = from.simplifyWhiteSpace(); + setFrom( from ); + + //extract addressee and store it + QCString to = scanHeader( "To" ); + to = to.simplifyWhiteSpace(); + setTo (to); + + //extract subject and store it + QCString subject = scanHeader( "Subject" ); + subject = subject.simplifyWhiteSpace(); + setSubject( subject ); + + //extract date and store it + QCString date = scanHeader( "Date" ); + setDate( date ); + + //extract content type + QCString content = scanHeader( "Content-Type" ); + content = content.simplifyWhiteSpace (); + + //remove the stuff after the content type; see RFC 2045 + int posSemicolon = content.find( ';' ); + if( posSemicolon != -1 ) + { + content.remove( posSemicolon, content.length() - posSemicolon ); + } + + //store content type + setContent (content); +} + +void ShowRecordElem::setDate( const QCString& date ) +{ + DwDateTime dwDate; //this class represents an RFC-822 date-time; + //see mimelib/datetime.h + + //convert and store the date-time + dwDate.FromString( date ); + dwDate.Parse(); + m_unixDate.setTime_t( dwDate.AsUnixTime() ); +} + +QString ShowRecordElem::from() const +{ + return Codecs::decodeRFC2047( m_from ); +} + +QString ShowRecordElem::to() const +{ + return Codecs::decodeRFC2047( m_to ); +} + +QString ShowRecordElem::subject() const +{ + return Codecs::decodeRFC2047( m_subject ); +} + +QString ShowRecordElem::date() const +{ + return KGlobal::locale()->formatDateTime( m_unixDate, true, true ); +} + +QString ShowRecordElem::strUnixTime() const +{ + return m_unixDate.toString( Qt::ISODate ); +} + +QString ShowRecordElem::strSize() const +{ + return QString( "%1" ).arg( m_size, 8 ); +} + +QString ShowRecordElem::state() const +{ + if( m_new ) + return i18n( "new" ); + else + return i18n( "old" ); +} + +void ShowRecordElem::saveOptions( QDomDocument& doc, QDomElement& parent ) +{ + //build item tag of this mail( with mail number) + QString hdr = QString( ITEM_MESSAGE ); + hdr.append( "%1" ); + hdr = hdr.arg( m_nNumber ); + + //create a new element and store the mail meta data in it + QDomElement elem = doc.createElement( hdr ); + elem.setAttribute( ATTRIBUTE_MAIL_NUMBER, m_nNumber ); + elem.setAttribute( ATTRIBUTE_MAIL_SIZE, m_size ); + elem.setAttribute( ATTRIBUTE_MAIL_UID, m_uid ); + + //create a sub element for the mail header in store the header in it + QDomElement subelem = doc.createElement( ITEM_MAIL_HEADER ); + subelem.appendChild( doc.createTextNode( m_header ) ); + + //add header element to the mail element + elem.appendChild( subelem ); + + //add mail element to the account (parent) element + parent.appendChild( elem ); +} + +void ShowRecordElem::readOptions( QDomElement& elem ) +{ + //get number, size and uid + setNumber( elem.attribute( ATTRIBUTE_MAIL_NUMBER ).toInt() ); + setSize( elem.attribute( ATTRIBUTE_MAIL_SIZE ).toInt() ); + setUIDL( elem.attribute( ATTRIBUTE_MAIL_UID ) ); + + //search for the header item and read it + QDomElement subelem = elem.namedItem( ITEM_MAIL_HEADER ).toElement(); + setHeader( subelem.text() ); + + //the mail is not new + setNew( false ); +} + + +void ShowRecordElem::setFrom( const QCString & from ) +{ + m_from = from; +} + +void ShowRecordElem::setTo( const QCString & to ) +{ + m_to = to; +} + +void ShowRecordElem::setSubject( const QCString & subject ) +{ + m_subject = subject; +} + +void ShowRecordElem::setContent( const QCString& content ) +{ + m_content = content; +} + +QString ShowRecordElem::header( ) const +{ + return QString( m_header ); +} + +void ShowRecordElem::setUIDL( const QString & uid ) +{ + m_uid = uid; +} + +QString ShowRecordElem::uidl( ) const +{ + return m_uid; +} + +void ShowRecordElem::setSize( int size ) +{ + m_size = size; +} + +int ShowRecordElem::size( ) const +{ + return m_size; +} + +void ShowRecordElem::setNew( bool isnew ) +{ + m_new = isnew; +} + +bool ShowRecordElem::isNew( ) const +{ + return m_new; +} + +void ShowRecordElem::setNumber( int n ) +{ + m_nNumber = n; +} + +int ShowRecordElem::number( ) const +{ + return m_nNumber; +} + +QString ShowRecordElem::content( ) const +{ + return m_content; +} + +void ShowRecordElem::setViewItem( ShowListViewItem* item ) +{ + m_pItem = item; + + //marks the new entry if recommend by the filter + if( markAtViewRefresh ) + { + //mark entry + item->setSelected( true ); + + //delete flag + markAtViewRefresh = false; + } +} + +ShowListViewItem * ShowRecordElem::viewItem( ) const +{ + return m_pItem; +} + +bool ShowRecordElem::isSelected( ) const +{ + if( m_pItem != NULL ) + return m_pItem->isSelected(); + else + return false; +} + +QString ShowRecordElem::strSizePrefix( ) const +{ + QString size; + + if( m_size >= 1024 * 1024 ) + { + //prefix is mega + size = QString( "%L1M" ).arg( ( (double)m_size / ( 1024 * 1024 ) ), 0, 'f', 1 ); + } + else if( m_size >= 1024 ) + { + //prefix is kilo + size = QString( "%L1K" ).arg( ( (double)m_size / 1024 ), 0, 'f', 1 ); + } + else + //no prefix + size = QString( "%L1" ).arg( m_size ); + + return size; +} + +QString ShowRecordElem::decodeMailBody( QByteArray body, bool preferHTML ) const +{ + QString charset; //charset of the content + QString encoding; //content transfer encoding + + //cast given body to a QCString + //class QCString needs a null terminated char array to create + //an object. Therefore we append an null byte to the given mail body + body.resize( body.size() + 1 ); + body[ body.size() - 1 ] = '\0'; + QCString strBody( (char *)body.data() ); + + //normalize line ends; remove all \r characters + for( uint i = 0; i < strBody.size(); i++ ) + if( strBody[ i ] == '\r' ) + strBody.remove( i, 1 ); + + //get boundary that is separating the parts of a multipart message + //if the header doesn't contain a boundary attribute, this messsage + //has just one part + QString boundary = getBoundary(); + + //process body subject to it is a multipart messsage or not + if( boundary == "" ) + { + //the message has just one body part + + //get the position of the first blank line + int posBlankLine = strBody.find( "\n\n" ); + + //truncate body; the found blank line is separating the + //header from the message + strBody = strBody.mid( posBlankLine + 2 ); + if( !strBody.isEmpty() ) //fixed bug 1773636 + while( strBody[ 0 ] == '\n') + strBody.remove( 0, 1 ); + + + //get charset of the message; it is behind the + //content type attribute in the header + charset = getCharset(); + + //get transfer encoding type from the header + encoding = getTransferEncoding(); + } + else + { + //the message has multiple parts + + //get positions of a plain text and html flag (value of the content type attribute) + int posPlainFlag = strBody.find( "text/plain", 0, false ); + int posHTMLFlag = strBody.find( "text/html", 0, false ); + + //just decode the body, if a plain text or a HTML part is available + if( posPlainFlag != -1 || posHTMLFlag != -1 ) + { + //do we want to take the HTML part? + bool hasHTML = posHTMLFlag != -1; + bool takeHTML = ( hasHTML && preferHTML ) || posPlainFlag == -1; + + //now we want to extract the designated part + //While the (truncated) mail text (or the header at the first pass) + //contains a boundary attribute we will extract the designated part + //between the boundaries + int posInside; //a position inside the designated part + while( boundary != "" ) + { + //get a position inside the designated part + if( takeHTML ) + posInside = strBody.find( "text/html", 0, false ); + else + posInside = strBody.find( "text/plain", 0, false ); + + //get length of the boundary + int lengthBoundary = boundary.length(); + + //calculate the begin and end of the part to extract + int beginPart = strBody.findRev( boundary.ascii(), posInside ) + lengthBoundary + 1; + int lengthPart = strBody.findRev( '\n', strBody.find( boundary.ascii(), posInside ) ) - beginPart; + + strBody = strBody.mid( beginPart, lengthPart ); + + //looking for a further boundary attribute + //get the position of the first occurance of "boundary=" + int posBoundary = strBody.find( "boundary=", 0, false ); + + if( posBoundary >= 0 ) + { + //calculate positon of the first quote + int posFirstQuote = posBoundary + 9; + + //get the position of closing quote + int posSecondQuote = strBody.find( '"', posFirstQuote + 1 ); + + //get boundary string + boundary.append( strBody.mid( posFirstQuote + 1, posSecondQuote - posFirstQuote - 1 ) ); + } + else + boundary = ""; + } + + //now we get charset and transfer encoding if available in the extracted + //part + + //get the position of the first occurance of "charset=" + int posCharset = strBody.find( "charset=", 0, false ); + + //continue, if a charset attribute was found + if( posCharset >= 0 ) + { + //calculate positon of the value + int posBeginValue = posCharset + 8; + + //get end of the value + int posEndValue = strBody.find( '\n', posBeginValue ) - 1; + + //get charset + charset.append( strBody.mid( posBeginValue, posEndValue - posBeginValue + 1 ) ); + + //remove quotes + charset.remove( '"' ); + //remove all content after the first semicolon (inclusive) + int posSemicolon = charset.find( ';' ); + charset = charset.left( posSemicolon ); + } + + //get the position of the first occurance of "charset=" + int posEncoding = strBody.find( "Content-Transfer-Encoding:", 0, false ); + + //continue, if a charset attribute was found + if( posEncoding >= 0 ) + { + //calculate positon of the value + int posBeginValue = posEncoding + 26; + + //get end of the value + int posEndValue = strBody.find( '\n', posBeginValue ) - 1; + + //get charset + encoding.append( strBody.mid( posBeginValue, posEndValue - posBeginValue + 1 ) ); + + //remove quotes and spaces + encoding = encoding.stripWhiteSpace(); + encoding.remove( '"' ); + } + + //cut off the part header; the found blank line is separating the + //part header from the message + if( posCharset != -1 || posEncoding != -1 ) + { + int posBlankLine = strBody.find( "\n\n" ); + strBody = strBody.mid( posBlankLine + 2 ); + if( !strBody.isEmpty() ) //fixed bug 1773636 + while( strBody[ 0 ] == '\n') + strBody.remove( 0, 1 ); + } + } + } + + //Good things come to those who wait. We have extract the message. + //Now we have to decode the message, if it is encoded + if( encoding == "quoted-printable" && !strBody.isEmpty() ) //fixed bug 1773636 + { + strBody = KCodecs::quotedPrintableDecode( strBody ); + } + + return QString( strBody ); +} + +QString ShowRecordElem::getBoundary( ) const +{ + QString boundary; + + //check, whether it is a multipart message + if( m_content.contains( "multipart", false ) ) + { + //it is a multipart message + + //get the position of the first occurance of "boundary=" + int posBoundary = m_header.find( "boundary=", 0, false ); + + //continue, if a boundary attribute was found + if( posBoundary >= 0 ) + { + //calculate positon of the first quote + int posFirstQuote = posBoundary + 9; + + //get the position of closing quote + int posSecondQuote = m_header.find( '"', posFirstQuote + 1 ); + + //get boundary string + boundary.append( m_header.mid( posFirstQuote + 1, posSecondQuote - posFirstQuote - 1 ) ); + } + } + + return boundary; +} + +QString ShowRecordElem::getCharset( ) const +{ + QString charset; + + //get the position of the first occurance of "charset=" + int posCharset = m_header.find( "charset=", 0, false ); + + //continue, if a charset attribute was found + if( posCharset >= 0 ) + { + //calculate positon of the value + int posBeginValue = posCharset + 8; + + //get end of the value + int posEndValue = m_header.find( '\r', posBeginValue ) - 1; + + //get charset + charset.append( m_header.mid( posBeginValue, posEndValue - posBeginValue + 1 ) ); + + //remove quotes + charset.remove( '"' ); + //remove all content after the first semicolon (inclusive) + int posSemicolon = charset.find( ';' ); + charset = charset.left( posSemicolon ); + } + + return QString( charset ); +} + +QString ShowRecordElem::getTransferEncoding( ) const +{ + QString encoding; + + //get the position of the first occurance of "charset=" + int posEncoding = m_header.find( "Content-Transfer-Encoding:", 0, false ); + + //continue, if a charset attribute was found + if( posEncoding >= 0 ) + { + //calculate positon of the value + int posBeginValue = posEncoding + 26; + + //get end of the value + int posEndValue = m_header.find( '\r', posBeginValue ) - 1; + + //get charset + encoding.append( m_header.mid( posBeginValue, posEndValue - posBeginValue + 1 ) ); + + //remove quotes and spaces + encoding = encoding.stripWhiteSpace(); + encoding.remove( '"' ); + } + + return QString( encoding ); + +} + +int ShowRecordElem::showHeader( QString& account ) +{ + //show header + QString tsubject = subject(); + QString tmailheader = header(); + + //create and open the window + ShowHeaderDialog dlg( kapp->mainWidget(), account, tsubject, tmailheader ); + int ret = dlg.exec(); + + //returns the matching value + return ret == QDialog::Accepted ? ShowRecordElem::continueShowHeaders : ShowRecordElem::cancelShowHeaders; +} + +FilterAction_Type ShowRecordElem::applyHeaderFilter( HeaderFilter* filter, QString account, QString& mailbox, FilterLog* log ) +{ + FilterAction_Type action = filter->check( from(), to(), size(), subject(), header(), account, mailbox ); + + //if the action is MARK, the related view entry shall be marked at the next view refresh + if( action == FActMark ) markAtViewRefresh = true; + + //if the action is DELETE, we add a entry to the log + if( log == NULL ) + kdError( "ShowRecordElem::applyHeaderFilter: Pointer to the filter log is NULL. Can't write to log." ); + if( action == FActDelete && log != NULL ) + log->addDeletedMail( sentDateTime(), from(), account, subject() ); + if( action == FActMove && log != NULL ) + log->addMovedMail( sentDateTime(), from(), account, subject(), mailbox ); + + + return action; +} + +QDateTime ShowRecordElem::sentDateTime() const +{ + return m_unixDate; +} + +void ShowRecordElem::writeToMoveLog( FilterLog * log, QString account, QString mailbox ) +{ + log->addMovedMail( sentDateTime(), from(), account, subject(), mailbox ); +} + +void ShowRecordElem::writeToDeleteLog( FilterLog * log, QString account ) +{ + log->addDeletedMail( sentDateTime(), from(), account, subject() ); +} + +void ShowRecordElem::setMarkAtNextViewRefresh( ) +{ + markAtViewRefresh = true; +} + + diff --git a/kshowmail/showrecordelem.h b/kshowmail/showrecordelem.h new file mode 100644 index 0000000..3d5e9f6 --- /dev/null +++ b/kshowmail/showrecordelem.h @@ -0,0 +1,447 @@ +/*************************************************************************** + showrecord.h - description + ------------------- + begin : Thu Dec 28 2000 + copyright : (C) 2000-2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 SHOWRECORDELEM_H +#define SHOWRECORDELEM_H + +//Qt headers +#include +#include +#include +#include + +//KDE headers +#include +#include +#include +#include +#include + +//KShowmail headers +#include "showlistviewitem.h" +#include "decodeRFC2047.h" +#include "constants.h" +#include "kshowmailview.h" +#include "showheaderdialog.h" +#include "headerfilter.h" +#include "filterlog.h" + +using namespace Constants; + +//forward class declarations +class KshowmailView; +class FilterElem; + +/** + * @short Represents a mail. + * + * It contains UID, Subject, From, To and date of the mail. Subject, From and To + * will be read out from the given header. It also contains pointer to the + * corresponding list view entry and maybe to a matching filter. + * All mail objects are held by ShowRecord. + * @see ShowRecord + * @see ConfigElem + * @author Eggert Ehmke + */ + +class ShowRecordElem +{ + + public: + + /** + * Returned by showHeader(), if the user has + * clicked OK. + */ + static const int continueShowHeaders; + + /** + * Returned by showHeader(), if the user has + * clicked Cancel. + */ + static const int cancelShowHeaders; + + /** + * Constructor + */ + ShowRecordElem (); + + /** + * Constructor + * @param number number of the mail on the server + * @param uid Unique ID of the mail + * @param isNew TRUE - mail is new; FALSE - mail is not new + */ + ShowRecordElem( int number, QString& uid, bool isNew ); + + /** + * Sets the mail header and extracts From, To, Subject, Date and Content Type. + * All parts of the header are coded according RFC 2047. + * @param header the mail header + */ + void setHeader( const QString& header ); + + /** + * Returns the whole header. + * @return the mail header + */ + QString header() const; + + /** + * Returns the sender address. + * @return sender address + */ + QString from() const; + + /** + * Returns the addressee. + * @return the addressee + */ + QString to() const; + + /** + * Returns the subject. + * @return mail subject + */ + QString subject() const; + + /** + * Returns the stored content type. + * @return content type + */ + QString content() const; + + + /** + * Returns the date on which the mail was sent, formated to the current + * locale's conventions. + * @return the date + */ + QString date() const; + + /** + * Returns the date on which the mail was sent. + * The format corresponds to the ISO 8601 extended specification for + * representations of dates and times, which is YYYY-MM-DDTHH:MM:SS + * @return the date + */ + QString strUnixTime () const; + + /** + * Returns the date and time on which the mail was sent. + * @return the date + */ + QDateTime sentDateTime() const; + + /** + * Sets the unique mail ID. + * @param uid the ID + */ + void setUIDL( const QString& uid ); + + /** + * Returns the unique ID of this mail. + * @return UID + */ + QString uidl() const; + + /** + * Sets the size of the mail. + * @param size Size + */ + void setSize( int size ); + + /** + * Returns the mail size as numeric value. + * @return size of the mail + */ + int size() const; + + /** + * Returns the mail size as string. + * The String has a length of 8 and the number is right-aligned to allow sorting. + */ + QString strSize () const; + + /** + * Returns the mails size as string with prefix + */ + QString strSizePrefix() const; + + /** + * Sets whether the mail is new or not. + * @param isnew TRUE - mail is new; FALSE - mail is not new + */ + void setNew( bool isnew ); + + /** + * Returns whether the mail is new or not. + * @return TRUE - mail is new + * @return FALSE - mail is not new + */ + bool isNew() const; + + /** + * Returns whether the mail is new or not. + * @return localized String "new", if the mail is new + * @return localized String "old", if the mail is not new + */ + QString state() const; + + /** + * Sets the number of this mail. + * @param n mail number + */ + void setNumber( int n ); + + /** + * Returns the number of this mail. + * @return mail number + */ + int number() const; + + /** + * Sets the pointer to the corresponding list view item. + * @see m_pItem + * @see ShowListViewItem + * @param item pointer to the corresponding item + */ + void setViewItem( ShowListViewItem* item ); + + /** + * Returns the pointer to the corresponding list view item. + * @see m_pItem + * @see ShowListViewItem + * @return pointer to the item + */ + ShowListViewItem* viewItem() const; + + /** + * Looks for a filter matching the mail header and returns the action recommend by this filter. + * If the action is MARK, it set markAtViewRefresh to True so the related view entry will be marked + * at the next view refresh. + * @param filter pointer to the header filter + * @param account name of the account + * @param mailbox reference to a QString object in which the mailbox name shall be written if the action is MOVE + * @param log pointer to the filter log + * @return recommend action + * @see FilterAction_Type + * @see HeaderFilter + * @see markAtViewRefresh + */ + FilterAction_Type applyHeaderFilter( HeaderFilter* filter, QString account, QString& mailbox, FilterLog* log = NULL ); + + /** + * Read a mail (header, size, uid and number) from the given DOM element + * and store it in this mail object. + * The element has to contains the attributes "uidl", "size", "number" and + * a child node called "header". + * @param elem a DOM element which contains a mail + */ + void readOptions( QDomElement& elem ); + + /** + * Creates a new DOM element in the given DOM document and add it to given + * DOM parent element + * @param doc the DOM document in that all options are stored + * @param parent the parent element (account) of the mail + */ + void saveOptions( QDomDocument& doc, QDomElement& parent ); + + /** + * Returns whether the mail is selected in the list view. + * @return TRUE - mail is selected + * @return FALSE - mail is not selected + */ + bool isSelected() const; + + /** + * Decodes the given mail body. + * The mail object has to do this job, because + * it has stored the mail header and therefore it knows the content + * type and encoding of the mail. + * It decodes just the text or html part of the body. The rest of it + * will be rejected. + * @param body the encoded mail (including header) + * @param preferHTML decode HTML part if present + * @return decoded mail body + */ + QString decodeMailBody( QByteArray body, bool preferHTML ) const; + + /** + * Shows the header in a dialog box. + * @param account account name + * @return continueShowHeaders - the user has OK clicked. The invoking function will show the next header + * @return cancelShowHeaders - the user has Cancel clicked. The invoking function will not show the next header. + */ + int showHeader( QString& account ); + + /** + * Writes this mail into the Move Log. + * @param log pointer to the log + * @param account name of the account + * @param mailbox name of the mailbox + */ + void writeToMoveLog( FilterLog* log, QString account, QString mailbox ); + + /** + * Writes this mail into the Delete Log. + * @param log pointer to the log + * @param account name of the account + */ + void writeToDeleteLog( FilterLog* log, QString account ); + + /** + * The mail will be marked at the next view refresh. + */ + void setMarkAtNextViewRefresh(); + + private: + + /** + * Mail header; coded according RFC 2047 + */ + QCString m_header; + + /** + * The sender address; coded according RFC 2047 + */ + QCString m_from; + + /** + * The addressee; coded according RFC 2047 + */ + QCString m_to; + + /** + * The subject; coded according RFC 2047 + */ + QCString m_subject; + + /** + * The date on which the mail was sent + */ + QDateTime m_unixDate; + + /** + * The content type + */ + QCString m_content; + + /** + * The unique ID of the mail. + */ + QString m_uid; + + /** + * Size of the mail + */ + int m_size; + + /** + * It is set to TRUE when the mail is new. + */ + bool m_new; + + /** + * The mail number of the account + */ + int m_nNumber; + + /** + * TRUE - the mail shall be marked at the next mail view refresh. + * It will be set to True by applyHeaderFilter() if the recommend filter action is MARK. + * It is used by setViewItem(). This methode marks the related list entry and after then it set + * this variable to False. + */ + bool markAtViewRefresh; + + /** + * Pointer to the corresponding list view entry. Used to check + * whether the entry is highlighted and we have to process this mail. + * @see ShowListViewItem + */ + ShowListViewItem* m_pItem; + + /** + * Searches in the header for a line which starts with the + * given item. + * For example: + * scanHeader( "From") will find the line + * "From: Ulrich Weigelt " + * and returns "Ulrich Weigelt " + * Returns an empty string (""), if nothing was found. + * @param item the search item + * @return the content of the found line + */ + QCString scanHeader( const QString& item ) const; + + /** + * Sets the given string as sender address + * @param from sender address + */ + void setFrom( const QCString& from ); + + /** + * Sets the given string as recipient address + * @param to recipient address + */ + void setTo( const QCString& to ); + + /** + * Sets the given string as subject + * @param subject the mail subject + */ + void setSubject( const QCString& subject ); + + /** + * Converts the given string to a date-time value and stores it. + * @param date the date + */ + void setDate( const QCString& date ); + + /** + * Sets the given string as content type. + * @param content the content type + */ + void setContent( const QCString& content ); + + /** + * Returns the boundary, if the mail has a multi part body. + * Otherwise it returns an empty string. + * @return boundary + */ + QString getBoundary() const; + + /** + * Returns the char set of the content (e.g. iso-8859-1). + * If no char set is denoted, it will returns an empty string. + * @return charset + */ + QString getCharset() const; + + /** + * Returns the content transfer encoding of the content + * (e.g. quoted-printable). + * If no encoding is denoted, it will returns an empty string. + * @return content transfer encoding + */ + QString getTransferEncoding() const; + +}; + +#endif diff --git a/kshowmail/templates/cpp_template b/kshowmail/templates/cpp_template new file mode 100644 index 0000000..6afef5d --- /dev/null +++ b/kshowmail/templates/cpp_template @@ -0,0 +1,16 @@ +/*************************************************************************** + |FILENAME| - description + ------------------- + begin : |DATE| + copyright : (C) |YEAR| by |AUTHOR| + email : |EMAIL| + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ diff --git a/kshowmail/templates/header_template b/kshowmail/templates/header_template new file mode 100644 index 0000000..6afef5d --- /dev/null +++ b/kshowmail/templates/header_template @@ -0,0 +1,16 @@ +/*************************************************************************** + |FILENAME| - description + ------------------- + begin : |DATE| + copyright : (C) |YEAR| by |AUTHOR| + email : |EMAIL| + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ diff --git a/kshowmail/types.h b/kshowmail/types.h new file mode 100644 index 0000000..defe2c2 --- /dev/null +++ b/kshowmail/types.h @@ -0,0 +1,122 @@ +// +// C++ Interface: types +// +// Description: +// All specail types for KShowMail +// +// +// Author: Ulrich Weigelt , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef TYPES_H +#define TYPES_H + +//Qt headers +#include +#include +#include + +using namespace std; + +/** + * All special types for KShowMail. + */ +namespace Types +{ + /** + * State of the application during running time. + */ + enum State_Type {idle, /** MailNumberList_Type; + + /** + * Map to notice which accounts need to get an order to do a task. + * The Key is the account name and the data a boolean. + * TRUE means the task was ordered, FALSE the task was ended. + */ + typedef QMap AccountTaskMap_Type; + + /** + * Actions returned by filters. + */ + enum FilterAction_Type + { + FActPass, /** MailToDownloadMap_Type; + + /** + * Contains all values of a filter criteria. + */ + struct FilterCriteria_Type + { + int source; /** FilterCriteriaList_Type; + +} + +#endif diff --git a/kshowmail/uniqueapp.cpp b/kshowmail/uniqueapp.cpp new file mode 100644 index 0000000..822c877 --- /dev/null +++ b/kshowmail/uniqueapp.cpp @@ -0,0 +1,78 @@ +/*************************************************************************** + uniqueapp.cpp - description + ------------------- + begin : Mon Nov 19 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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. * + * * + ***************************************************************************/ + +#include "uniqueapp.h" +#include + + +UniqueApp::UniqueApp() +{ + m_pApp = NULL; +} + +UniqueApp::~UniqueApp() +{} + +int UniqueApp::newInstance () +{ + //start our application + //--------------------- + + //at the first invoke of newInstance() create a new instance of kshowmail + if (m_pApp == NULL) + { + m_pApp = new KShowMailApp (); + } +//TODO: write english comments + + //frage das ConfigList-Objekt, ob die KShowMail beim Starten + //normal oder nur in der Taskleiste gezeigt werden soll + if( m_pApp->m_ConfigList.startMinimized() ) + { + //lege die App auf die Taskleiste + m_pApp->showMinimized (); + m_pApp->hide(); + } + else + { + //zeige das Hauptfenster + m_pApp->showNormal (); + m_pApp->raise(); + } + + //Kommandozeile-Argumente auswerten + //--------------------------------- + + //die in main() eingelesenen Kommandozeile-Argumente in ein + //KCmdLineArgs-Objekt ablegen + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + //wenn als Kommandozeilen-Argument "config" übergeben wurde, + //starte jetzt den Konfigurationsdialog + if ( args->isSet( CMDLINE_CONFIG ) ) + m_pApp->slotSetup(); + + //wenn als Kommandozeile-Argument "refresh" übergeben wurde, + //schaue sofort nach neue Mails + if ( args->isSet ( CMDLINE_REFRESH ) ) + m_pApp->slotRefresh(); + + //lösche alle Kommandozeilen-Argumente im Objekt + args->clear (); + + return 0; +} diff --git a/kshowmail/uniqueapp.h b/kshowmail/uniqueapp.h new file mode 100644 index 0000000..4c19dab --- /dev/null +++ b/kshowmail/uniqueapp.h @@ -0,0 +1,65 @@ +/*************************************************************************** + uniqueapp.h - description + ------------------- + begin : Mon Nov 19 2001 + copyright : (C) 2001 by Eggert Ehmke + email : eggert.ehmke@berlin.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 UNIQUEAPP_H +#define UNIQUEAPP_H + +//KDE-Header +#include +#include +#include + +//KShowMail-Header +#include "kshowmail.h" +#include "constants.h" + +using namespace Constants; + +/** + * @short Creates a unique instance of kshowmail + * @author Eggert Ehmke + */ + +class UniqueApp : public KUniqueApplication { + +public: + + /** + * Constructor + */ + UniqueApp(); + + /** + * Destructor + */ + ~UniqueApp(); + + /** + * overloaded method of KUniqueApplication. Creates a new instance of kshowmail. + */ + virtual int newInstance (); + + +private: + + /** + * the kshowmail instance + */ + KShowMailApp* m_pApp; +}; + +#endif diff --git a/pics/.xvpics/exclamation.png b/pics/.xvpics/exclamation.png new file mode 100644 index 0000000..2378aee --- /dev/null +++ b/pics/.xvpics/exclamation.png @@ -0,0 +1,5 @@ +P7 332 +#IMGINFO:22x22 RGB (225 bytes) +#END_OF_COMMENTS +22 22 255 +I$II۶IH%I۶%HI%۶I$II۶IH%I۶%HI%۶I$II۶IH%I۶%HI%۶I$II۶IH%I۶%HI%۶۶I$II۶%H%I۶ڶ%H۶I$II۶)D)۶ֻ$I۶I$II۶I$۶۶$I۶I$II۶rD۶D)I$II۶I$IIII$II۶II$II۶I$II۶E(EI۶I$II۶$I(E۶۶I$II$II(׺׶$I۶I$II(EII׶H)۶I$IImڷ$IH%۶ڷ$I۶I$I۶$II$۶۶$II$II۶)D۶$I)H׺I$II۶rDI۶I$II۶I$II۶$IIڷH%IIڷI$II۶IH%I۶%HI%۶۶I$II۶%H%I۶ڶ%H۶I$II۶%H%I۶ڶ%H \ No newline at end of file diff --git a/pics/.xvpics/exec.png b/pics/.xvpics/exec.png new file mode 100644 index 0000000000000000000000000000000000000000..d007311e96baf6637b70e85f02a0539502b2c090 GIT binary patch literal 321 zcmXX>%Sr=55bX1Q#X=I$V-hxkN6lkL*j-WYfq=)!A$rh{P?!<)I}D`rFWZOxg+!7- zCa`185*X;N?y2gk`>VL$??o+@O;kQEuDgS`?jU}c+{70Nn%Vp7^UGz_8s)=jF`nKQ zSvJa_9wV&qdPx$gwo<}Oga%bmh=io1P?=Smyd~!KiWuX7*QNQ|ZGS#0101+^b8x%U zX3=PXwfZ|Q^uhgBP=%7+yY2VV)q7hCku_pYwR67K)l%bw(xPkckDrp}g!^Qr6m3K} y=qqBc6-G9ld&VB}cSLNV9SjMqhbtbYLkRc@9_N9JXlLAHDLZK=WW>J7+~9wL#FGL5 literal 0 HcmV?d00001 diff --git a/pics/.xvpics/kshowmail.png b/pics/.xvpics/kshowmail.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fb33ec284dce07cd29ef49ab6bf1bb574b9402 GIT binary patch literal 2370 zcmd5-&x;&I6z;*>0xbFOo+-oUQ@8u#55{&Q{>5fZLCa$Ips3`-s5tzqJdY-5ShrLxj&3QMU= zb}2PL&F8$$?<^eVRLohM|NM1b*T3VFr7|mtENRQe1!_5-0MdaQ(AFojwz=XfVxANmw7>XVc0wj;@bzFzcgMS zaEnM1FWSpzCCMU(Y#Q6783m_K$ARm>54`i?_A$dLCR?%j4e%c_^b0lyD-^lbYrIGH zS_->u04o8n5hwyMC~&B*O)37D5Lv|J70kZQn>}~eebhb!9L(Sc-Wct$v90h!AD>&% zg@fhNr5{8e2H)28Q-{nV!7{^Y)>b>=_xPS)R?3OtO;Oh`9DrEBP+DnY3zHgJe8fWMdtG>`h(xJIl!;9!9GRRS5J2Li5E_}TM=(| z0aqIMzxliJQdc`rwfdNES?N014bB5YiNV^5;siXIPrq?EBe0hUIG2N=Pjyg;%GzlX&; zM!pcQ!XYBZM{m)^z}uB{A?`4!Dtu` z2jMUbBG^F`pgWM83g`K9H<=~36E#%}B_>wTO(_*mrW5IJkH?cZQW3`MyRN^>PQ-n2 R?C1Y6-|r{wKK;M`{0XVrYTy6> literal 0 HcmV?d00001 diff --git a/pics/.xvpics/kshowmail16.png b/pics/.xvpics/kshowmail16.png new file mode 100644 index 0000000..76b81ac --- /dev/null +++ b/pics/.xvpics/kshowmail16.png @@ -0,0 +1,5 @@ +P7 332 +#IMGINFO:16x16 RGB (515 bytes) +#END_OF_COMMENTS +16 16 255 +I$II۶IH%I۶I$II۶IH%I۶ڶIں$I۵$Hڻڻۺ׺$ڶڶڷ(ڻڒ)ۺۺڻ׶$ۺ׺ڻں($I%IHII%HII%HII۶I$II۶%H%I۶I$II۶%H%I۶I$II۶%H%I۶I$II۶%H%I \ No newline at end of file diff --git a/pics/.xvpics/kshowmail24.png b/pics/.xvpics/kshowmail24.png new file mode 100644 index 0000000000000000000000000000000000000000..d65f70a6df1acc4881c190204f1d6d2cf7c0fe53 GIT binary patch literal 641 zcmb_ZO-sW-5N)BoiBnqE5CVhdgecVygj`} zUZXd+x{d8$H~6qH)#jdMZ$g0YJr}n<J;7z-5$0u`4() zITz%DN-7xBI4U899~O#<3^|ysmRg4;tkQKRJhG+2nw&pp3*GFMU@V|DqGZ`Xj6t|g z0v2QD-Bw7(5*$*BTKIyP=S$Xmce}M{Fq_s6dIZQ*viv0}AT!gB;e070}gIZMj<;!^hXb@%jh^S3fIt1vWC2y%B)&@eJIP)MpQNiEjoQg-!oiT8JlclP)7 zb@dAg<}x%>04g&wHRbYD@$|gCZQC|a4^b{r+aZ3qr3&%G JHmD!Kd;k^Nfz$v1 literal 0 HcmV?d00001 diff --git a/pics/.xvpics/letter-open.png b/pics/.xvpics/letter-open.png new file mode 100644 index 0000000000000000000000000000000000000000..16ab9d0c3ec14928fbee1cb3df32586ef8931ec6 GIT binary patch literal 321 zcmZ9FF%H5o3`ITX6p_jRV_UVA7=gBUXp4Zo5>m&ozyQa9!{jnPOt6zy6yikI```IK z6go{46=73jTXpL=f5f>y)*HP{(n4RJ_u;luQQ7YLuIjg4)0FM`q~7 V6#fT+^ZxUH_p@)!+q|w*?LQt4mtX(@ literal 0 HcmV?d00001 diff --git a/pics/.xvpics/mini-cross.png b/pics/.xvpics/mini-cross.png new file mode 100644 index 0000000000000000000000000000000000000000..18ed00e2666ff496c117c90078fe0b064fd63a6a GIT binary patch literal 289 zcmYk1Jr2S!423i26p`9WbZknC#0dTK&=vuEB_u``V1SDSiQc0_v-l|3DSwmwJ=^ce zn}v#FEj_49Xo_|jrMGCVw&hCAw2sx`em!17>E%tpE}tI~k>l)^w6c@Byqb z2C9JT_{V6?^FfSw9{MaqB*E~U1)q=wck6mYA;5P$4F!Zy{a9F^gui|A%)sT*DVbtF ieEfNL5?r3J#>Jj2=OdxvQ*NlG)b|hHe8*!zKfM5RDT-eJ literal 0 HcmV?d00001 diff --git a/pics/.xvpics/ok.png b/pics/.xvpics/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..9444e170ab1b69cfd83c8dd6824217638085f3e6 GIT binary patch literal 289 zcmY*UF%E)25WIqd5DJPbC@&EcC^-b9)kOu|0x)V%V&V(5(2pI7Cie^rNZ>0jU?J6H zW@mPG4@(vV+?YX@LY@?BKYI8Jc1$qXloIyy9@{Bbbix%i|9NMd+K?T0v`9%K)z71-r4eWp#gH2#TAJ|oL^thT=!U5a yFbe%D@&3FdI6}85T66(bEi3FJD403{kXY9DV+5&#_tw?WPXzXkvp=lo_|q5P_+vHz literal 0 HcmV?d00001 diff --git a/pics/.xvpics/reload.png b/pics/.xvpics/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..ab83d81559c359c1b2f8c952fe88cd67ee81af34 GIT binary patch literal 549 zcmbu6Jr2S!423iI6qRTs*ifnpiILxWXp4Xy35gLF7~mM>FzH>=%kb=^otU7is20U7tpBik$Ifx-9c?^_QHkxc%bce?zpegORP-?#t( literal 0 HcmV?d00001 diff --git a/pics/.xvpics/tool1.png b/pics/.xvpics/tool1.png new file mode 100644 index 0000000000000000000000000000000000000000..b556c9ef8d6be242bdc5e82a436eb5785837a495 GIT binary patch literal 549 zcmZXRJ8Hx*5QYuzdzi#)%?${nK-RbhuHO;a8{3zH7 zXTL9?0`Q0kN`$u)3WUcs)nwR0zoMG*jKSJ92{MhDDckjwE9=k(nX z>Im71*640CLpCHhd8xxTGi)FJWky#MZ*}g;nY>Mp>NNueX|HjIHrVriMf{@! CF#j9? literal 0 HcmV?d00001 diff --git a/pics/.xvpics/tool2.png b/pics/.xvpics/tool2.png new file mode 100644 index 0000000000000000000000000000000000000000..4123db382828cf67387b4e89059da3ec0bd899bc GIT binary patch literal 549 zcmZuuOHRWu5Uu20P7$ez1Y3s+i6zk1vq*w~eI+E8@dg%f4EruPcd-vM%#72tp(K&4 zJiWYMo^H#g(Zw3tJ#@SNPU|nN%jf-ldDYzL^6mTc{o}e=Z@b4szdJniZM*GWUkc*z zv)L3-0i+NDn3~U68>mybM7@ods6&MGmuoR11kudeq*;56Uahjzj9N^Nz-qyDIR2 z+YW;u5CqWK{y62!rw^?tus0yxgcwB*6M`Zn@sE009ReK9sKOU|f=}>>?cyD5Av<`3 zqrt2Aow(NUH#2d^~#KnIo?|T>T5}WvlCh%z~Cfq^;T>bJo zJW~p8{wt1gl5WFy75E0os6ED+i60ZUIqVn9WbK6 lLShTiP+%i*ww4oT>jM}scyxh>M1KGP002ovPDHLkV1k+5Up@c; literal 0 HcmV?d00001 diff --git a/pics/kshowmail.png b/pics/kshowmail.png new file mode 100644 index 0000000000000000000000000000000000000000..4781936caa8995f262046929fbb6c40719eb63a0 GIT binary patch literal 1722 zcmV;r21WUaP)0ao)dFN;}XTI^B_Bxf0u!$1C|l_vI=XaA3S}J>!MT zk+qu~`R*dqnJm+pEMNY{xA@%EUq(d`-D^FbjBp>ur*V@l0BW@w*4+mA9~Rw61eB{> zXIp(bj8I>lf9bSKzP-0xQ&U@2FiC{1Ky8`Yj- zS=CrscQCUCrXiW1pGUVf^*ePVh=3v*fpV?{5aH#=SK^iL@R92;1;+dM`*S}Et`F_( zab)eLw}*}@@28Dal4@RZa<$01n8G%N1zE@t>VN z{`Jgh?#&$Mu_wRJM92yI$`$zb*CM&!TLbx%d34%E>=@{@i?lVBY8CTD7SoW(sVTC@ zGC>WDLAM6fUboqWyG<|q>7%6ZxDyHM+Rs2~z)PX9@%!l%`a7MJYJ+Nf`}xKjyWmbj zwN{O+jonz`13U!X8i);%bRrz-`yG}YqkZEa-r3{m&#y=J*?##duJ*bQc>N!Uq>tbK z4aduQ-*}Ob!yV9r??;rcTN^b0xE=KUdZP}&MyE4uylDe)^zsUacD!8NPp7b7y28Dg zES}8y8r5D#t|m z*T~v!0PNHx@BaQb=(*WId7s1GM=I&1i?4i#8Pa_MJHeZU-0k=j@{LDnkYXqwe&=s| zarQ|7{_*^CynpsI5FH&1(Qo`gIWJQZX_~P`9Mr%t<%Kpt3M%Kzlx|!Ia=!3Ho<_4t z^LI7!3uicbuEc&i#j`W;{@K$s@6;p87xRU9<9l+xS9wO?%8X<8)z^6B_UpX+^3|dLvy2|)@3%a~!yHzB5|Zu# zDWnciUJGydE3Q^>HJF(!jb;TlK&vc>vp8DSfg%O!;L3=eAH z!*0$fsrqU_>0p|UcA;41hjpJ0(wDCB=-Mj){PXP7y!Ydue5`KM%e}BB9WuMgzAj{@ zO`30Pc2h{=ML=jH;IQ(&95()NV=FKo;L){LIJ~umxbJu)a>D8FHoY8U{Is&jSY}Yz zgD|uPloSXcj7^vONC6DLIO zf7bP&8t9$_gPnX}5a+-c1m9cSp-(@c81pZR=So<28?@fu{MZkx4~Lxb|09@bGqR3+ z=_;Npxd7JP#;4j`w}({Q0SF&X2Vwe48E)LD^nIlpVT2Jz7-57FM)-vIFP6m_%)nt_ Q%m4rY07*qoM6N<$g0yB+X#fBK literal 0 HcmV?d00001 diff --git a/pics/kshowmail16.png b/pics/kshowmail16.png new file mode 100644 index 0000000000000000000000000000000000000000..047df13dafedbc503ac85707097ab2e62af0d337 GIT binary patch literal 606 zcmV-k0-^nhP) zZivzzXoW^&1EB^l)@TC?gVsKCv!$7HXU<-?*0yWKhnI^Zy@PoiKW5Nt#6JBBNc_Cc?!pSK^W@w21FeaFXw3u4H7KA zCAqYMK@o|FyN@4H{#0hG*`(R5V^zLy7Q;q!1YwYoL|QgdZV}spBV!j4?G7t9CyCIs zjKnA#5o;!H+@ikzWz@lF5Qf-|c=vIYP;XH!Z?kv$KFLf1arF|_T9x2H1`{QSl|i^p z_lS;mHO2ykho4UJ`PDMXY`~tLJa0~)qCK~WR1tm708$!qNe|<@-3G!&qaDz3$iBd* zFx*dmW1WM~p5t{CZXii#Gi!g35pXj3Jrp6d?QUCw|07*qoM6N<$g1QzFA^-pY literal 0 HcmV?d00001 diff --git a/pics/kshowmail24.png b/pics/kshowmail24.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b116607d4de1850419649ec02663e29204d50e GIT binary patch literal 870 zcmV-s1DX7ZP)f<-K$6hD_x!~&KHi_v~{iPCizr|%rziOi}l%0DE_)ftwfz;_Y| z1A;2W8x*E}d+O}{T@<;T$g725)xj(A^D?y(!M`ltF#g@3Thr`2 zka00zeozP5{a3WKy<+_P*9pH^wH3r=Dc{RJED=_s;I}Rt`D{>A3(xm;*}84#S`1>W z^f8?WJ6!wmsP?DMNw?*wJBEK^kV*_vrSONTkpa_VboV`DOZ_e$*)B0Rftj_GTtPi@ zI$ruxx}n*`P(QU#@z|=e++^mAk0eMJls(JqD#X$P#*JxL|ktK64j8 zR+@iDYi^j^r%nAjXyzKFBCQ=c8Xrf3WFra82kQY8Vu0N&yleWeQ(Aj|qH;#d{8i&$ z?=?S5+tYPkIP{!UQ=6YppVNCJN7Iv}QUrGzU|k07%$_uPVL=lL7mWyhw8w%SCFn^`>b%3-6iyb3pd+IHsa<)fP!qX?&I)y=>n@ zW*6yt)Y*UHEhAt3!p%!;Nk3#<7v48{{v+8#W4IIrv_!2Kl`dEz5x>_;5m>Dftp`*AOazDSvSs zhiJiC8`jP_0onJRnqUA}*R|+EDTR5Si|{V6F(!F#IqnA69OqI>^?`|qjWM?!6A?3W zGUqAY{O4F}4d+~S#yNb-p+J4ct%Hl<;vVO2t+iN|1ptEMShYD5GoO_{XVtfGUYc};dc7sFei#9RKS`fP0`l@C1AZ v+Jc9}^FdGL;o??2CT2>&BQ)&SGz|O&#m=lOB@1T^00000NkvXXu0mjfcprZ^ literal 0 HcmV?d00001 diff --git a/pics/ok.png b/pics/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5be4f8963a86b2417530ec57fa8795cbe6f658 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!3HGN^yhQ|DYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgP>{XE)7O>#5+kdSHMeeD{|cZ`k*AAeNX49`lM=Za6nNa?FB~j0 z>Hl{3OkIcR<(QiZ3Ol}UJNUp|L;HX8(OC~#E;lV`e7iV-;rX{>qadE{<9pw2xOhz@ zIZ0z?S)WQ^dc#^fo=t0P4D9PYg-={9XEHyjI`K3k&xUfR`dCJr?p^PHt=-?ttdUgW U8v06RBhYpRPgg&ebxsLQ0QcHcLjV8( literal 0 HcmV?d00001 diff --git a/pics/tool.png b/pics/tool.png new file mode 100644 index 0000000000000000000000000000000000000000..b87d9263f3f7f2ddc413f865133807b9466791a3 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPgf{78y={&fXu#+JQokJzX3_D&}mxy76qYfk4~C?~8N} zu&sIeDxE1zVa#|wSF`5!dgrNgas;rn09AF^v#**gS;o@}#U82Lf) z3Xi<2?*>*|p6H9t1$4bKUi k^A^uH1^#%hb?zBo+Wu=>7aX~H8R%UGPgg&ebxsLQ03fcB`~Uy| literal 0 HcmV?d00001 diff --git a/pics/tool1.png b/pics/tool1.png new file mode 100644 index 0000000000000000000000000000000000000000..f90b59c787b3f63554ea7a4cebc518647439c8a4 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPgf{78y=XZN5VaPk};LJzX3_D&}mxa!{~YLBQdnzZ&n2 z{%b<#%@{Ki`L7+gDV1|@v2mCK_mc@11s8WR-IQkDb2G6#@SNp8!Rv*FZ1@dsPHqbuYb=glwq8)jFTbR7(bL4**QX+n?vF^am3k>Hv^$PMt%$S3wsfLECE#4sY^5^c&*VGm>&asa3j=xqK T829@i(1Q$~u6{1-oD!M zy^VuF5QgD*tZRU+0Espz$knnkbZJ*RH5rSnx>IZ_;h0DoPZz#ZQBwv`6>Lw<8uM1 z>pJN?U&64iJdWc5zumetco+ucZ}EAab$g;!cCFZ&uuYlgIRHgbP?lwII}UYQ@qLv0 z{Sk$q_W1arIQ(VZ;MwP@`e9iXrfKr-^}lcm{uYkKz2F$!8xF;T;1E0*_Qj)MAN(s8 x-f&|?t7`oz?2`oV@$2;)fWGeq-dyRF`~pOq&M(~C!+HP!002ovPDHLkV1nw2imCtr literal 0 HcmV?d00001 diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 0000000..d0842bb --- /dev/null +++ b/po/Makefile.am @@ -0,0 +1,8 @@ +####### kdevelop will overwrite this part!!! (begin)########## + + +EXTRA_DIST = kshowmail.pot + +####### kdevelop will overwrite this part!!! (end)############ +POFILES = AUTO + diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..b6a69cf --- /dev/null +++ b/po/cs.po @@ -0,0 +1,1908 @@ +# translation of cs.po to +# translation of cs.po to +# translation of cs.po to +# translation of cs.po to +# translation of kshowmail.po to +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# Robert Kratky , 2004, 2005. +# Robert Kratky , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: cs\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2005-11-29 11:15+0100\n" +"Last-Translator: Robert Kratky \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10.2\n" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Robert Krátký" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "kratky@rob.cz" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Mocný program pro kontrolu POP3 pošty" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Znovu načíst zprávy" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Otevřít okno nastavení" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "KShowmail je již spuštěný!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignorovat" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Zobrazit hlavní okno" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Přišla" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "nová pošta" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Účet:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Server:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Server" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protokol:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Port:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Uživatel:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +#, fuzzy +msgid "Password" +msgstr "Heslo:" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +#, fuzzy +msgid "Don't save" +msgstr "Není shodné" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "&Uložit heslo" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "&Aktivní" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Vybrat POP3 účet" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Žádné" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "&Obecná nastavení" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Nový účet" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Upravit účet" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Jaký je váš celkový názor na tento program?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "Je jedním z mých oblíbených" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Líbí se mi" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "Někdy je užitečný" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Průměrný" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Dobrý pokus, ale mohlo to být uděláno lépe" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Je to bída" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Je k ničemu" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Příšerný" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Které vlastnosti programu se vám líbí?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Jaká je vaše nejoblíbenější vlastnost?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Které vlastnosti se vám nelíbí?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Které funkce nikdy nepoužíváte?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Chybějí vám nějaké funkce?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Ano, a moc! (napište, prosím, níže)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Některé (napište, prosím, níže)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "Už teď je funkcí moc." + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Jak byste ohodnotili stabilitu programu?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Stabilní" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Dobrý" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Průměr" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Bída" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Pořád to padá" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Jak byste ohodnotili výkon programu?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Skvělý" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Je tak pomalý, že z toho šílím" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Jak zkušený jste uživatel počítačů?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Expert" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Zdatný" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Učím se" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Nováček" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Jak hodně rozumíte unixovým/linuxovým systémům?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Měli jste potíže přijít na to, jak pracovat s tímto programem?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Žádný problém" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Trochu" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Stále se učím" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Zpočátku jsem neměl tušení, co dělat" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Stále nemám tušení, co dělat" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Kde tento program nejvíce používáte?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "V práci" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "Doma" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "Ve škole" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Jaká je tam vaše role?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Domácí uživatel" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Student" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Výuková (učitel/profesor)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Nesouvisí s počítači" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Vývojář" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Systémový administrátor" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Máte ještě jiné role?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Jak jste se dozvěděli o tomto programu?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "V menu mého systému" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Někdo mi o něm řekl" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Na internetu" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "V tištěné knize/magazínu" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Jinak (napište, prosím, níže)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Doporučili byste tento program kamarádům?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "Zobrazení seznamu zpráv" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "Zobrazení hlaviček zpráv" + +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "Zobrazení kompletních zpráv" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Filtry" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "Ruční mazání nechtěných zpráv" + +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "Automatické mazání filtrovaných zpráv" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "Automatické mazání filtrovaných zpráv" + +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "Automatické mazání filtrovaných zpráv" + +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "Ruční mazání filtrovaných zpráv" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +#, fuzzy +msgid "White- and Blacklist" +msgstr "&Vyprázdnit seznam" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Filtr" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "Filtrování zpráv pomocí regulárních výrazů" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Třídění zpráv podle velikosti, data, atd." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Přehrávání zvuků" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Přehrávání pípnutí" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Počáteční časovač" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Intervalový časovač" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Tento průzkum názorů :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +#, fuzzy +msgid "Time Out" +msgstr "Čas" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Názory" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Odeslat..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Napište nám, co si o tomto programu myslíte.

Před odesláním " +"budete moci vše zkontrolovat ve vašem poštovním programu.
Nic nebude " +"odesláno bez vašeho vědomí.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Otázky označené " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr " musí být zodpovězeny před odesláním emailu." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&Další komentář:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "ano" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "ne" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Předmět:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Akce" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Odpovědět" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Odesilatel:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Datum:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Velikost:" + +#: kshowmaildock.cpp:37 +msgid "KShowmail: a powerful pop3 email checker" +msgstr "KShowmail: mocný program pro kontrolu POP3 pošty" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "Od" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "Komu" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Předmět" + +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Hlavička" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Účet" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "Obsahuje" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +#, fuzzy +msgid "does not contain" +msgstr "Neobsahuje" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +#, fuzzy +msgid "equals" +msgstr "Shodné" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +#, fuzzy +msgid "does not equal" +msgstr "Není shodné" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +#, fuzzy +msgid "matches regular expression" +msgstr "Upravit regulární výraz" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +#, fuzzy +msgid "is not equal to" +msgstr "Není shodné" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "Rozlišovat velká/malá" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +#, fuzzy +msgid "Log mails deleted by filter" +msgstr "Smazat filtr" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Seznam účtů" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Seznam zpráv" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Obsah zprávy" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Server" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Uživatel" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Zprávy" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +msgid "Si&ze" +msgstr "&Velikost" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Číslo" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +msgid "Su&bject" +msgstr "Pře&dmět" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Datum" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Velikost" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Obsah" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Stav" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "Povolit HTML" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Název:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +#: kcmconfigs/configactions.cpp:33 +msgid "Action if new &mail" +msgstr "Akce při no&vé poště" + +#: kcmconfigs/configactions.cpp:34 +msgid "Action if &no mail" +msgstr "Akce při žádné &nové poště" + +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Zobrazit okno s upozorněním" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Zobrazit upozornění při nové poště" + +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Zobrazit hlavní okno při příchodu nové pošty" + +#: kcmconfigs/configactions.cpp:53 +msgid "&Beep" +msgstr "&Pípnout" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Při nové poště pípne interním reproduktorem" + +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Zvuk" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Přehraje zvuk při nové poště" + +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Přehrát zvolený zvukový soubor" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Stiskněte pro výběr zvukového souboru" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Příkaz:" + +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Spustí externí program při nové poště" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Spustit zvolený program" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Zvolit externí příkaz" + +#: kcmconfigs/configactions.cpp:84 +msgid "Minimi&ze" +msgstr "Minimali&zovat" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimalizovat okno, není-li žádná nová pošta" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Ukončit" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Ukončit KShowmail, není-li žádná nová pošta" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Soubory wav (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Všechny soubory (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Vybrat zvukový soubor" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Akce při žádné &nové poště" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +#, fuzzy +msgid "Mailbox Select" +msgstr "Seznam zpráv" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Datum" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Akce" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "KShowmail" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Akce při žádné &nové poště" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Potvrdit ukonč&ení" + +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Je-li zaškrtnuto, vymazání zprávy je nutné potvrdit" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Po&tvrdit smazání" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Je-li zaškrtnuto, vymazání zprávy je nutné potvrdit" + +#: kcmconfigs/configgeneral.cpp:52 +msgid "Start Minimi&zed" +msgstr "Spust&it minimalizované" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Aplikace je spuštěna jako ikona" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "Zavřít &do systémové části panelu" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "Tlačítko ponechá aplikaci běžet v systémové části panelu" + +#: kcmconfigs/configgeneral.cpp:60 +msgid "Minimize to tray" +msgstr "&Minimalizovat do systémové části panelu" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "Minimalizuje do systémové části panelu místo do pruhu úloh" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +msgid "&Keep mail as new" +msgstr "Ponechat &zprávy jako nové" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Ponechat zprávy jako nové, dokud není ukončeno" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Počáteční časovač:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "" +"Vteřin do prvního automatického přihlášení (0 = nepřihlašovat automaticky)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervalový časovač:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minut mezi automatickými přihlášeními (0 = nepřihlašovat automaticky)" + +#: kcmconfigs/configgeneral.cpp:90 +#, fuzzy +msgid "Timeout:" +msgstr "Čas" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Přidat filtr" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Upravit filtr" + +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Název:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "Stav filtru" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "FilterDialog" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Ignorovat" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +#, fuzzy +msgid "Activate Filter" +msgstr "Upravit filtr" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +#, fuzzy +msgid "Blacklist" +msgstr "&Vyprázdnit seznam" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Přehrát zvolený zvukový soubor" + +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Přehrát zvolený zvukový soubor" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "nové" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "staré" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +#, fuzzy +msgid "Deleted Mails:" +msgstr "Smazat filtr" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Odesilatel:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Automatické načtení: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Znovu načíst zprávy" + +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "Zobrazit &hlavičky vybraných zpráv" + +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "Zobrazit vybrané zprávy &kompletní" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Smazat vybrané zprávy" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "Zastavit &aktuální přenos" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "Poslat zprávu s &názory" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "N&astavení účtu" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Připraven." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "Úloha zastavena" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "Fronta: %1 zpráv(a/y) o velikosti %2 bajtů" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +#, fuzzy +msgid "Delete?" +msgstr "Smazané" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +#, fuzzy +msgid "Last Refresh: %1" +msgstr "Automatické načtení: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"KShowmail bude ukončen.\n" +"Chcete pokračovat?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +#~ msgid "Execute user commands" +#~ msgstr "Vykonávání uživatelských příkazů" + +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Heslo:" + +#~ msgid "Condition" +#~ msgstr "Podmínka" + +#~ msgid "Contains" +#~ msgstr "Obsahuje" + +#~ msgid "Doesn't contain" +#~ msgstr "Neobsahuje" + +#~ msgid "Equals" +#~ msgstr "Shodné" + +#~ msgid "Doesn't equal" +#~ msgstr "Není shodné" + +#~ msgid "Greater" +#~ msgstr "Větší" + +#~ msgid "Less" +#~ msgstr "Méně" + +#~ msgid "No more Conditions" +#~ msgstr "Žádné další podmínky" + +#~ msgid "And" +#~ msgstr "a" + +#~ msgid "Or" +#~ msgstr "nebo" + +#~ msgid "Edit regular expression" +#~ msgstr "Upravit regulární výraz" + +#~ msgid "Regular Expression" +#~ msgstr "Regulární výraz" + +#~ msgid "For help about regular expressions lookup the Qt documentation" +#~ msgstr "Nápovědu k regulárním výrazům naleznete v dokumentaci Qt" + +#~ msgid "second Condition" +#~ msgstr "druhá podmínka" + +#~ msgid "Counter" +#~ msgstr "Počítadlo" + +#~ msgid "" +#~ "Filters are counted for each automatic deletion;
Filters with high " +#~ "counters are listed first
" +#~ msgstr "" +#~ "Filtry jsou počítány za každé automatické vymazání;
Filtry s " +#~ "vysokým počtem jsou zobrazeny navrchu
" + +#~ msgid "Reset Counter" +#~ msgstr "Vynulovat počítadlo" + +#~ msgid "Filter Status" +#~ msgstr "Stav filtru" + +#~ msgid "Filters are switched off" +#~ msgstr "Filtry jsou vypnuty" + +#~ msgid "Filters are switched on" +#~ msgstr "Filtry jsou zapnuty" + +#~ msgid "Automatic Delete" +#~ msgstr "Automatické smazání" + +#~ msgid "Filters are switched on and are applied automatically" +#~ msgstr "Filtry jsou zapnuty a jsou uplatňovány automaticky" + +#~ msgid "Add filter" +#~ msgstr "Přidat filtr" + +#~ msgid "Copy filter" +#~ msgstr "Kopírovat filtr" + +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Filtr %1 bude smazán.\n" +#~ "Chcete pokračovat?" + +#~ msgid "" +#~ "Automatic filters can cause loss of important mails.\n" +#~ "Please test your filters.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Automatické filtry mohou způsobit ztrátu důležité pošty.\n" +#~ "Otestujte, prosím, své filtry.\n" +#~ "Chcete pokračovat?" + +#~ msgid "" +#~ "Your conditions contain empty match strings.\n" +#~ "This will not work." +#~ msgstr "" +#~ "Vaše podmínky obsahují prázdné řetězce.\n" +#~ "To nebude fungovat." + +#~ msgid "Setup &filters" +#~ msgstr "Nastavení &filtrů" + +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Příkaz %1 bude smazán.\n" +#~ "Chcete pokračovat?" + +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Účet %1 bude vymazán.\n" +#~ "Chcete pokračovat?" + +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Heslo bude uloženo jako zakódovaný text.\n" +#~ "Je možné, že půjde rozluštit.\n" +#~ "Chcete pokračovat?\n" + +#~ msgid "Message" +#~ msgstr "Zpráva" + +#~ msgid "Send reply mail" +#~ msgstr "Poslat odpověď" + +#~ msgid "User command" +#~ msgstr "Uživatelský příkaz" + +#~ msgid "Menu Entry" +#~ msgstr "Položka menu" + +#~ msgid "Press button to select command path" +#~ msgstr "Stiskněte tlačítko a vyberte příkaz" + +#~ msgid "Test" +#~ msgstr "Test" + +#~ msgid "Execute the command immediatly" +#~ msgstr "Vykonat příkaz okamžitě" + +#~ msgid "Wait for command to complete" +#~ msgstr "Počkat do ukončení příkazu" + +#~ msgid "Enter menu entry name" +#~ msgstr "Zadejte název položky menu" + +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Zadejte cestu k vybranému příkazu a jeho parametry
jako parametry " +#~ "lze použít <uživatel>, <server>, <heslo>, <" +#~ "hlavička> a <tělo>
" + +#~ msgid "Server Options" +#~ msgstr "Nastavení serveru" + +#~ msgid "The account must have a name" +#~ msgstr "Účet musí mít název" + +#~ msgid "This account is already present" +#~ msgstr "Takový účet již existuje" + +#~ msgid "Command" +#~ msgstr "Příkaz" + +#~ msgid "User commands" +#~ msgstr "Uživatelské příkazy" + +#~ msgid "Add user command" +#~ msgstr "Přidat uživatelský příkaz" + +#~ msgid "Edit user command" +#~ msgstr "Upravit uživatelský příkaz" + +#~ msgid "Copy user command" +#~ msgstr "Kopírovat uživatelský příkaz" + +#~ msgid "Delete user command" +#~ msgstr "Smazat uživatelský příkaz" + +#~ msgid "Accounts" +#~ msgstr "Účty" + +#~ msgid "Delete account" +#~ msgstr "Smazat účet" + +#~ msgid "Cop&y" +#~ msgstr "&Kopírovat" + +#~ msgid "copy account" +#~ msgstr "kopírovat účet" + +#~ msgid "&Add" +#~ msgstr "&Přidat" + +#~ msgid "Add new account" +#~ msgstr "Přidat nový účet" + +#~ msgid "Save password (not recommended !)" +#~ msgstr "Uložit heslo (nedoporučuje se!)" + +#~ msgid "Pop3 Timer" +#~ msgstr "POP3 časovač" + +#~ msgid "Pop3 timeout" +#~ msgstr "Vypršení časového limitu POP3" + +#~ msgid "Max Size:" +#~ msgstr "Max. velikost:" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Maximální velikost těla stahované zprávy v kilobajtech" + +#~ msgid "Alt+K" +#~ msgstr "Alt+K" + +#~ msgid "Display Options" +#~ msgstr "N&astavení zobrazení" + +#~ msgid "E&xternal Program" +#~ msgstr "E&xterní program" + +#~ msgid "Sound File:" +#~ msgstr "Zvukový soubor:" + +#~ msgid "Enter sound file" +#~ msgstr "Zadejte zvukový soubor" + +#~ msgid "Setup &accounts" +#~ msgstr "&Nastavení účtů" + +#~ msgid "Setup &commands" +#~ msgstr "Nastavení &příkazů" + +#~ msgid "&Setup" +#~ msgstr "&Nastavení" + +#~ msgid "Select Command" +#~ msgstr "Vybrat příkaz" + +#~ msgid "Send complain mails" +#~ msgstr "Posílání zpráv se stížností" + +#~ msgid "Clear message list by Ctrl-C" +#~ msgstr "Vyprázdnění seznamu zpráv pomocí Ctrl-C" + +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "Načtení seznamu zpráv pomocí Shift-F5" + +#~ msgid "Select account" +#~ msgstr "Vybrat účet" + +#~ msgid "EditDialog" +#~ msgstr "EditDialog" + +#~ msgid "KShowMailApp" +#~ msgstr "KShowMailApp" + +#~ msgid "KshowmailDoc" +#~ msgstr "KshowmailDoc" + +#~ msgid "KShowMailDock" +#~ msgstr "KShowMailDock" + +#~ msgid "KFeedbackDialog" +#~ msgstr "KFeedbackDialog" + +#~ msgid "KFeedbackForm" +#~ msgstr "KFeedbackForm" + +#~ msgid "KFeedbackQuestionList" +#~ msgstr "KFeedbackQuestionList" + +#~ msgid "FilterEntryDialog" +#~ msgstr "FilterEntryDialog" + +#~ msgid "ServerDialog" +#~ msgstr "ServerDialog" + +#~ msgid "KshowmailView" +#~ msgstr "KshowmailView" + +#~ msgid "AlertDialog" +#~ msgstr "AlertDialog" + +#~ msgid "CommandDialog" +#~ msgstr "CommandDialog" + +#~ msgid "CommandEntryDialog" +#~ msgstr "CommandEntryDialog" + +#~ msgid "Refresh &all messages" +#~ msgstr "Znovu &načíst všechny zprávy" + +#~ msgid "&Send complain mail" +#~ msgstr "&Poslat stížnost" + +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Přihlašuji se k serveru %1..." + +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "spojení s POP3 serverem %1 úspěšně navázáno" + +#~ msgid "POP3 Timeout" +#~ msgstr "Vypršení POP3 limitu" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Vypršení časového limitu: úloha byla zrušena" + +#~ msgid "getting UIDLs ..." +#~ msgstr "stahuji UIDL..." + +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "stahuji zprávu %1 z %2..." + +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Mažu vybrané zprávy..." + +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Bude vymazána zpráva %1 na %2.\n" +#~ "Chcete pokračovat?\n" + +#~ msgid "Yes all" +#~ msgstr "Ano vše" + +#~ msgid "Sending complain mails..." +#~ msgstr "Odesílám zprávu se stížností..." + +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Bude odeslána stížnost kvůli zprávě %1 na %2.\n" +#~ "Chcete pokračovat?\n" + +#~ msgid "Header %1 at %2" +#~ msgstr "Hlavička %1 na %2" + +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "Stahuje kompletní označené zprávy..." + +#~ msgid "Message %1 at %2" +#~ msgstr "Zpráva %1 na %2" + +#~ msgid "OptionDialog" +#~ msgstr "OptionDialog" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..f936215 --- /dev/null +++ b/po/de.po @@ -0,0 +1,1584 @@ +# translation of de.po to deutsch +# KTranslator Generated File +# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# Eggert Ehmke , 2003, 2004. +# +# +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2004-02-02 22:20+0100\n" +"Last-Translator: Ulrich Weigelt \n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Eggert Ehmke, Ulrich Weigelt" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "eggert.ehmke@berlin.de, ulrich.weigelt@gmx.de" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Ein leistungsfähiger Pop3-Mailchecker" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Nachrichten erneuern" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Konfigurationsdialog" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail wurde bereits gestartet!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignorieren" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Hauptfenster" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Neue Nachrichten" + +# +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "sind eingetroffen!" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Konto:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "Eindeutiger Kontoname" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Server:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +msgid "Server Name" +msgstr "Server" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protokoll:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" +"Protokoll, welches zum Abholen der E-Mails vom Server benutzt werden soll " +"KSHowmail unterstützt derzeit nur POP3." + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Port:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "Port-Nummer. POP3 benutzt gewöhnlich den Port 110" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Benutzer:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" +"Um sich gegenüber dem Mail-Server zu authentifizieren, benötigen Sie einen " +"Benutzernamen." + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Passwort" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +msgid "Don't save" +msgstr "Nicht speichern" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +msgid "Save password" +msgstr "Passwort speichern" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "KWallet benutzen" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" +"Passwort nicht speichern. KShowmail wird Sie nach dem Passwort fragen, wenn " +"es das erste Mal den Mail-Server kontaktiert." + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" +"Das Passwort in die Konfigurationsdatei speichern. Dies wird nicht " +"empfohlen, weil das Passwort nur schwach verschlüsselt wird." + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" +"KWallet zum Speichern des Passwortes benutzen. Eventuell werden Sie das " +"Master-Passwort von KWallet beim Start von KShowmail eingeben müssen." + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Aktiv" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +msgid "Select it to activate this account." +msgstr "Konto aktivieren." + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "Verschlüsselung" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Keine" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "SSL" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "TLS" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" +"Das Herunterladen eines Mail-Headers oder einer gesamten Mail ist nicht " +"verschlüsselt. Dies sollte nur verwendet werden, wenn der Provider keine " +"Verschlüsselung unterstützt." + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" +"Secure Sockets Layer (SSL) ist ein Verschlüsselungs-Protokoll, welches eine " +"sichere Kommunikation im Internet ermöglicht." + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" +"Transport Layer Security (TLS) ist ein Verschlüsselungs-Protokoll, welches " +"eine sichere Kommunikation im Internet ermöglicht. Es ist der Nachfolger von " +"SSL." + +# +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +msgid "General" +msgstr "Allgemein" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "Sicherheit" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Neues Konto" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Konto bearbeiten" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "Geben Sie bitte einen Server ein." + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "Geben Sie bitte einen Benutzernamen ein." + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Was ist Ihre allgemeine Meinung über dieses Programm ?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "Es ist eines meiner Lieblingsprogramme" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Ich mag es" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "Es ist brauchbar" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Es ist durchschnittlich" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Es könnte besser sein" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Es ist schlecht" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Es ist nutzlos" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Es ist Müll" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Welche Eigenschaften des Programmes mögen Sie ?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Welche Eigenschaft mögen Sie am meisten?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Welche Eigenschaft mögen Sie nicht ?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Welche Eigenschaft benutzen Sie nie ?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Gibt es fehlende Eigenschaften ?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Ja, viele ! (Bitte angeben)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Einige (bitte angeben)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "Es gibt schon zu viele !" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Wie bewerten Sie die Stabilität des Programms ?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Absolut stabil" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Gut" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Durchschnittlich" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Schlecht" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Es stürzt dauernd ab" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Wie bewerten Sie die Geschwindigkeit des Programms?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Hervorragend" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Es ist so langsam, es macht mich verrückt" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Wie ist Ihre Erfahrung mit Computern im Allgemeinen?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Experte" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Gut" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Lerne noch" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Anfänger" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Was ist Ihre Erfahrung mit Unix/Linux Systemen?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Hatten Sie Schwierigkeiten, mit diesem Programm zurechtzukommen?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Kein Problem" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Einige" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Ich lerne immer noch" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Ich wusste nicht, was ich zuerst tun sollte" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Ich weiss immer noch nicht, was ich machen soll" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Wo benutzen Sie das Programm am häufigsten?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "Bei der Arbeit" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "Zu Haus" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "An der Universität/Schule" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Was ist Ihre Aufgabe dort?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Heimbenutzer" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Student" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Ausbildung (Lehrer/Professor)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Keine computerbezogene Arbeit" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Entwickler" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Systemverwalter" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Haben Sie noch andere Aufgaben dort?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Wie haben Sie das Prgramm kennengelernt?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "In einem Menü auf meinem PC" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Jemand hat mir davon erzählt" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Im Internet" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "In einer Zeitschrift" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Andere (bitte angeben)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Würden Sie dieses Programm einem Freund empfehlen ?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "Die Nachrichtenliste im Allgemeinen" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "Anzeige des Vorspanns" + +# +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "Anzeige der kompletten Nachricht" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Filter" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "Manuelles Löschen ungewünschter Nachrichten" + +#: kshowmailfeedback.cpp:138 +msgid "Automatic move of filtered messages" +msgstr "Automatisches Verschieben gefilterter Nachrichten" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "Automatisches Löschen gefilterter Nachrichten" + +#: kshowmailfeedback.cpp:140 +msgid "Automatic mark of filtered messages" +msgstr "Automatisches Markieren gefilterter Nachrichten" + +#: kshowmailfeedback.cpp:141 +msgid "Ignoring of filtered messages" +msgstr "Ignorieren von gefilterten Nachrichten" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "Integration von SpamAssassin" + +#: kshowmailfeedback.cpp:143 +msgid "White- and Blacklist" +msgstr "White- und Blacklist" + +#: kshowmailfeedback.cpp:144 +msgid "Filter Log" +msgstr "Filter-Log" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "Ausfiltern von Nachrichten durch reguläre Ausdrücke" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Sortieren der Nachrichten nach Größe, Datum usw." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Klang abspielen" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Ton abspielen" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Zeitintervall bis zum ersten Erneuern" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Zeitinterval bis zum nächsten Erneuern" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Diese Rückmeldungsabfrage :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "Geben Sie bitte das Passwort für %1 ein." + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" +"Zeit abgelaufen bei der Verbindung mit %1. Die Aktion konnte nicht innerhalb " +"der eingestellten Zeit abgeschlossen werden." + +#: configelem.cpp:515 +msgid "Time Out" +msgstr "Zeit abgelaufen" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" +"Sie möchten Ihre Mails auf Spam überprüfen lassen, aber SpamAssassin ist auf " +"Ihrem Rechner nicht aktiviert. Übersrpnge die Spam-Prüfung." + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "SpamAssassin ist nicht aktiviert." + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Rückmeldung" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Sende als Email..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Bitte teilen Sie mir Ihre Meinung über dieses Programm mit.

Sie können alle Informationen überprüfen, bevor die Nachricht gesendet " +"wird.
Es wird nichts hinter Ihrem Rücken übertragen.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Fragen markiert mit " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr " müssen beantwortet werden, bevor die Nachricht verschickt wird." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&Zusätzliche Bemerkungen:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "ja" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "nein" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Betreff:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Aktionen" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Antworten" + +# +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Absender:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Datum:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Größe:" + +#: kshowmaildock.cpp:37 +msgid "KShowmail: a powerful pop3 email checker" +msgstr "KShowmail: Ein leistungsfähiger Pop3-Mailchecker" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "Absender" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "Empfänger" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "Größe (Bytes)" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Betreff" + +# +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Vorspann" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Konto" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +msgid "contains" +msgstr "enthält" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +msgid "does not contain" +msgstr "enthält nicht" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +msgid "equals" +msgstr "ist gleich" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +msgid "does not equal" +msgstr "ist nicht gleich" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +msgid "matches regular expression" +msgstr "passt auf regulären Ausdruck" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "passt nicht auf reg. Ausdruck" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "ist gleich" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +msgid "is not equal to" +msgstr "ist nicht gleich" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "ist größer als" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "ist größer oder gleich als" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "ist kleiner als" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "ist kleiner oder gleich als" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "Groß-Kleinschreibung" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" +"Der Editor für die regulären Ausdrücke konnte nicht initialisiert werden." + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "Der Editor für reguläre Ausdrücke ist nicht verfügbar." + +#: kcmconfigs/configlog.cpp:34 +msgid "Log mails deleted by filter" +msgstr "Logge Mails, welche vom Filter gelöscht wurden." + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "Das Log für vom Filter gelöschte Mails aktivieren." + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "Lösche das Log bei Programmende." + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "Lösche das Log nach" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr " Tagen" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "Logge Mails, welche vom Filter verschoben wurden." + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "Das Log für vom Filter verschobene Mails aktivieren." + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Konten-Liste" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Nachrichten-Liste" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Nachrichten-Inhalt" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "Blendet die 'Aktiv-Spalte' ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "Blendet die 'Konto'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Server" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "Blendet die 'Server'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Benutzer" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "Blendet die 'Benutzer'-Spalte ein bzw. aus." + +# +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Nachrichten" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "Blendet die 'Nachrichten'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:66 +msgid "Si&ze" +msgstr "&Größe" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "Blendet die 'Größe'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Nummer" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "Blendet die 'Nummer'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "Blendet die 'Konto'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "Blendet die 'Absender'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "Blendet die 'Empfänger'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:86 +msgid "Su&bject" +msgstr "&Betreff" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "Blendet die 'Betreff'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Datum" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "Blendet die 'Datum'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Größe" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "Blendet die 'Größe'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Inhalt" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "Blendet die 'Inhalt'-Spalte ein bzw. aus." + +# +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Status" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "Blendet die 'Status'-Spalte ein bzw. aus." + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "HTML zulassen" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "Schaltet die Darstellung von HTML in der Mail-Ansicht ein bzw. aus." + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +msgid "Name" +msgstr "Name" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "Möchten Sie das Konto %1 wirklich entfernen?" + +# +# +#: kcmconfigs/configactions.cpp:33 +msgid "Action if new &mail" +msgstr "Aktion bei neuen &Nachrichten" + +# +#: kcmconfigs/configactions.cpp:34 +msgid "Action if &no mail" +msgstr "Aktion &ohne neue Nachrichten" + +# +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Benachrichtigungsfenster" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Zeige Benachrichtigungsfenster bei neuen Nachrichten" + +# +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Zeige Hauptfenster bei neuen Nachrichten" + +#: kcmconfigs/configactions.cpp:53 +msgid "&Beep" +msgstr "&Ton" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Bei neuer Post erklingt der interne Lautsprecher" + +#: kcmconfigs/configactions.cpp:57 +msgid "Sound:" +msgstr "Klang:" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Bei neuer Post wird ein Klang abgespielt" + +# +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Abspielen der ausgewählten Klangdatei" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Auswahl einer Klangdatei" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Kommando:" + +# +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Bei neuer Post wird das externe Programm gestartet" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Ausführen des ausgewählten Programms " + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Benutzerkommando auswählen" + +#: kcmconfigs/configactions.cpp:84 +msgid "Minimi&ze" +msgstr "Fenster als &Icon" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Fenster als Icon, wenn keine neuen Nachrichten vorhanden sind" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Beenden" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Beende kshowmail, wenn keine neuen Nachrichten vorhanden sind" + +#: kcmconfigs/configactions.cpp:203 +msgid "Sound files (*.wav, *.ogg)" +msgstr "Klangdateien (*.wav, *.ogg)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Alle Dateien (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Klangdatei auswählen" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" +"KShowmail benutzt SpamAssassin um die Mails auf Spam zu überprüfen. Sie " +"müssen den SpamAssassin-Dienst (Daemon) installieren, konfigurieren und " +"starten, bevor Sie diese Prüfung benutzen können." + +#: kcmconfigs/configspamcheck.cpp:48 +msgid "Action for Spam" +msgstr "Aktion bei Spam-Mails" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "Wählen Sie die Aktion bei Spam-Mails." + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "Markieren" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "Wählen Sie die Mailbox" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +msgid "Mailbox Select" +msgstr "Auswahl der Mailbox" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "SpamAssassin läuft." + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "Test, ob SpamAssassin verfügbar ist." + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "SpamAssassin läuft nicht." + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "Klicken Sie hier, um das Mail-Verzeichnis auszüwählen." + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" +"Wählen Sie bitte den Pfad zu den Mailboxen.\n" +"KShowmail unterstützt nur das MailDir-Format." + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "Wählen Sie bitte die Mailbox." + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "Wählen Sie das Mailbox-Verzeichnis." + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "Posteingang" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "Postausgang" + +#: kcmconfigs/mailboxwizard.cpp:138 +msgid "Drafts" +msgstr "Entwürfe" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "Versandte Nachrichten" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "Mülleimer" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "LIste" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" +"Eine Mail, dessen Absender hier aufgelisted ist, wird vom Filter " +"durchgelassen und angezeigt werden.\n" +"Eine Mail wird akzeptiert, wenn die Absender-Zeile einen dieser Einträge " +"beinhaltet.\n" +"Bsp.: Der Absender\n" +"\"Ulrich Weigelt\" wird von den Einträgen\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de und\n" +"\"Ulrich Weigelt\" angenommen." + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" +"Eine Mail, dessen Absender hier aufgelisted ist, wird vom Filter aufgehalten " +"werden.\n" +"Eine Mail wird gefiltert, wenn die Absender-Zeile einen dieser Einträge " +"beinhaltet.\n" +"Bsp.: Der Absender\n" +"\"Ulrich Weigelt\" wird von den Einträgen\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de und\n" +"\"Ulrich Weigelt\" gefiltert." + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +msgid "Action" +msgstr "Aktion" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "Die Mail wird gelöscht." + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "Die Mail wird markiert." + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +msgid "Show" +msgstr "Anzeigen" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "Nach %1 verschieben" + +#: kcmconfigs/filtersetupitem.cpp:258 +msgid "Check for spam" +msgstr "auf Spam prüfen" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "Unbekannte Aktion" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "&Zeiten" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Beenden bestätigen" + +#: kcmconfigs/configgeneral.cpp:45 +msgid "If checked, window close must be confirmed" +msgstr "Wenn aktiviert, muss das Schließen des Fensters bestätigt werden" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Löschen bestätigen" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Wenn aktiviert, muß jedes Löschen bestätigt werden" + +#: kcmconfigs/configgeneral.cpp:52 +msgid "Start Minimi&zed" +msgstr "Start als &Icon" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Anwendung wird als Icon gestartet" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "In die Traybar verschieben" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "Die Anwendung bleibt nach Schliessen in der Traybar" + +#: kcmconfigs/configgeneral.cpp:60 +msgid "Minimize to tray" +msgstr "Fenster als Icon" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "Die Anwendung bleibt nach Minimieren in der Traybar" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "Zeige Verbindungsfehler bei der Aktualisierung" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" +"Wenn während der Aktualisierung ein Verbindungsfehler auftritt (z.B. " +"unbekannter Server), wird eine Fehlermeldung angezeigt. Bei anderen Aktionen " +"werden Fehlermeldungen immer angezeigt." + +#: kcmconfigs/configgeneral.cpp:68 +msgid "&Keep mail as new" +msgstr "Als neu &behalten" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Nachrichten als neu behalten bis zum Beenden" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Verzögerung:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "[Sekunden]" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "Sekunden bis zum ersten automatischen Login (0 = keine Automatik)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Zeitintervall:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "[Minuten]" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minuten zwischen automatischem Login (0 = keine Automatik)" + +#: kcmconfigs/configgeneral.cpp:90 +msgid "Timeout:" +msgstr "Verbindungsabbruch nach" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "Sekunden, bis eine Verbindung abgebrochen wird." + +#: kcmconfigs/filtersetupdialog.cpp:23 +msgid "New filter" +msgstr "Neuer Filter" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Filter bearbeiten" + +#: kcmconfigs/filtersetupdialog.cpp:34 +msgid "Name:" +msgstr "Name:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +msgid "Filter Criterias" +msgstr "Filter-Kriterien" + +#: kcmconfigs/filtersetupdialog.cpp:44 +msgid "Filter Action" +msgstr "Filter-Aktion" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "Trifft auf alle Folgenden zu" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "Trifft auf eines der Folgenden zu" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "More" +msgstr "Mehr" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "Eine weiteres Kriterium hinzufügen." + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "Weniger" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "Das letzte Kriterium entfernen." + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" +"Wählen Sie die Aktion für die Mails aus, welche von diesem Filter erkannt " +"wurden." + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "auf Spam prüfen" + +#: kcmconfigs/configfilter.cpp:33 +msgid "Activate Filter" +msgstr "Filter aktivieren" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "Header-Filter aktivieren" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "Erste Prüfung: Absender-Listen" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "Whitelist" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" +"Klicken Sie hier, um die Liste der Absender zu bearbeiten, deren Mails den " +"Filter passieren sollen." + +#: kcmconfigs/configfilter.cpp:52 +msgid "Blacklist" +msgstr "Blacklist" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" +"Klicken Sie hier, um die Liste der Absender zu bearbeiten, deren Mails " +"gelöscht oder markiert werden sollen." + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "Zweite Prüfung: Filter" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "Nr." + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "Den ausgewählten Filter an den Anfang verschieben." + +#: kcmconfigs/configfilter.cpp:87 +msgid "Moves the selected filter up" +msgstr "Den ausgewählten Filter nach oben verschieben." + +#: kcmconfigs/configfilter.cpp:88 +msgid "Moves the selected filter down" +msgstr "Den ausgewählten Filter nach unten verschieben." + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "Den ausgewählten Filter an das Ende verschieben." + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" +"Dritte Prüfung: Aktion für die Mails, welche nicht herausgefiltert wurden" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" +"Wählen Sie die Aktion für die Mails aus, welche nicht herausgefiltert wurden." + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "KWallet ist nicht verfügbar." + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" +"Konnte den Namen der Brieftasche für Netzwerk-Daten nicht von KWallet " +"erhalten." + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "Konnte KWallet nicht öffnen." + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "Konnte keinen Ordner für KShowmail in KWallet anlegen." + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "Konnte den Ordner für KShowmail in KWallet nicht öffnen." + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "Konnte das Passwort nicht in KWallet speichern." + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "Konnte das Passwort für Konto %1 nicht aus KWallet auslesen." + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "Geben Sie bitte einen Kontonamen an." + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "Es gibt bereits ein Konto %1. Wählen Sie bitte einen anderen Namen." + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" +"Sie haben die Namen des Kontos geändert. Das Konto wird daher alle " +"abgeholten E-Mails verlieren. Führen Sie bitte eine Aktualisierung durch." + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "Konnte das Filter-Log nicht speichern." + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "neu" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "alt" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "Filter-Log" + +#: filterlogview.cpp:31 +msgid "Deleted Mails:" +msgstr "gelöschte Mails:" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +msgid "Sender" +msgstr "Absender" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "Log von gelöschten Mails löschen" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "verschobene Mails:" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "verschoben nach" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "Log von verschobenen Mails löschen" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" +"Vielen Dank, dass Sie KShowmail nutzen.\n" +"Benutzen Sie bitte das Feedback-Formular, um uns Ihre Erfahrungen mit diesem " +"Programm mitzuteilen." + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "Willkommen" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Erneuern in: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Nachrichten erneuern" + +# +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "&Vorspann der markierten Nachrichten anzeigen" + +# +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "&Vollständige markierte Nachrichten anzeigen" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Lösche markierte Nachrichten" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "&Vorgang abbrechen" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "Filter-Log anzeigen" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "Füge Absender zur Whitelist hinzu" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "Füre Absender zur Blacklist hinzu" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "Rückmeldung schicken" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "&Konto einrichten" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Bereit." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" +"Zeigt die Anzahl der vom Filter gelöschten, verschobenen oder ignorierten " +"Mails an.\n" +"Die Positionen bedeuten:\n" +"bei der letzten Aktualisierung / seit dem Start des Programms / im Log " +"aufgelisted" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "Aktualisiere ..." + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "Auftrag wurde abgebrochen" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 Nachrichten mit insgesamt %2 Bytes sind vorhanden" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "Möchten Sie diese E-Mails wirklich löschen?" + +#: kshowmail.cpp:418 +msgid "Delete?" +msgstr "Löschen?" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "Lösche E-Mail(s) ..." + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "Hole Nachricht ..." + +#: kshowmail.cpp:491 +msgid "Last Refresh: %1" +msgstr "Letzte Aktualisierung: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"KShowmail wird beendet.\n" +"Sind Sie sicher?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "Filter: Gelöscht: %1/%2/%3; Verschoben: %4/%5/%6; Ignoriert: %7" + +#~ msgid "Execute user commands" +#~ msgstr "Ausführen von Benutzer-Kommandos" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..d56e6ef --- /dev/null +++ b/po/es.po @@ -0,0 +1,1563 @@ +# translation of es.po to Spanish +# translation of 20090226_es.po to +# KTranslator Generated File +# Copyright (C) 2003, 2009 Free Software Foundation, Inc. +# +# +# Eggert Ehmke , 2003. +# Elsa Andrés , 2009. +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2009-02-28 16:51+0100\n" +"Last-Translator: Elsa Andrés \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Translator: Stephan Kulow \n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" +"Stephan Giesler, Elsa Andrés 2009" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" +"giesler@gmx.net, e.andres@ist-sci.com" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Una poderosa herramienta para verificar cuentas POP3" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Actualizar la lista de mensajes" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Lanzar el cuadro de diálogo de configuración" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "¡KShowmail ya se está ejecutando!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignorar" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Mostrar la ventana principal" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "¡Tiene mensajes" + +# +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "nuevos!" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Cuenta:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "Nombre de cuenta único" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Servidor:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +msgid "Server Name" +msgstr "Nombre del servidor" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protocolo:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" +"Protocolo que utilizará para obtener los mensajes del servidor. " +"Actualmente KShowmail sólo admite POP3." + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Puerto:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "Número de puerto. Normalmente, POP3 utiliza el puerto 110." + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Usuario:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "Para autentificarse ante el servidor necesita un nombre de usuario." + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Contraseña" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +msgid "Don't save" +msgstr "No guardar" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +msgid "Save password" +msgstr "Guardar la contraseña" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "Utilizar KWallet" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "Don't save password. KShowmail will ask you for it at first server connect." +msgstr "No guardar la contraseña. KShowmail se la pedirá cuando conecte con el servidor la primera vez." + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" +"Guardar la contraseña en el archivo de configuración. No se recomienda, " +"ya que la contraseña está ligeramente cifrada" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" +"Utilizar KWallet para guardar la contraseña. Es posible que tenga que " +"introducir la contraseña maestra cuando conecte con el servidor la primera vez." + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Activar" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +msgid "Select it to activate this account." +msgstr "Seleccione esta opción para activar la cuenta." + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "Cifrado" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Ninguno" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "SSL" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "TLS" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" +"La descarga de la cabecera y el cuerpo del correo no estará cifrada. Utilice " +"esta opción si su proveedor no dispone de transferencia segura." + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" +"El Protocolo de Capa de Conexión Segura (SSL) es un protocolo criptográfico que " +"proporciona comunicaciones seguras en Internet." + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" +"Seguridad de la Capa de Transporte (TLS) es un protocolo criptográfico que " +"proporciona comunicaciones seguras en Internet. Es el sucesor de SSL." + +# +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +msgid "General" +msgstr "General" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "Seguridad" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Nueva cuenta" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Editar cuenta" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "Introduzca el servidor." + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "Introduzca el nombre de usuario." + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "¿Cuál es su opinión general sobre este programa?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "Es uno de mis favoritos" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Me gusta" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "A veces es útil" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Está bien" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Buen intento, pero se podría hacer mejor" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Es malo" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Es inútil" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Es un asco" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "¿Qué características de este programa le gustan?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "¿Cuál es su característica favorita?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "¿Qué características no le gustan?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "¿Cuáles son las características que nunca usa?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "¿Echa en falta alguna característica?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "¡Sí, muchas! (añada un comentario abajo)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Algunas (añada un comentario abajo)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "¡Ya tiene demasiadas características!" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "¿Cómo considera la estabilidad de este programa?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Sólido como una roca" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Buena" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Media" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Mala" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Se cuelga todo el tiempo" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "¿Cómo considera el rendimiento de este programa?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Fantástico" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Es tan lento que me vuelve loco" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "¿Cuál es su experiencia con los equipos en general?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Experto" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Bueno" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Aprendiendo" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Novato" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "¿Cuál es su experiencia con sistemas Unix/Linux?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "¿Ha tenido algún problema para conocer el funcionamiento de este programa?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Ningún problema" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Alguno" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Aún lo estoy aprendiendo" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "No sabía qué hacer al principio" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Aún no sé qué hacer" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "¿Dónde utiliza más este programa?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "En el trabajo" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "En casa" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "En la universidad / escuela" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "¿Qué funciones desempeña en ese lugar?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Usuario doméstico" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Estudiante" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Educativas (profesor / catedrático)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Trabajo no relacionado con equipos" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Desarrollador" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Administrador de sistemas" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "¿Realiza alguna otra función en ese lugar?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "¿Cómo conoció este programa?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "Desde un menú de mi equipo" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Alguien me habló de él" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "En Internet" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "En una revista / libro" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Otro (añada un comentario abajo)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "¿Le recomendaría este programa a un amigo?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "La visualización de los mensajes de la lista, en general" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "La visualización de las cabeceras de los mensajes" + +# +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "La visualización de los mensajes completos" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Filtros" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "Eliminar manualmente los mensajes no deseados" + +#: kshowmailfeedback.cpp:138 +msgid "Automatic move of filtered messages" +msgstr "Mover automáticamente los mensajes filtrados" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "Eliminar automáticamente los mensajes filtrados" + +#: kshowmailfeedback.cpp:140 +msgid "Automatic mark of filtered messages" +msgstr "Marcar automáticamente los mensajes filtrados" + +#: kshowmailfeedback.cpp:141 +msgid "Ignoring of filtered messages" +msgstr "Ignorar los mensajes filtrados" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "Integración con SpamAssassin" + +#: kshowmailfeedback.cpp:143 +msgid "White- and Blacklist" +msgstr "Lista blanca y lista negra" + +#: kshowmailfeedback.cpp:144 +msgid "Filter Log" +msgstr "Registro del filtro" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "Filtrar los mensajes usando expresiones regulares" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Ordenar los mensajes por tamaño, fecha, etc." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Reproducir un sonido" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Reproducir el timbre (beep)" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Temporizador inicial" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Temporizador de intervalos" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Esta encuesta de opinión :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "Introduzca la contraseña de %1" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "Tiempo límite alcanzado para %1. No se ha podido finalizar la operación en el tiempo establecido " + +#: configelem.cpp:515 +msgid "Time Out" +msgstr "Tiempo límite" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" +"Quiere analizar los correos de spam pero SpamAssassin no se está ejecutando.\n" +"KShowmail omitirá la comprobación del spam." + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "SpamAssassin no se está ejecutando" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Opinión" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "Enviar por e-&mail..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Díganos su opinión sobre este programa.

Podrá revisarlo " +"todo antes de que se envíe por correo electrónico.
No se enviará nada " +"sin su consentimiento.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Las preguntas marcadas con" + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr " se deben contestar para poder enviar el correo electrónico." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "Comentarios &adicionales:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "sí" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "no" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Asunto:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Acciones" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Responder" + +# +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Remitente:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Fecha:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Tamaño:" + +#: kshowmaildock.cpp:37 +msgid "KShowmail: a powerful pop3 email checker" +msgstr "Una poderosa herramienta para verificar cuentas POP3" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "De" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "Para" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "Tamaño (bytes)" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Asunto" + +# +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Cabecera" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Cuenta" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +msgid "contains" +msgstr "contiene" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +msgid "does not contain" +msgstr "no contiene" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +msgid "equals" +msgstr "igual" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +msgid "does not equal" +msgstr "no es igual" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +msgid "matches regular expression" +msgstr "coincide con la expresión regular" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "no coincide con la expresión regular" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "es igual a" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +msgid "is not equal to" +msgstr "no es igual a" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "es mayor que" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "es mayor o igual que" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "es menor que" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "es menor o igual que" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "Distingue mayúsculas" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "No se ha podido inicializar el editor de expresiones regulares." + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "El editor de expresiones regulares no está disponible." + +#: kcmconfigs/configlog.cpp:34 +msgid "Log mails deleted by filter" +msgstr "Registrar los correos eliminados por el filtro" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "Marcar para activar el registro de los correos eliminados por el filtro." + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "Eliminar las entradas del registro al salir" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "Eliminar las entradas del registro tras" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr " Días" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "Registrar los correos movidos por el filtro" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "Marcar para activar el registro de los correos movidos por el filtro." + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Lista de correos" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Contenido del correo" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "Para activar/desactivar la columna 'Activar' en la lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "Para activar/desactivar la columna 'Cuentas' en la lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Servidor" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "Para activar/desactivar la columna 'Servidor' en la lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Usuario" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "Para activar/desactivar la columna 'Usuario' en la lista de cuentas" + +# +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Mensajes" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "Para activar/desactivar la columna 'Mensajes' en la lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:66 +msgid "Si&ze" +msgstr "Ta&maño" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "Para activar/desactivar la columna 'Tamaño' en la lista de cuentas" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Número" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "Para activar/desactivar la columna 'Número' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "Para activar/desactivar la columna 'Cuenta' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "Para activar/desactivar la columna 'De' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "Para activar/desactivar la columna 'Para' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:86 +msgid "Su&bject" +msgstr "Asun&to" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "Para activar/desactivar la columna 'Asunto' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Fecha" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "Para activar/desactivar la columna 'Fecha' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Tamaño" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "Para activar/desactivar la columna 'Tamaño' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Contenido" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "Para activar/desactivar la columna 'Contenido' en la lista de mensajes" + +# +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Estado" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "Para activar/desactivar la columna 'Estado' en la lista de mensajes" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "Permitir HTML" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "Para activar/desactivar el formato HTML en la vista de mensajes" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +msgid "Name" +msgstr "Nombre" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "¿Quiere eliminar la cuenta %1?" + +# +#: kcmconfigs/configactions.cpp:33 +msgid "Action if new &mail" +msgstr "Acción si hay &correo nuevo" + +# +#: kcmconfigs/configactions.cpp:34 +msgid "Action if &no mail" +msgstr "Acción si &no hay correo nuevo" + +# +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Mostrar el mensaje" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Mostrar un mensaje cuando lleguen nuevos correos" + +# +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Mostrar ventana principal si llega correo nuevo" + +#: kcmconfigs/configactions.cpp:53 +msgid "&Beep" +msgstr "&Timbre (beep)" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Hace sonar el timbre interno si existe correo nuevo" + +#: kcmconfigs/configactions.cpp:57 +msgid "Sound:" +msgstr "Sonido:" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Reproducir un sonido si existe correo nuevo" + +# +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Reproducir el archivo de sonido seleccionado" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Pulse para seleccionar archivo de sonido" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Comando:" + +# +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Inicia un programa externo si hay correo nuevo" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Iniciar el programa seleccionado" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Seleccionar comando externo" + +#: kcmconfigs/configactions.cpp:84 +msgid "Minimi&ze" +msgstr "Minimi&zar" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimizar la ventana si no existe correo nuevo" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Terminar" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Finalizar kshowmail si no existe correo nuevo" + +#: kcmconfigs/configactions.cpp:203 +msgid "Sound files (*.wav, *.ogg)" +msgstr "Archivos de sonido (*.wav, *.ogg)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Todos los archivos (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Seleccionar archivo de sonido" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" +"KShowmail utiliza SpamAssassin para analizar los correos de spam. Tiene que " +"instalar, configurar e iniciar el daemon de SpamAssassin antes de poder utilizar " +"este servicio." + +# +#: kcmconfigs/configspamcheck.cpp:48 +msgid "Action for Spam" +msgstr "Acción para el spam" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "Elegir la acción para los correos de spam." + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "Marcar" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "Seleccione el buzón" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +msgid "Mailbox Select" +msgstr "Selección del buzón" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "SpamAssassin está en ejecución." + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "Comprobar SpamAssassin" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "SpamAssassin no está en ejecución." + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "Pulse para seleccionar el directorio del correo" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" +"Seleccione la ruta a los buzones.\n" +"KShowmail admite sólo buzones de tipo maildir." + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "Seleccione el buzón" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "Seleccione el directorio del buzón" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "Bandeja de entrada" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "Bandeja de salida" + +#: kcmconfigs/mailboxwizard.cpp:138 +msgid "Drafts" +msgstr "Borrador" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "Elementos enviados" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "Papelera" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "Lista" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" +"Un correo cuyo remitente aparezca en esta lista, pasará el filtro.\n" +"Se aceptará el correo si el campo De coincide con alguna de las entradas de la lista.\n" +"P. ej. la siguiente línea\n" +"\"Ulrich Weigelt\" se aceptaría con las entradas:\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" +"Un correo cuyo remitente aparezca en esta lista, será capturado por el filtro.\n" +"El correo se detendrá si el campo De coincide con alguna de las entradas de la lista.\n" +"P. ej. la siguiente línea\n" +"\"Ulrich Weigelt\" se filtraría con las entradas:\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +msgid "Action" +msgstr "Acción" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "Los correos se eliminarán." + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "Los correos se marcarán." + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +msgid "Show" +msgstr "Mostrar" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "Mover a %1" + +# +#: kcmconfigs/filtersetupitem.cpp:258 +msgid "Check for spam" +msgstr "Comprobar spam" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "Acción desconocida" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "&Temporizadores" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Confirmar cerrar" + +#: kcmconfigs/configgeneral.cpp:45 +msgid "If checked, window close must be confirmed" +msgstr "Si se activa, se debe confirmar la acción para cerrar la ventana" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Confirmar eliminar" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Si se activa, se debe confirmar la eliminación de los mensajes" + +#: kcmconfigs/configgeneral.cpp:52 +msgid "Start Minimi&zed" +msgstr "Iniciar minimi&zado" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Iniciar la aplicación como icono" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "Cerrar a bandeja del sistema" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "El botón de cerrar mantiene la aplicación en ejecución en la bandeja del sistema" + +#: kcmconfigs/configgeneral.cpp:60 +msgid "Minimize to tray" +msgstr "Minimizar a la bandeja del sistema" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "Se minimiza en la bandeja del sistema en lugar de la barra de tareas" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "Mostrar los errores de conexión al actualizar" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" +"En en caso de que se produzca un error al actualizar (p. ej. servidor desconocido), " +"se mostrará un mensaje de error. Este error siempre se mostrará en otras acciones" + +#: kcmconfigs/configgeneral.cpp:68 +msgid "&Keep mail as new" +msgstr "&Mantener correo como nuevo" + +# msgstr "Mantener mensajes como nuevo" +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Mantener el correo como nuevo hasta terminar" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Temporizador inicial (retardo):" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "[Segundos]" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "Segundos hasta el primer inicio de sesión automático (0 = no automático)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervalo del temporizador:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "[Minutos]" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minutos entre inicios de sesión automáticos (0 = no automático)" + +#: kcmconfigs/configgeneral.cpp:90 +msgid "Timeout:" +msgstr "Tiempo límite:" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "Segundos que deben transcurrir para cancelar la conexión con el servidor" + +#: kcmconfigs/filtersetupdialog.cpp:23 +msgid "New filter" +msgstr "Nuevo filtro" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Editar filtro" + +#: kcmconfigs/filtersetupdialog.cpp:34 +msgid "Name:" +msgstr "Nombre:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +msgid "Filter Criterias" +msgstr "Criterios de filtrado" + +#: kcmconfigs/filtersetupdialog.cpp:44 +msgid "Filter Action" +msgstr "Acción de filtrado" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "Coincidir con todas las siguientes" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "Coincidir con cualquiera de las siguientes" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "More" +msgstr "Más" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "Añadir criterios adicionales." + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "Menos" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "Eliminar el último criterio." + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "Seleccionar la acción para todos los correos afectados por este filtro." + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "Comprobar spam" + +#: kcmconfigs/configfilter.cpp:33 +msgid "Activate Filter" +msgstr "Activar filtro" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "Seleccionar para activar el filtro de cabeceras." + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "Primera comprobación: listas de remitentes" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "Lista blanca" + +#: kcmconfigs/configfilter.cpp:46 +msgid "Click here to edit the list of senders whose mails shall pass the filter." +msgstr "Pulse aquí para editar la lista de los remitentes cuyos correos pasarán el filtro." + +#: kcmconfigs/configfilter.cpp:52 +msgid "Blacklist" +msgstr "Lista negra" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" +"Pulse aquí para editar la lista de los remitentes cuyos correos serán " +"eliminados o marcados." + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "Segunda comprobación: filtros" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "No." + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "Mueve el filtro seleccionado a la parte superior" + +# +#: kcmconfigs/configfilter.cpp:87 +msgid "Moves the selected filter up" +msgstr "Mueve el filtro seleccionado hacia arriba" + +# +#: kcmconfigs/configfilter.cpp:88 +msgid "Moves the selected filter down" +msgstr "Mueve el filtro seleccionado hacia abajo" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "Mueve el filtro seleccionado a la parte inferior" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "Tercera comprobación: acciones para el resto" + +#: kcmconfigs/configfilter.cpp:123 +msgid "Choose the action for all mails which are not filtered by the steps before." +msgstr "Seleccione la acción para todos los correos que no han sido filtrados en pasos anteriores." + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "KWallet no está disponible." + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "No se puede obtener el nombre de la cartera para los datos de la red desde KWallet." + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "No se puede abrir KWallet." + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "No se puede crear el directorio para KShowmail en KWallet." + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "No se puede abrir el directorio para KShowmail en KWallet." + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "No se puede guardar la contraseña en KWallet." + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "No se puede obtener la contraseña para la cuenta %1 desde KWallet." + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "Introduzca un nombre para la cuenta." + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "Ya existe una cuenta con el nombre %1. Elija otro nombre." + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" +"Ha cambiado el nombre de la cuenta. La cuenta perderá todas las cabeceras de " +"los correos descargados. Ejecute una actualización para la cuenta." + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "No se puede guardar el registro del filtro." + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "nuevo" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "antiguo" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "Visualizar el registro del filtro" + +#: filterlogview.cpp:31 +msgid "Deleted Mails:" +msgstr "Correos eliminados:" + +# +#: filterlogview.cpp:36 filterlogview.cpp:63 +msgid "Sender" +msgstr "Remitente" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "Limpiar la lista de correos eliminados" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "Correos movidos:" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "Movidos a" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "Limpiar la lista de correos movidos" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" +"Gracias por utilizar KShowmail.\n" +"Utilice este cuadro de diálogo de opinión para contarnos su experiencia con este programa." + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "Bienvenido" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Actualización automática: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Actualizar la lista de mensajes" + +# +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "Mostrar la &cabecera de los mensajes seleccionados" + +# +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "Mostrar los &mensajes seleccionados" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Eliminar los mensajes seleccionados" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "De&tener la transferencia actual" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "Mostrar el registro de filtrado" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "Añadir al remitente a la lista blanca" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "Añadir al remitente a la lista negra" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "Enviar un correo de &opinión" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "Configuración de &cuenta" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Preparado." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" +"Muestra el número de correos eliminados, movidos o ignorados por el filtro.\n" +"La posición indica:\n" +"por la última actualización / desde que se inició la aplicación / enumerados en el registro" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "Actualizando..." + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "El trabajo ha sido detenido" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 mensaje(s) con un total de %2 bytes está(n) esperando" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "¿Quiere eliminar estos correos?" + +#: kshowmail.cpp:418 +msgid "Delete?" +msgstr "¿Eliminar?" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "Eliminando correo(s)..." + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "Descargando..." + +#: kshowmail.cpp:491 +msgid "Last Refresh: %1" +msgstr "Última actualización: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"Se va a cerrar KShowmail.\n" +"¿Está seguro?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "Filtro: Eliminado(s): %1/%2/%3; Movido(s): %4/%5/%6; Ignorado(s): %7" + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..f93c3e5 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,1873 @@ +# translation of fr.po to deutsch +# KTranslator Generated File +# Copyright (C) 2003 Free Software Foundation, Inc. +# Eggert Ehmke , 2003. +# +# +msgid "" +msgstr "" +"Project-Id-Version: fr\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2003-12-08 21:36+0100\n" +"Last-Translator: Eggert Ehmke \n" +"Language-Team: deutsch\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" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" +"_: NOM DES TRADUCTEURS\n" +"Serge Parmentier" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" +"_: ADRESSE DE COURRIER DES TRADUCTEURS\n" +"gerapa@skynet.be" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Un notificateur pop3 performant" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Rafraîchir les messages maintenant" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Charger la boîte de configuration" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail est déjà lancé!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignorer" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Voir la fenêtre principale" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Nouveau message" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "est arrivé !" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Compte:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Serveur:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Serveur" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protocole:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Port:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Utilisateur:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Mot de passe" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +msgid "Don't save" +msgstr "" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "Sauver le password" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Actif" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Sélectionner un compte pop3" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Aucune" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "Expéditeur" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Nouveau compte" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Editer un compte" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Quelle est votre opinion générale à propos de ce programme?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "C'est l'un de mes favoris" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Je l'apprécie" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "Il est quelquefois utile" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Il est moyen" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Pas mal, mais cela pourrait être mieux" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Il est pauvre" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Il est inutile" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "C'est du n'importe quoi" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Quelles fonctions de ce programme appréciez-vous?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Quelle est votre fonction favorite?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Quelles fonctions n'appréciez-vous pas?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Quelles fonctions n'utilisez-vous jamais?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Y a-t-il des fonctions qui vous manquent?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Oui, beaucoup! (ajoutez vos commentaires ci-dessous s.v.p.)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Certaines (ajoutez vos commentaires ci-dessous s.v.p.)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "Il a déjà trop de fonctions!" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Comment évaluez-vous la stabilité de ce programme?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Impossible à planter" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Bonne" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Moyenne" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Faible" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Il se plante à tout bout de champ" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Comment évaluez-vous les performances de ce programme?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Très bonnes" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "C'est lent cela me rend dingue" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Quelle est votre expérience en matière d'ordinateurs en général?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Expert" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Je me débrouille bien" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "J'apprends" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Je suis débutant" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Quelle est votre expérience en matière de systèmes Unix/Linux?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Avez-vous des difficultés à comprendre comment utiliser ce programme?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Pas de problème" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Un peu" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "J'apprends encore" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Je n'ai pas compris que faire en premier lieu" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Je ne sais toujours pas que faire" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Où utilisez-vous le plus ce programme?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "Au travail" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "A la maison" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "A l'université / à l'école" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Quelle est votre occupation principale?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Simple utilisateur" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Etudiant" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Enseignement (instituteur / professseur)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Travail sans lien avec l'informatique" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Développeur" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Administrateur système" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Avez-vous d'autres occupations?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Comment avez-vous connu ce programme?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "Dans un menu de ma machine" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Quelqu'un m'en a parlé" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Sur Internet" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "Dans une revue / un bouquin" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Autre (ajoutez vos commentaires ci-desssous s.v.p.)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Conseilleriez-vous ce programme à un ami?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "Affichage de la liste des messages en général" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "Affichage des en-têtes des messages" + +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "Affichage des messages en entier" + +#: kshowmailfeedback.cpp:136 +#, fuzzy +msgid "Filters" +msgstr "Je me débrouille bien" + +#: kshowmailfeedback.cpp:137 +#, fuzzy +msgid "Manual delete of unwanted messages" +msgstr "Effacement des messages indésirés" + +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "Effacement des messages indésirés" + +#: kshowmailfeedback.cpp:139 +#, fuzzy +msgid "Automatic delete of filtered messages" +msgstr "Effacement des messages indésirés" + +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "Effacement des messages indésirés" + +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "Effacement des messages indésirés" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +#, fuzzy +msgid "White- and Blacklist" +msgstr "&Nettoyer la liste" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Je me débrouille bien" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Ranger les messages par taille, date, etc ..." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Jouer un son" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Jouer un beep" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Chrono initial" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Délai du chrono:" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Ce message de feedback :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +#, fuzzy +msgid "Time Out" +msgstr "Délai de connexion POP3 dépassé" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Message de retour" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Expédier ceci..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Merci de nous dire ce que vous pensez de ce programme.

Vous " +"pourrez tout revoir dans votre programme de courrier électronique avant " +"qu'un message soit envoyé.
Rien ne sera envoyé à votre insu.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Les questions indiquées par " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr "doivent être complétées avant qu'un message soit envoyé." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&Commentaires supplémentaires:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "oui" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "non" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Sujet:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Actions" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Expéditeur:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Date:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Taille:" + +#: kshowmaildock.cpp:37 +#, fuzzy +msgid "KShowmail: a powerful pop3 email checker" +msgstr "Un notificateur pop3 performant" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Sujet" + +#: kcmconfigs/filtercriteriawidget.cpp:30 +#, fuzzy +msgid "Header" +msgstr "Expéditeur" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Comptes" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "Contenu" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +msgid "does not contain" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +msgid "equals" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +msgid "does not equal" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +msgid "matches regular expression" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +msgid "is not equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +msgid "Log mails deleted by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Liste des comptes" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Liste des messages" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "message contenu" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Serveur" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Utilisateur" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Messages" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +#, fuzzy +msgid "Si&ze" +msgstr "Taille" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Numéro" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +#, fuzzy +msgid "Su&bject" +msgstr "Sujet" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Date" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Taille" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Contenu" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Etat" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "permettre HTML" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Nom:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +#: kcmconfigs/configactions.cpp:33 +#, fuzzy +msgid "Action if new &mail" +msgstr "Action en cas de nouveau message" + +#: kcmconfigs/configactions.cpp:34 +#, fuzzy +msgid "Action if &no mail" +msgstr "Action en cas d'absence de mail" + +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Voir la boîte de messages" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Afficher le message en cas de nouveau mail" + +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Voir la fenêtre principale en cas de nouveau message" + +#: kcmconfigs/configactions.cpp:53 +#, fuzzy +msgid "&Beep" +msgstr "Beep" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Beep du haut-parleur interne en cas de nouveau message" + +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Son" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Jouer un son en cas de nouveau message" + +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Jouer le fichier son sélectionné" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Appuyer pour sélectionner le fichier son" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Commande:" + +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Lancer un programme externe cas de nouveau message" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Démarrer le programme sélectionné" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Sélectionner une commande externe" + +#: kcmconfigs/configactions.cpp:84 +#, fuzzy +msgid "Minimi&ze" +msgstr "Minimiser" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimiser la fenêtre si il n'y a pas de nouveau message" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Sortir" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Sortir de kshowmail si il n'y a pas de nouveau message" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Fichiers wave (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Tous les fichiers (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Choisir un fichier son" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Action en cas d'absence de mail" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +#, fuzzy +msgid "Mailbox Select" +msgstr "Liste des messages" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Date" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Actions" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "KShowmail" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Action en cas d'absence de mail" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +#, fuzzy +msgid "Confirm Close" +msgstr "Confirmer l'effacement" + +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Si coché, l'effacement du message devra être confirmé" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Confirmer l'effacement" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Si coché, l'effacement du message devra être confirmé" + +#: kcmconfigs/configgeneral.cpp:52 +#, fuzzy +msgid "Start Minimi&zed" +msgstr "Démarrer minimisé" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "L'application est démarrée sous forme d'icône" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:60 +#, fuzzy +msgid "Minimize to tray" +msgstr "Minimiser" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +#, fuzzy +msgid "&Keep mail as new" +msgstr "Conserver le message comme nouveau" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Conserver le message comme nouveau jusqu'à la sortie" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Chrono initial" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "Secondes avant la première connexion automatique (0 = pas automatique)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervale du chonomètre:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minutes entre les connexions automatiques (0 = pas automatique)" + +#: kcmconfigs/configgeneral.cpp:90 +#, fuzzy +msgid "Timeout:" +msgstr "Délai de connexion POP3 dépassé" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Nouveau message" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Nom:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "EditDialog" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "EditDialog" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Ignorer" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +msgid "Activate Filter" +msgstr "" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +#, fuzzy +msgid "Blacklist" +msgstr "&Nettoyer la liste" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Jouer le fichier son sélectionné" + +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Jouer le fichier son sélectionné" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "nouveau" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "ancien" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +msgid "Deleted Mails:" +msgstr "" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Expéditeur:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Rafraîchissement automatique: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Rafraîchir les messages" + +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "&Montrer l'en-tête du message sélectionné" + +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "Montrer &le message sélectionné en entier" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Effacer les messages sélectionnés" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "A&rrêt du transfert en cours" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "&Dites-nous ce que vous pensez de Kshowmail" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "&Configurer le compte" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Prêt" + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "La tâche a été arrêtée" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 message(s) avec un total de %2 octets en attente" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +msgid "Delete?" +msgstr "" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +#, fuzzy +msgid "Last Refresh: %1" +msgstr "Rafraîchissement automatique: %1" + +#: kshowmail.cpp:523 +#, fuzzy +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"La commande %1 sera effacée.\n" +"Etes-vous sûr ?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +#~ msgid "Execute user commands" +#~ msgstr "Exécuter les commandes utilisateur" + +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Mot de passe" + +#, fuzzy +#~ msgid "Condition" +#~ msgstr "Contenu" + +#, fuzzy +#~ msgid "Contains" +#~ msgstr "Contenu" + +#, fuzzy +#~ msgid "Greater" +#~ msgstr "Très bonnes" + +#, fuzzy +#~ msgid "Counter" +#~ msgstr "Contenu" + +#, fuzzy +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Le compte %1 sera effacé.\n" +#~ "Etes-vous sûr ?" + +#, fuzzy +#~ msgid "Setup &filters" +#~ msgstr "&Configurer les comptes" + +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "La commande %1 sera effacée.\n" +#~ "Etes-vous sûr ?" + +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Le compte %1 sera effacé.\n" +#~ "Etes-vous sûr ?" + +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Le mot de passe sera enregistré sous forme cryptée.\n" +#~ "Il peut être possible de le décrypter.\n" +#~ "Etes-vous sûr ?\n" + +#~ msgid "Message" +#~ msgstr "Message" + +#, fuzzy +#~ msgid "Send reply mail" +#~ msgstr "&Envoyer un mail de réclamation" + +#~ msgid "User command" +#~ msgstr "Commande utilisateur" + +#~ msgid "Menu Entry" +#~ msgstr "Entrée du menu" + +#~ msgid "Press button to select command path" +#~ msgstr "Appuyer sur le bouton pour sélectionner le chemin de la commande" + +#~ msgid "Test" +#~ msgstr "Test" + +#~ msgid "Execute the command immediatly" +#~ msgstr "Executer la commande immédiatement" + +#~ msgid "Wait for command to complete" +#~ msgstr "Attendez la commande pour terminer" + +#~ msgid "Enter menu entry name" +#~ msgstr "Entrez le nom de l'entrée du menu" + +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Entrez le chemin de la commande sélectionnée et des arguments
<" +#~ "user>, <server>, <passwd>, <header> et <body> " +#~ "peuvent êtreutilisés comme arguments
" + +#~ msgid "Server Options" +#~ msgstr "Options du serveur" + +#~ msgid "Password:" +#~ msgstr "Mot de passe:" + +#~ msgid "The account must have a name" +#~ msgstr "Le compte doit avoir un nom" + +#~ msgid "This account is already present" +#~ msgstr "Ce compte existe déjà" + +#~ msgid "Command" +#~ msgstr "Commande:" + +#~ msgid "User commands" +#~ msgstr "Commandes utilisateur" + +#~ msgid "Add user command" +#~ msgstr "Ajouter une commande utilisateur" + +#~ msgid "Edit user command" +#~ msgstr "Editer une commande utilisateur" + +#~ msgid "Copy user command" +#~ msgstr "Copier une commande utilisateur" + +#~ msgid "Delete user command" +#~ msgstr "Effacer une commande utilisateur" + +#~ msgid "Accounts" +#~ msgstr "Comptes" + +#~ msgid "Delete account" +#~ msgstr "Effacer le compte" + +#~ msgid "copy account" +#~ msgstr "Copier le compte" + +#~ msgid "Add new account" +#~ msgstr "Ajouter un nouveau compte" + +#, fuzzy +#~ msgid "&General Options" +#~ msgstr "Options Générales" + +#~ msgid "Save password (not recommended !)" +#~ msgstr "Sauver le mot de passe (pas recommandé !)" + +#~ msgid "Pop3 Timer" +#~ msgstr "Chrono Pop3" + +#~ msgid "Pop3 timeout" +#~ msgstr "Pop3 ne répond pas" + +#~ msgid "Max Size:" +#~ msgstr "Taille maximale:" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Taille maximale des corps des messages en kilobytes" + +#~ msgid "Display Options" +#~ msgstr "Options d'affichage" + +#, fuzzy +#~ msgid "E&xternal Program" +#~ msgstr "Programme externe" + +#~ msgid "Sound File:" +#~ msgstr "Fichier son:" + +#~ msgid "Enter sound file" +#~ msgstr "Entrez le fichier son" + +#~ msgid "Setup &accounts" +#~ msgstr "&Configurer les comptes" + +#~ msgid "Setup &commands" +#~ msgstr "Configurer &les commandes" + +#~ msgid "&Setup" +#~ msgstr "&Configuration" + +#~ msgid "Select Command" +#~ msgstr "Sélectionner une commande" + +#~ msgid "Send complain mails" +#~ msgstr "Envoyer un mail de réclamation" + +#~ msgid "Clear message list by Ctrl-C" +#~ msgstr "Mettre à jour la liste des messages par Ctrl-C" + +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "Forcer le rafraîchissement de tous les messages par Shift-F5" + +#~ msgid "Select account" +#~ msgstr "Sélectionner un compte" + +#~ msgid "EditDialog" +#~ msgstr "EditDialog" + +#, fuzzy +#~ msgid "KShowMailApp" +#~ msgstr "KShowmail" + +#, fuzzy +#~ msgid "KshowmailDoc" +#~ msgstr "KShowmail" + +#, fuzzy +#~ msgid "KShowMailDock" +#~ msgstr "KShowmail" + +#, fuzzy +#~ msgid "KFeedbackDialog" +#~ msgstr "Message de retour" + +#, fuzzy +#~ msgid "KFeedbackForm" +#~ msgstr "Message de retour" + +#, fuzzy +#~ msgid "KFeedbackQuestionList" +#~ msgstr "Message de retour" + +#, fuzzy +#~ msgid "ServerDialog" +#~ msgstr "EditDialog" + +#, fuzzy +#~ msgid "KshowmailView" +#~ msgstr "KShowmail" + +#, fuzzy +#~ msgid "AlertDialog" +#~ msgstr "EditDialog" + +#, fuzzy +#~ msgid "CommandDialog" +#~ msgstr "Commande:" + +#, fuzzy +#~ msgid "CommandEntryDialog" +#~ msgstr "Commande:" + +#~ msgid "Refresh &all messages" +#~ msgstr "Rafraîchir &tous les messages" + +#~ msgid "&Send complain mail" +#~ msgstr "&Envoyer un mail de réclamation" + +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Connexion au serveur %1 ..." + +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "La connexion au serveur pop3 %1 a été établie avec succès" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Délai dépassé: la tâche a été annulée" + +#~ msgid "getting UIDLs ..." +#~ msgstr "Réception des UIDLs ..." + +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "Réception du message %1 sur %2 ..." + +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Effacement des messages sélectionnés ..." + +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Message %1 sur %2 sera effacé.\n" +#~ "Etes-vous sûr ?\n" + +#~ msgid "Yes all" +#~ msgstr "Oui pour tous" + +#~ msgid "Sending complain mails..." +#~ msgstr "Envoi des messages de réclamation..." + +#, fuzzy +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Un message de réclamation sera envoyé pour le message %1 sur %2.\n" +#~ "Etes-vous sûr ?\n" + +#~ msgid "Header %1 at %2" +#~ msgstr "En-tête %1 sur %2" + +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "Réception des messages sélectionnés en entier..." + +#~ msgid "Message %1 at %2" +#~ msgstr "Message %1 sur %2" + +#, fuzzy +#~ msgid "OptionDialog" +#~ msgstr "EditDialog" + +#, fuzzy +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, " +#~ ", \\, \\ and \\ may be used as " +#~ "arguments
" +#~ msgstr "" +#~ "Entrez le chemin de la commande sélectionnée et des arguments\n" +#~ ", , ,
et peuvent êtreutilisés comme " +#~ "arguments" + +#~ msgid "" +#~ "Enter path to selected command and arguments\\n, , " +#~ ",
and may be used as arguments" +#~ msgstr "" +#~ "Entrez le chemin de la commande sélectionnée et des arguments\\n, " +#~ ", ,
et peuvent êtreutilisés comme " +#~ "arguments" + +#, fuzzy +#~ msgid "Ignore case" +#~ msgstr "Ignorer" + +#~ msgid "PasswordDlg" +#~ msgstr "PasswordDlg" + +#~ msgid "PasswordDialog" +#~ msgstr "PasswordDialog" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..58f500c --- /dev/null +++ b/po/hu.po @@ -0,0 +1,1934 @@ +# translation of hu.po to deutsch +# translation of hu.po to Hungarian +# translation of kshowmail.po to Hungarian +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# Sandor Laza , 2003. +# Eggert Ehmke , 2003, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: hu\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2004-02-02 22:23+0100\n" +"Last-Translator: Eggert Ehmke \n" +"Language-Team: deutsch\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" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Sándor Laza" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "slaza@xs4all.nl" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Egy sokoldalú pop3 póstaláda figyelő" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Frissítsd az üzeneteket most" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Indítsd a beállítás dialógust" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail már fut!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Érdektelen" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Mutasd meg" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Új üzenet" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "érkezett !" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Póstaláda:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Szerver:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Szerver" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protokol:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Port:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Felhasználó:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Jelszó" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +#, fuzzy +msgid "Don't save" +msgstr "Nem egyenlő" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "Jelszó Tárolása" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Aktív" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Válssz pop3 póstaládát" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Semmi" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "Feladó" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Új póstaláda" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Póstaláda módosítása" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Mi a véleményed erről a programról általánosságban?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "Ez az egyik kedvencem" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Szeretem" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "Néha hasznos" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Átlagos" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Jó próbálkozás, de lehetne jobb is" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Gyenge" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Használhatatlan" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Vacak" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Melyik szolgáltatásokat szereted?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Melyik a kedvenc szolgáltatásod?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Melyik szolgáltatásokat nem szereted?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Melyek azok a szolgáltatások amelyeket sosem használsz?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Mely szolgáltatások hiányoznak?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Igen, rengeteg! (Kérlek írd le a megjegyzésed itt alul)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Néhány (Kérlek írd le a megjegyzésed itt alul)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "Már amúgyis túl sok szolgáltatást nyújt!" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Hogyan értékelnéd a program stabilitását?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Szikla szilárd" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Jó" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Átlagos" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Gyenge" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Állandóan elszáll" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Hogyan értékeled a program teljesítményét?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Nagyszerű" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Olyan lassú, hogy őrület" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Mennyire vagy járatos a számítástechnikában?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Szakértő" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Meglehetősen" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Tanulom" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Újonc" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Mennyire vagy járatos UNIX/Linux rendszerekben?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Problémát okozott annak kiderítése, hogy hogyan használd a programot?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Semmi gond" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Valamennyire" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Még mindíg csak tanulom" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Először fogalmam sem volt, hogy mit csináljak" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Még mindíg fogalmam sincs, hogy mit csináljak" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Hol használod leggyakrabban a programot?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "Munkahelyen" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "Otthon" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "Egyetemen / iskolában" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Mitvel foglalkozol ott?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Otthoni felhasználó" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Tanuló" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Oktató (tanár / professzor )" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Nem-számítástechnikával kapcsolatos" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Fejlesztő" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Rendszeradminisztrátor" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Foglalkozol egyéb dologgal is?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Hogyan jutottál a programhoz?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "A gépemen egy menüpontból" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Valaki említette" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Az internetről" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "Nyomtatott újságból / könyvből" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Más forrásból (Kérlek írd le a megjegyzésed itt alul)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Ajánlanád ezt a programot a barátaidnak?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "Az üzenetlista általánosságban" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "Az üzenetfejlécek megjelenítése" + +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "A teljes üzenet megjelenítése" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Szűrők" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "A felesleges üzenetek kézi törlése" + +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "A kiszűrt üzenetek automatikus törlése" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "A kiszűrt üzenetek automatikus törlése" + +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "A kiszűrt üzenetek automatikus törlése" + +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "A kiszűrt üzenetek kézi törlése" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +#, fuzzy +msgid "White- and Blacklist" +msgstr "L&ista törlése" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Szűrő" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "Üzenetek szűrése szabványos kifejezésekkel" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Üzenetek rendezése méret, dátum stb. szerint" + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Dallam játszása" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Sípolás" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Kezdeti időzítő" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Intervallum időzítő" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Ez a felmérés :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +#, fuzzy +msgid "Time Out" +msgstr "Idő" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Vélemény" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Póstázd ezt..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Kérem mondjátok el a véleményeteket a pogramról.

Elküldés " +"előtt lhetőséged lessz mindent átnézni a levelezőprogramodban.
Semmi sem " +"kerül elküldésre a tudtod nélkül.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Az így jelölt kérdések " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr " megválaszolása kötelező mielőtt a levél elküldésre kerülhetne. " + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&További kívánságok:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "igen" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "nem" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Tárgy:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Tevékenységek" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Válasz" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Feladó:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Dátum:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Méret:" + +#: kshowmaildock.cpp:37 +#, fuzzy +msgid "KShowmail: a powerful pop3 email checker" +msgstr "Egy sokoldalú pop3 póstaláda figyelő" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "Feladó" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "Címzett" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Tárgy" + +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Fejléc" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Póstaláda" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "Tartalmaz" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +#, fuzzy +msgid "does not contain" +msgstr "Nem tartalmaz" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +#, fuzzy +msgid "equals" +msgstr "Egyenlő" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +#, fuzzy +msgid "does not equal" +msgstr "Nem egyenlő" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +#, fuzzy +msgid "matches regular expression" +msgstr "Szabványos kifejezés módosítása" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +#, fuzzy +msgid "is not equal to" +msgstr "Nem egyenlő" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "Betűnagyság érzékeny" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +#, fuzzy +msgid "Log mails deleted by filter" +msgstr "Szűrő törlése" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Póstaláda lista" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Üzenet lista" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Üzenet tartalom" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Szerver" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Felhasználó" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Üzenetek száma" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +#, fuzzy +msgid "Si&ze" +msgstr "Méret" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Sorszám" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +#, fuzzy +msgid "Su&bject" +msgstr "Tárgy" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Dátum" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Méret" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Tartalom" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Állapot" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "HTML engedélyezése" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Név:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +#: kcmconfigs/configactions.cpp:33 +#, fuzzy +msgid "Action if new &mail" +msgstr "Teendő új üzenet érkezésekor" + +#: kcmconfigs/configactions.cpp:34 +#, fuzzy +msgid "Action if &no mail" +msgstr "Teendő ha nincs új üzenet" + +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Üzenj" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Üzenj ha új üzenet érkezett" + +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "A főablak megnyitása, ha új üzenet érkezett" + +#: kcmconfigs/configactions.cpp:53 +#, fuzzy +msgid "&Beep" +msgstr "Sípolj" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Sípol a belső hangszórón keresztül, ha új üzenet érkezett" + +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Dallam" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Játssz dallamot, ha új levél érkezett" + +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Játszd le a kiválasztott dallam állományt" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Nyomd meg a gombot a dalam állomány kiválasztásához" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Parancs:" + +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Indíts külső programot, ha új levél érkezett" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Indítsd a programot" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Válassz külső programot" + +#: kcmconfigs/configactions.cpp:84 +#, fuzzy +msgid "Minimi&ze" +msgstr "Minimalizálás" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimalizáld az ablakot, ha nincs új üzenet" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Kilépés" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Kshowmail leállítása, ha nincs új üzenet" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Wave állományok (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Minden állomány (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Válasszon hang állományt" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Teendő ha nincs új üzenet" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +#, fuzzy +msgid "Mailbox Select" +msgstr "Üzenet lista" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Dátum" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Tevékenységek" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "KShowmail" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Teendő ha nincs új üzenet" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Bezárás Jóváhagyása" + +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Ha be van kapcsolva, akkor az üzenetek törlését jóvá kell hagyni" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Törlés jóváhagyása" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Ha be van kapcsolva, akkor az üzenetek törlését jóvá kell hagyni" + +#: kcmconfigs/configgeneral.cpp:52 +#, fuzzy +msgid "Start Minimi&zed" +msgstr "Minimalizált formában indul" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Az alkalmazás ikonizált formában indul" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:60 +#, fuzzy +msgid "Minimize to tray" +msgstr "Minimalizálás" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +#, fuzzy +msgid "&Keep mail as new" +msgstr "Őrizd meg az üzenetet mint újat" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Őrizd meg az üzenetet mint újat a program befejezéséig" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Kezdeti Időzítő:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "" +"Másodpercek az első automatikus bejelentkezésig (0 = nincs automatikus)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervallum Időzítő:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "" +"Másodpercek az automatikus bejelentkezések között (0 = nincs automatikus)" + +#: kcmconfigs/configgeneral.cpp:90 +#, fuzzy +msgid "Timeout:" +msgstr "Idő" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Új szűrő " + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Szűrő módosítása" + +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Név:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "Szűrő állapot" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "FilterDialog" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Érdektelen" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +#, fuzzy +msgid "Activate Filter" +msgstr "Szűrő módosítása" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +#, fuzzy +msgid "Blacklist" +msgstr "L&ista törlése" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Játszd le a kiválasztott dallam állományt" + +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Játszd le a kiválasztott dallam állományt" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "új" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "régi" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +#, fuzzy +msgid "Deleted Mails:" +msgstr "Szűrő törlése" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Feladó:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Automatikus frissítés: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "Üzenetek &frissítése" + +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "A kijelölt üzenetek fej&lécének megjelenítése" + +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "A kijelölt üzenetek &teljes tartalmának megjelenítése" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "A kijelölt &üzenetek törlése" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "A folyamatban levő átvitel &megszakítása" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "&Vélemény küldése" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "&Póstaládák beállítása" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Kész." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "A munkafolyamat megállításra került." + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 üzenet várakozik, összesen %2 byte-nyi információval" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +#, fuzzy +msgid "Delete?" +msgstr "Törölve" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +#, fuzzy +msgid "Last Refresh: %1" +msgstr "Automatikus frissítés: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"KShowmail futása befejeződik.\n" +"Biztos vagy benne?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +#~ msgid "Execute user commands" +#~ msgstr "Felhasználói parancsok futtatása" + +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Jelszó" + +#~ msgid "Condition" +#~ msgstr "Feltétel" + +#~ msgid "Contains" +#~ msgstr "Tartalmaz" + +#~ msgid "Doesn't contain" +#~ msgstr "Nem tartalmaz" + +#~ msgid "Equals" +#~ msgstr "Egyenlő" + +#~ msgid "Doesn't equal" +#~ msgstr "Nem egyenlő" + +#~ msgid "Greater" +#~ msgstr "Nagyobb" + +#~ msgid "Less" +#~ msgstr "Kisebb" + +#~ msgid "No more Conditions" +#~ msgstr "Nincs több Feltétel" + +#~ msgid "And" +#~ msgstr "És" + +#~ msgid "Or" +#~ msgstr "Vagy" + +#~ msgid "Edit regular expression" +#~ msgstr "Szabványos kifejezés módosítása" + +#~ msgid "Regular Expression" +#~ msgstr "Szabványos Kifejezés" + +#~ msgid "For help about regular expressions lookup the Qt documentation" +#~ msgstr "" +#~ "Szabványos kifejezésekkel kapcsolatos segítséget a Qt dokumentációból " +#~ "kaphatsz" + +#~ msgid "second Condition" +#~ msgstr "második Feltétel" + +#~ msgid "Counter" +#~ msgstr "Számláló" + +#~ msgid "" +#~ "Filters are counted for each automatic deletion;
Filters with high " +#~ "counters are listed first
" +#~ msgstr "" +#~ "A program számontartja hogy a szűrők hányszor voltak használva " +#~ "automatikus törlések során;
A gyakrabban használt szűrők hamarabb " +#~ "kerülnek felsorolásra a listán
" + +#~ msgid "Reset Counter" +#~ msgstr "Számláló Újraindítása" + +#~ msgid "Filter Status" +#~ msgstr "Szűrő állapot" + +#~ msgid "Filters are switched off" +#~ msgstr "Kikapcsolt szűrők" + +#~ msgid "Filters are switched on" +#~ msgstr "Bekapcsolt szűrők" + +#~ msgid "Automatic Delete" +#~ msgstr "Automatikus Törlés" + +#~ msgid "Filters are switched on and are applied automatically" +#~ msgstr "A bekapcsolt szűrők automatikusan alkalmazásra kerülnek" + +#~ msgid "Add filter" +#~ msgstr "Új szűrő " + +#~ msgid "Copy filter" +#~ msgstr "Szűrő másolása" + +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Szűrő %1 törlésre kerül.\n" +#~ "Biztos vagy benne ?" + +#~ msgid "" +#~ "Automatic filters can cause loss of important mails.\n" +#~ "Please test your filters.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Az autómatikus szűrők fontos üzenetek elvesztését okozhatják.\n" +#~ "Kérlek próbáld ki alaposan a szűrőket.\n" +#~ "Biztos vagy benne ?" + +#~ msgid "" +#~ "Your conditions contain empty match strings.\n" +#~ "This will not work." +#~ msgstr "" +#~ "A feltételeid üres keresési mintát tartalmaznak.\n" +#~ "Ez nem fog működni." + +#~ msgid "Setup &filters" +#~ msgstr "&Szűrők beállítása" + +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Parancs %1 törlésre kerül. \n" +#~ "Biztos vagy benne?" + +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "A %1 póstaláda törlésre fog kerülni.\n" +#~ "Biztos vagy benne?" + +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "A jelszó összekevert formában kerül tárolásra.\n" +#~ "Visszafejtése lehetséges.\n" +#~ "Biztos benne ?\n" + +#~ msgid "Message" +#~ msgstr "Üzenet" + +#~ msgid "Send reply mail" +#~ msgstr "Válaszlevél küldése" + +#~ msgid "User command" +#~ msgstr "Felhasználói parancs" + +#~ msgid "Menu Entry" +#~ msgstr "Kézi Bevitel" + +#~ msgid "Press button to select command path" +#~ msgstr "Nyomd meg a gombot a parancs ótvonal beállításához" + +#~ msgid "Test" +#~ msgstr "Próba" + +#~ msgid "Execute the command immediatly" +#~ msgstr "A parancs azonnali végrehajtása" + +#~ msgid "Wait for command to complete" +#~ msgstr "Várakozás a parancs befejezésére" + +#~ msgid "Enter menu entry name" +#~ msgstr "Add meg a menüelem nevét" + +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Add meg az utat a kiválasztott parancsokhoz és paraméterekhez
<" +#~ "user>, <server>, <passwd>, <header> és <body> " +#~ "használható mint paraméter
" + +#~ msgid "Server Options" +#~ msgstr "Szerver Beállítások" + +#~ msgid "Password:" +#~ msgstr "Jelszó:" + +#~ msgid "The account must have a name" +#~ msgstr "A póstaládát el kell nevezni valahogy" + +#~ msgid "This account is already present" +#~ msgstr "Ilyen nevű póstaláda már létezik" + +#~ msgid "Command" +#~ msgstr "Parancs" + +#~ msgid "User commands" +#~ msgstr "Felhasználói parancsok" + +#~ msgid "Add user command" +#~ msgstr "Új felhasználói parancs" + +#~ msgid "Edit user command" +#~ msgstr "Felhasználói parancs módosítása" + +#~ msgid "Copy user command" +#~ msgstr "Felhasználói parancs másolása" + +#~ msgid "Delete user command" +#~ msgstr "Felhasználói parancs törlése" + +#~ msgid "Accounts" +#~ msgstr "Póstaládák" + +#~ msgid "Delete account" +#~ msgstr "Póstaláda törlése" + +#~ msgid "copy account" +#~ msgstr "póstaláda másolása" + +#~ msgid "Add new account" +#~ msgstr "Új bejelentkezás hozzáadáasa" + +#, fuzzy +#~ msgid "&General Options" +#~ msgstr "Általános Beállítások" + +#~ msgid "Save password (not recommended !)" +#~ msgstr "Jelszó tárolása (nem ajánlott !)" + +#~ msgid "Pop3 Timer" +#~ msgstr "Pop3 Időzítő" + +#~ msgid "Pop3 timeout" +#~ msgstr "Pop3 időtúllépés" + +#~ msgid "Max Size:" +#~ msgstr "Maximális méret:" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Az üzenetekből letöltött maximális mennyiség kilobyte-okban" + +#~ msgid "Display Options" +#~ msgstr "Megjelenítés beállítások" + +#, fuzzy +#~ msgid "E&xternal Program" +#~ msgstr "Külső program" + +#~ msgid "Sound File:" +#~ msgstr "Dallam:" + +#~ msgid "Enter sound file" +#~ msgstr "Add meg a dallam állományt" + +#~ msgid "Setup &accounts" +#~ msgstr "&Póstaládák beállítása" + +#~ msgid "Setup &commands" +#~ msgstr "P&arancsok beállítása" + +#~ msgid "&Setup" +#~ msgstr "&Beállítások" + +#~ msgid "Select Command" +#~ msgstr "Parancs Kiválasztása" + +#~ msgid "Send complain mails" +#~ msgstr "Reklamációk küldése" + +#~ msgid "Clear message list by Ctrl-C" +#~ msgstr "Üzenetlista törlése Ctrl-C -vel" + +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "Összes üzenet frissítésének kikényszerítése Shift-F5 -tel" + +#~ msgid "Select account" +#~ msgstr "Válassz póstaládát" + +#~ msgid "EditDialog" +#~ msgstr "EditDialog" + +#~ msgid "KShowMailApp" +#~ msgstr "KShowMailApp" + +#~ msgid "KshowmailDoc" +#~ msgstr "KshowmailDoc" + +#~ msgid "KShowMailDock" +#~ msgstr "KShowMailDock" + +#~ msgid "KFeedbackDialog" +#~ msgstr "KFeedbackDialog" + +#~ msgid "KFeedbackForm" +#~ msgstr "KFeedbackForm" + +#~ msgid "KFeedbackQuestionList" +#~ msgstr "KFeedbackQuestionList" + +#~ msgid "FilterEntryDialog" +#~ msgstr "FilterEntryDialog" + +#~ msgid "ServerDialog" +#~ msgstr "ServerDialog" + +#~ msgid "KshowmailView" +#~ msgstr "KshowmailView" + +#~ msgid "AlertDialog" +#~ msgstr "AlertDialog" + +#~ msgid "CommandDialog" +#~ msgstr "CommandDialog" + +#~ msgid "CommandEntryDialog" +#~ msgstr "CommandEntryDialog" + +#~ msgid "Refresh &all messages" +#~ msgstr "Az &összes üzenet frissítése" + +#~ msgid "&Send complain mail" +#~ msgstr "&Reklamáció küldése" + +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Bejelentkezés a %1 szerverre ..." + +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "Sikeresen létrejött a kapcsolat a %1 szerverrel" + +#~ msgid "POP3 Timeout" +#~ msgstr "POP3 kifutott az időből" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Időtúllépés: a munkafolyamat beszüntetésre került" + +#~ msgid "getting UIDLs ..." +#~ msgstr "UIDL-ek fogadása ..." + +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "Üzenet %1 fogadása a(z) %2 póstaládából ..." + +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Kijelölt üzenetek törlése folyamatban ..." + +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Üzenet %1 a(z) %2 postaládábó törlésre kerül.\n" +#~ "Biztos vagy benne?\n" + +#~ msgid "Yes all" +#~ msgstr "Igen, mindet" + +#~ msgid "Sending complain mails..." +#~ msgstr "Reklamációk küldése folyamatban..." + +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Reklamáló levelet fogsz küldenia a(z) %1 . üzenetre a %2 póstaládából.\n" +#~ "Biztos vagy benne? \n" + +#~ msgid "Header %1 at %2" +#~ msgstr "%1. fejléc a %2 -ből" + +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "A kijekölt üzenetek teljes tartalmának fogadása..." + +#~ msgid "Message %1 at %2" +#~ msgstr "%1. üzenet a %2-ból" + +#~ msgid "OptionDialog" +#~ msgstr "OptionDialog" + +#, fuzzy +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, " +#~ ", \\, \\ and \\ may be used as " +#~ "arguments
" +#~ msgstr "" +#~ "Add meg az utat a kiválasztott parancsokhoz és paraméterekhez\n" +#~ ", , ,
és használható mint paraméter" + +#~ msgid "" +#~ "Enter path to selected command and arguments\\n, , " +#~ ",
and may be used as arguments" +#~ msgstr "" +#~ "Add meg az utat a kiválasztott parancsokhoz és paraméterekhez\\n, " +#~ ", ,
és használható mint paraméter" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..60fb137 --- /dev/null +++ b/po/it.po @@ -0,0 +1,1895 @@ +# translation of it.po to deutsch +# translation of it.po to italiano +# No0tic , 2004. +# Eggert Ehmke , 2004. +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2004-02-02 22:24+0100\n" +"Last-Translator: Eggert Ehmke \n" +"Language-Team: deutsch\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Gabriele Postorino" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "g.posto@tin.it" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Un potente controllore di posta pop3" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Aggiorna i messaggi ora" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Configura..." + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail è già avviato!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "Kshowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignora" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Mostra la finestra principale" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "E' arrivata" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "nuova posta !" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Account:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Server:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Server" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protocollo:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Porta:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Utente:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Password" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +#, fuzzy +msgid "Don't save" +msgstr "Diverso" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "Salva Password" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Attivo" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Seleziona un account pop3" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Nessuna" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "Opzioni Generali" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Nuovo account" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Modifica Account" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Qual'è la tua opinione generale sul programma?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "E' uno dei miei preferiti" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Mi piace" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "A volte è utile" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "E' nella media" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Buon inizio, ma potrebbe essere fatto meglio" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "E' scarso" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "E' inutile" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Fa schifo" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Quali caratteristiche ti piacciono del programma?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Qual è la caratteristica che preferisci?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Quali caratteristiche non ti piacciono?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Quali caratteristiche non usi mai?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Pensi che manchino delle caratteristiche?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Si, molte! (Aggiungi un commento...)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Alcune (Aggiungi un commento...)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "Ha già molte funzioni!" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Come reputi la stabilità del programma?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Solido come una roccia" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Buona" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Nella media" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Scarsa" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Si pianta continuamente" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Come reputi le performance del programma?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Ottime" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Mi fa impazzire da quanto è lento" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Qual è la tua esperienza con i computer in generale?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Esperto" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Buona" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Sto imparando" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Neofita" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Qual è la tua esperienza con i sistemi Unix/Linux?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Hai avuto problemi a capire come funzionasse il programma?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Nessun problema" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Alcuni" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Sto ancora imparando" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Non ne avevo idea all'inizio" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Non ne ho tutt'ora idea" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Dove usi questo programma principalmente?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "A lavoro" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "A casa" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "All'università / A scuola" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Qual è il tuo ruolo principale là? " + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Utente casalingo" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Studente" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Educativo (insegnante / professore)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Un lavoro non relativo ai computer" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Sviluppatore" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Amministratore di sistema" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Hai altri ruoli là?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Come sei venuto a conoscenza del programma?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "Su un menu nel mio computer" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Qualcuno me ne ha parlato" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Su internet" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "Rivista stampata / libro" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Altro (aggiungi un commento...)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Consiglieresti questo programma ad un amico?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "La visualizzazione della lista dei messaggi in generale" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "La visualizzazione delle intestazioni dei messaggi" + +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "La visualizzazione completa dei messaggi" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Filtri" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "L'eliminazione manuale dei messaggi indesiderati" + +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "L'eliminazione automatica dei messaggi filtrati" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "L'eliminazione automatica dei messaggi filtrati" + +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "L'eliminazione automatica dei messaggi filtrati" + +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "L'eliminazione manuale dei messaggi filtrati" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +#, fuzzy +msgid "White- and Blacklist" +msgstr "&Cancella lista" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Filtro" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "I filtri per i messaggi attraverso espressioni regolari" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Disposizione dei messaggi per dimensione, data ecc." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Avviso sonoro" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Avviso con il beep" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Timer iniziale" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Aggiornamento automatico ogni tot minuti" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Questo sondaggio :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +#, fuzzy +msgid "Time Out" +msgstr "Ora" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Feedback" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Invia..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Per favore inviaci la tua opinione su questo programma

Potrai controllare tutto nel tuo programma di posta prima di inviare il " +"feedback.
Nulla verrà spedito senza il tuo consenso.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Alle domande segnate con " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr " devi rispondere prima di poter mandare l'email." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&Commenti aggiuntivi:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "si" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "no" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Oggetto:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Azioni" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Rispondi" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Mittente:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Data:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Dimensione:" + +#: kshowmaildock.cpp:37 +#, fuzzy +msgid "KShowmail: a powerful pop3 email checker" +msgstr "Un potente controllore di posta pop3" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "Da" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "A" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Oggetto" + +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Intestazione" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Account" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "Contiene" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +#, fuzzy +msgid "does not contain" +msgstr "Non contiene" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +#, fuzzy +msgid "equals" +msgstr "Uguale" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +#, fuzzy +msgid "does not equal" +msgstr "Diverso" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +#, fuzzy +msgid "matches regular expression" +msgstr "Modifica espressione regolare" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +#, fuzzy +msgid "is not equal to" +msgstr "Diverso" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "Case sensitive" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +#, fuzzy +msgid "Log mails deleted by filter" +msgstr "Elimina filtro" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Lista Account" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Lista email" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Contenuto Email" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Server" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Utente" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Messaggi" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +#, fuzzy +msgid "Si&ze" +msgstr "Dimensione" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Numero" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +#, fuzzy +msgid "Su&bject" +msgstr "Oggetto" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Data" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Dimensione" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Contenuti" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Stato" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "Ammetti HTML" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Nome:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +#: kcmconfigs/configactions.cpp:33 +#, fuzzy +msgid "Action if new &mail" +msgstr "Azione in caso di nuove email" + +#: kcmconfigs/configactions.cpp:34 +#, fuzzy +msgid "Action if &no mail" +msgstr "Azione in caso di nessuna mail" + +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Visualizza il box dei messaggi" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Visualizza il messaggio se arrivano nuove email" + +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Visualizza la finestra principale se arrivano nuove email" + +#: kcmconfigs/configactions.cpp:53 +#, fuzzy +msgid "&Beep" +msgstr "Bip" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Bip con l'altoparlante interno in caso di nuova posta" + +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Suono" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Esegui un suono in caso di nuove email" + +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Esegui il file audio selezionato" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Clicca per selezionare il file audio" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Comando:" + +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Avvia un programma esterno se arriva nuova posta" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Avvia il programma selezionato" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Seleziona comando esterno" + +#: kcmconfigs/configactions.cpp:84 +#, fuzzy +msgid "Minimi&ze" +msgstr "Minimizza" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimizza se non ci sono email" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Termina" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Termina kshowmail se non ci sono email" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Files Wave (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Tutti i files (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Seleziona un File Audio" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Azione in caso di nessuna mail" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +#, fuzzy +msgid "Mailbox Select" +msgstr "Lista email" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Data" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Azioni" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "Kshowmail" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Azione in caso di nessuna mail" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Conferma la chiusura" + +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Se attivo, l'eliminazione dei messaggi deve essere confermata" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Conferma eliminazione" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Se attivo, l'eliminazione dei messaggi deve essere confermata" + +#: kcmconfigs/configgeneral.cpp:52 +#, fuzzy +msgid "Start Minimi&zed" +msgstr "Avvia minimizzato" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "L'applicazione è avviata iconificata" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:60 +#, fuzzy +msgid "Minimize to tray" +msgstr "Minimizza" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +#, fuzzy +msgid "&Keep mail as new" +msgstr "Mantieni email come nuove" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Mantieni email come nuove fino alla chiusura" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Timer Iniziale:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "Secondi prima del primo logon automatico (0 = non automatico)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervallo:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minuti tra due logon automatici (0 = non automatico)" + +#: kcmconfigs/configgeneral.cpp:90 +#, fuzzy +msgid "Timeout:" +msgstr "Ora" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Aggiungi filtro" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Modifica filtro" + +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Nome:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "Stato dei filtri" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "Filtro" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Ignora" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +#, fuzzy +msgid "Activate Filter" +msgstr "Modifica filtro" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +#, fuzzy +msgid "Blacklist" +msgstr "&Cancella lista" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Esegui il file audio selezionato" + +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Esegui il file audio selezionato" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "nuovo" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "vecchio" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +#, fuzzy +msgid "Deleted Mails:" +msgstr "Elimina filtro" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Mittente:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Aggiorna automaticamente: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Aggiorna messaggi" + +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "Visualizza le &intestazioni dei messaggi selezionati" + +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "Visualizza &completamente i messaggi selezionati" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Elimina i messaggi selezionati" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "&Ferma trasferimento corrente" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "Invia un &Feedback..." + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "Configura &account" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Pronto." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "Il processo è stato fermato" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 messaggio/i per un totale di %2 bytes in attesa" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +#, fuzzy +msgid "Delete?" +msgstr "Eliminato" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +#, fuzzy +msgid "Last Refresh: %1" +msgstr "Aggiorna automaticamente: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"KShowmail verrà chiuso.\n" +"Sei sicuro?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +#~ msgid "Execute user commands" +#~ msgstr "L'esecuzione di comandi definiti dall'utente" + +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Password" + +#~ msgid "Condition" +#~ msgstr "Condizione" + +#~ msgid "Contains" +#~ msgstr "Contiene" + +#~ msgid "Doesn't contain" +#~ msgstr "Non contiene" + +#~ msgid "Equals" +#~ msgstr "Uguale" + +#~ msgid "Doesn't equal" +#~ msgstr "Diverso" + +#~ msgid "Greater" +#~ msgstr "Maggiore di" + +#~ msgid "Less" +#~ msgstr "Minore di" + +#~ msgid "No more Conditions" +#~ msgstr "Nessun'altra condizione" + +#~ msgid "And" +#~ msgstr "E" + +#~ msgid "Or" +#~ msgstr "O" + +#~ msgid "Edit regular expression" +#~ msgstr "Modifica espressione regolare" + +#~ msgid "Regular Expression" +#~ msgstr "Espressione Regolare" + +#~ msgid "For help about regular expressions lookup the Qt documentation" +#~ msgstr "Per aiuto sulle espressioni regolari guarda la documentazione di Qt" + +#~ msgid "second Condition" +#~ msgstr "Seconda condizione" + +#~ msgid "Counter" +#~ msgstr "Contatore" + +#~ msgid "" +#~ "Filters are counted for each automatic deletion;
Filters with high " +#~ "counters are listed first
" +#~ msgstr "" +#~ "I filtri sono numerati per ogni eliminazione automatica;
Filtri " +#~ "con un numero maggiore sono mostrati per primi
" + +#~ msgid "Reset Counter" +#~ msgstr "Resetta il Contatore" + +#~ msgid "Filter Status" +#~ msgstr "Stato dei filtri" + +#~ msgid "Filters are switched off" +#~ msgstr "I filtri sono disattivati" + +#~ msgid "Filters are switched on" +#~ msgstr "I filtri sono attivi" + +#~ msgid "Automatic Delete" +#~ msgstr "Elimina Automaticamente" + +#~ msgid "Filters are switched on and are applied automatically" +#~ msgstr "I filtri sono attivi e sono applicati automaticamente" + +#~ msgid "Add filter" +#~ msgstr "Aggiungi filtro" + +#~ msgid "Copy filter" +#~ msgstr "Copia filtro" + +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Il filtro %1 sarà eliminato.\n" +#~ "Sei sicuro ?" + +#~ msgid "" +#~ "Automatic filters can cause loss of important mails.\n" +#~ "Please test your filters.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "I filtri automatici posso causare la perdita di email importanti.\n" +#~ "Per favore prova i tuoi filtri.\n" +#~ "Sei sicuro?" + +#~ msgid "" +#~ "Your conditions contain empty match strings.\n" +#~ "This will not work." +#~ msgstr "" +#~ "Le condizioni contengono stringhe vuote.\n" +#~ "Così non funzionerà." + +#~ msgid "Setup &filters" +#~ msgstr "Configura i &filtri" + +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Il comando %1 sarà eliminato.\n" +#~ "Sei sicuro?" + +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "L'account %1 sarà cancellato.\n" +#~ "Sei sicuro?" + +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "La password sarà salvata come testo criptato.\n" +#~ "Potrebbe essere possibile decifrarlo.\n" +#~ "Sei sicuro?\n" + +#~ msgid "Message" +#~ msgstr "Messaggio" + +#~ msgid "Send reply mail" +#~ msgstr "Invia l'email di risposta" + +#~ msgid "User command" +#~ msgstr "Comando utente" + +#~ msgid "Menu Entry" +#~ msgstr "Elemento del menu" + +#~ msgid "Press button to select command path" +#~ msgstr "Premi il bottone per selezionare il percorso del comando" + +#~ msgid "Test" +#~ msgstr "Prova" + +#~ msgid "Execute the command immediatly" +#~ msgstr "Esegui il comando immediatamente" + +#~ msgid "Wait for command to complete" +#~ msgstr "Aspetta che il comando abbia finito" + +#~ msgid "Enter menu entry name" +#~ msgstr "Inserisci il nome dell'elemento del menu" + +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Inserisci il percorso per il comando selezionato e i suoi " +#~ "argomenti
<utente>, <server>, <passwd>, <" +#~ "intestazione>, e <corpo> possono essere utilizzati come " +#~ "argomenti
" + +#~ msgid "Server Options" +#~ msgstr "Opzioni Server" + +#~ msgid "Password:" +#~ msgstr "Password:" + +#~ msgid "The account must have a name" +#~ msgstr "L'account deve avere un nome" + +#~ msgid "This account is already present" +#~ msgstr "Questo account è già presente" + +#~ msgid "Command" +#~ msgstr "Comando" + +#~ msgid "User commands" +#~ msgstr "Comando utente" + +#~ msgid "Add user command" +#~ msgstr "Aggiungi comando utente" + +#~ msgid "Edit user command" +#~ msgstr "Modifica comando utente" + +#~ msgid "Copy user command" +#~ msgstr "Copia comando utente" + +#~ msgid "Delete user command" +#~ msgstr "Elimina comando utente" + +#~ msgid "Accounts" +#~ msgstr "Accounts" + +#~ msgid "Delete account" +#~ msgstr "Elimina account" + +#~ msgid "copy account" +#~ msgstr "Copia account" + +#~ msgid "Add new account" +#~ msgstr "Aggiungi un nuovo account" + +#~ msgid "Save password (not recommended !)" +#~ msgstr "Salva password (non consigliato!)" + +#~ msgid "Pop3 Timer" +#~ msgstr "Timer Pop3" + +#~ msgid "Pop3 timeout" +#~ msgstr "Pop3 timeout" + +#~ msgid "Max Size:" +#~ msgstr "Dimensione Massima" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Massima dimensione delle email scaricate in kilobytes" + +#~ msgid "Display Options" +#~ msgstr "Visualizza opzioni" + +#, fuzzy +#~ msgid "E&xternal Program" +#~ msgstr "Programma Esterno" + +#~ msgid "Sound File:" +#~ msgstr "Fila Audio:" + +#~ msgid "Enter sound file" +#~ msgstr "Inserisci file audio" + +#~ msgid "Setup &accounts" +#~ msgstr "Configura &accounts" + +#~ msgid "Setup &commands" +#~ msgstr "C&onfigura i comandi" + +#~ msgid "&Setup" +#~ msgstr "&Configura" + +#~ msgid "Select Command" +#~ msgstr "Seleziona comando" + +#~ msgid "Send complain mails" +#~ msgstr "L'invio di messaggi di lamentela" + +#~ msgid "Clear message list by Ctrl-C" +#~ msgstr "Cancellazione della lista dei messaggi con Ctrl-C" + +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "Aggiornamento forzato con Shift-F5" + +#~ msgid "Select account" +#~ msgstr "Seleziona account" + +#, fuzzy +#~ msgid "KShowMailApp" +#~ msgstr "Kshowmail" + +#, fuzzy +#~ msgid "KshowmailDoc" +#~ msgstr "Kshowmail" + +#, fuzzy +#~ msgid "KShowMailDock" +#~ msgstr "Kshowmail" + +#, fuzzy +#~ msgid "KFeedbackDialog" +#~ msgstr "Feedback" + +#, fuzzy +#~ msgid "KFeedbackForm" +#~ msgstr "Feedback" + +#, fuzzy +#~ msgid "ServerDialog" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "KshowmailView" +#~ msgstr "Kshowmail" + +#, fuzzy +#~ msgid "CommandDialog" +#~ msgstr "Comando" + +#~ msgid "Refresh &all messages" +#~ msgstr "Aggiorna &tutti i messaggi" + +#~ msgid "&Send complain mail" +#~ msgstr "&Invia email di lamentele" + +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Connessione al server %1 ..." + +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "connessione al server pop3 %1 stabilita con successo" + +#~ msgid "POP3 Timeout" +#~ msgstr "POP3 Timeout" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Timeout: processo terminato" + +#~ msgid "getting UIDLs ..." +#~ msgstr "ricezione UIDLs ..." + +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "ricezione del messaggio %1 di %2 ..." + +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Eliminazione del messaggio selezionato" + +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Il messaggio %1 di %2 verrà eliminato.\n" +#~ "Sei sicuro?\n" + +#~ msgid "Yes all" +#~ msgstr "Si tutti" + +#~ msgid "Sending complain mails..." +#~ msgstr "Invio email di lamentele in corso..." + +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Una email di lamentele verrà inviata per il messaggio %1 di %2.\n" +#~ "Sei sicuro?\n" + +#~ msgid "Header %1 at %2" +#~ msgstr "Intestazione %1 di %2" + +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "Ricezione completa dei messaggi selezionati in corso..." + +#~ msgid "Message %1 at %2" +#~ msgstr "Messaggio %1 di %2" diff --git a/po/kshowmail.pot b/po/kshowmail.pot new file mode 100644 index 0000000..faac80e --- /dev/null +++ b/po/kshowmail.pot @@ -0,0 +1,1488 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _translatorinfo.cpp:1 main.cpp:65 _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 main.cpp:65 _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +msgid "Server Name" +msgstr "" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +msgid "Don't save" +msgstr "" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +msgid "Save password" +msgstr "" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +msgid "Select it to activate this account." +msgstr "" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +msgid "General" +msgstr "" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "" + +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "" + +#: kshowmailfeedback.cpp:138 +msgid "Automatic move of filtered messages" +msgstr "" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "" + +#: kshowmailfeedback.cpp:140 +msgid "Automatic mark of filtered messages" +msgstr "" + +#: kshowmailfeedback.cpp:141 +msgid "Ignoring of filtered messages" +msgstr "" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +msgid "White- and Blacklist" +msgstr "" + +#: kshowmailfeedback.cpp:144 +msgid "Filter Log" +msgstr "" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "" + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +msgid "Time Out" +msgstr "" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "" + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "" + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr "" + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "" + +#: kshowmaildock.cpp:37 +msgid "KShowmail: a powerful pop3 email checker" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +msgid "contains" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +msgid "does not contain" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +msgid "equals" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +msgid "does not equal" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +msgid "matches regular expression" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +msgid "is not equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +msgid "Log mails deleted by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +msgid "Si&ze" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +msgid "Su&bject" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +msgid "Name" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +#: kcmconfigs/configactions.cpp:33 +msgid "Action if new &mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:34 +msgid "Action if &no mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "" + +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "" + +#: kcmconfigs/configactions.cpp:53 +msgid "&Beep" +msgstr "" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:57 +msgid "Sound:" +msgstr "" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "" + +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "" + +#: kcmconfigs/configactions.cpp:84 +msgid "Minimi&ze" +msgstr "" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "" + +#: kcmconfigs/configactions.cpp:203 +msgid "Sound files (*.wav, *.ogg)" +msgstr "" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:48 +msgid "Action for Spam" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +msgid "Mailbox Select" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +msgid "Drafts" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +msgid "Action" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +msgid "Show" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:258 +msgid "Check for spam" +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:45 +msgid "If checked, window close must be confirmed" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:52 +msgid "Start Minimi&zed" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:60 +msgid "Minimize to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +msgid "&Keep mail as new" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:90 +msgid "Timeout:" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +msgid "New filter" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:34 +msgid "Name:" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:40 +msgid "Filter Criterias" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:44 +msgid "Filter Action" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "More" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +msgid "Activate Filter" +msgstr "" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +msgid "Blacklist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +#: kcmconfigs/configfilter.cpp:87 +msgid "Moves the selected filter up" +msgstr "" + +#: kcmconfigs/configfilter.cpp:88 +msgid "Moves the selected filter down" +msgstr "" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +msgid "Deleted Mails:" +msgstr "" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +msgid "Sender" +msgstr "" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "" + +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "" + +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "" + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +msgid "Delete?" +msgstr "" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +msgid "Last Refresh: %1" +msgstr "" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..8afbd18 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,1915 @@ +# translation of de.po to deutsch +# KTranslator Generated File +# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# Eggert Ehmke , 2003, 2004. +# +# +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2004-02-02 22:20+0100\n" +"Last-Translator: Eggert Ehmke \n" +"Language-Team: russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Translator: Oleg Ivanov \n" +"X-Generator: KBabel 1.0.2\n" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Oleg Ivanov" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "saruman@unigsm.com" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "Мощный Pop3 Mail Checker" + +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Обновить сообщения" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Диалог настройки" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail уже запущен!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KShowmail" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Игнорировать" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Показать главное окно" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Новая почта" + +# +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "поступила!" + +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Ящик:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Сервер:" + +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Сервер" + +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Протокол:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Порт:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Имя:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Пароль" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +#, fuzzy +msgid "Don't save" +msgstr "Не равно" + +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "Сохранять пароль" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Активный" + +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Выберите pop3-ящик" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +msgid "None" +msgstr "Нет" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +# +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "Absender" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Новый ящик" + +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Редактировать ящик" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "Каково Ваше общее мнение о программе?" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "Одна из моих любимых" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "Она мне нравится" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "Достаточно полезная" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "Средняя" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "Неплоха, но можно было сделать лучше" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "Неудачная" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "Бесполезная" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "Просто мусор" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "Какие особенности (функции) программы Вам нравятся?" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "Ваша любимая особенность (функция)?" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "Что Вам не нравится в программе?" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "Какую функцию программы Вы никогда не используете?" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "Есть ли что-то, чего Вам недостает в программе?" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "Да, многого! (Пожалуйста, прокомментируйте ниже)" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "Немного (пожалуйста, прокомментируйте ниже)" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "В ней и так слишком много функций!" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "Как Вы оцениваете надежность программы?" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "Абсолютно надежна" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "Хорошая" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "Средняя" + +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +msgid "Poor" +msgstr "Плохая" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "Постоянно рушится" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "Как Вы оцениваете производительность программы?" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "Отличная" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "Такая медленная, что это меня убивает" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "Каков Ваш общий опыт в работе с компьютерами?" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "Эксперт" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "Хороший" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "Учусь" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "Новичок" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "Каков Ваш опыт в работе с Unix/Linux системами?" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "Вызвало ли у Вас трудности освоение программы?" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "Никаких проблем" + +#: kshowmailfeedback.cpp:91 +msgid "Some" +msgstr "Некоторые" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "Я все еще разбираюсь" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "Сначала я совершенно ничего не понимал" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "Я до сих пор ничего не понимаю" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "Где Вы в основном используете программу?" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "На работе" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "Дома" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "В университете / школе" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "Какова Ваша роль там?" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "Домашний пользователь" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "Студент" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "Образование (учитель / профессор)" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "Не связанная с компьютерами работа" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "Разработчик" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "Системный администратор" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "Есть ли у Вас там другие обязанности?" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "Откуда Вы узнали об этой программе?" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "Из меню на моем компьютере" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "Кто-то сказал мне о ней" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "Из интернета" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "Из печатного журнала / книги" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "Другое (пожалуйста, прокомментируйте ниже)" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "Стали бы Вы рекомендовать эту программу другу?" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "Отображение списка сообщений в общем" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "Отображение заголовков сообщения" + +# +#: kshowmailfeedback.cpp:134 +msgid "Display of complete messages" +msgstr "Отображение всего сообщения" + +#: kshowmailfeedback.cpp:136 +msgid "Filters" +msgstr "Фильтры" + +#: kshowmailfeedback.cpp:137 +msgid "Manual delete of unwanted messages" +msgstr "Ручное удаление нежелательных сообщений" + +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "Автоматическое удаление отфильтрованных сообщений" + +#: kshowmailfeedback.cpp:139 +msgid "Automatic delete of filtered messages" +msgstr "Автоматическое удаление отфильтрованных сообщений" + +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "Автоматическое удаление отфильтрованных сообщений" + +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "Ручное удаление отфильтрованных сообщений" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +#, fuzzy +msgid "White- and Blacklist" +msgstr "О&чистить список" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Фильтр" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "Фильтрация сообщений с помощью регулярных выражений" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "Сортировка сообщений по размеру, дате и т.п." + +#: kshowmailfeedback.cpp:150 +msgid "Play sound" +msgstr "Проигрывание звука" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "Проигрывание сигнала" + +#: kshowmailfeedback.cpp:152 +msgid "Initial timer" +msgstr "Начальная задержка" + +#: kshowmailfeedback.cpp:153 +msgid "Interval timer" +msgstr "Задержка между обновлениями" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "Этот опрос в обратной связи :-)" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +#, fuzzy +msgid "Time Out" +msgstr "Время" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "Обратная связь" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "&Отправить email..." + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" +"

Пожалуйста, сообщите нам Ваше мнение о программе.

Вы сможете " +"просмотреть весь текст в Вашем почтовом клиенте перед отправкой.
Никакая " +"информация не будет отправлена тайно от Вас.

" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "Пункты, помеченные " + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr ", должны быть заполнены перед отправкой почты." + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "&Дополнительные комментарии:" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "да" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "нет" + +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Тема:" + +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Действия" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "Ответить" + +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Отправитель:" + +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Дата:" + +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Размер:" + +#: kshowmaildock.cpp:37 +#, fuzzy +msgid "KShowmail: a powerful pop3 email checker" +msgstr "Мощный Pop3 Mail Checker" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "От" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "Для" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +#, fuzzy +msgid "Subject" +msgstr "Те&ма" + +# +#: kcmconfigs/filtercriteriawidget.cpp:30 +msgid "Header" +msgstr "Заголовок" + +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Ящик" + +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "Содержит" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +#, fuzzy +msgid "does not contain" +msgstr "Не содержит" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +#, fuzzy +msgid "equals" +msgstr "Равно" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +#, fuzzy +msgid "does not equal" +msgstr "Не равно" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +#, fuzzy +msgid "matches regular expression" +msgstr "Редактировать регулярное выражение" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +#, fuzzy +msgid "is not equal to" +msgstr "Не равно" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "С учетом регистра" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +#, fuzzy +msgid "Log mails deleted by filter" +msgstr "Удалить фильтр" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +#: kcmconfigs/configdisplay.cpp:33 +msgid "Account list" +msgstr "Список ящиков" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "Список писем" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "Тело сообщения" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Сервер" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Пользователь" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +# +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Писем" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:66 +msgid "Si&ze" +msgstr "Ра&змер" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Номер" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:86 +msgid "Su&bject" +msgstr "Те&ма" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Дата" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +#, fuzzy +msgid "Size" +msgstr "Ра&змер" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "Содержимое" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +# +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Статус" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "Разрешить HTML" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Имя:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +# +# +#: kcmconfigs/configactions.cpp:33 +msgid "Action if new &mail" +msgstr "Если есть &почта" + +# +#: kcmconfigs/configactions.cpp:34 +msgid "Action if &no mail" +msgstr "Если &нет почты" + +# +#: kcmconfigs/configactions.cpp:45 +msgid "Show message box" +msgstr "Показать окно с уведомлением" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Показывает окно с уведомлением о приходе новой почты" + +# +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Показать главное окно, если есть новая почта" + +#: kcmconfigs/configactions.cpp:53 +msgid "&Beep" +msgstr "&Сигнал" + +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Издает сигнал внутреннего динамика если есть новая почта" + +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Звук" + +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Проигрывает звук, если есть новая почта" + +# +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Играть выбрать звуковой файл" + +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Нажмите, чтобы выбрать звуковой файл" + +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Команда:" + +# +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Запускает внешнюю программу, если есть новая почта" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Запустить выбранную программу" + +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Выбрать внешнюю команду" + +#: kcmconfigs/configactions.cpp:84 +msgid "Minimi&ze" +msgstr "Миними&зировать" + +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Минимизировать окно, если нет новой почты" + +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Выйти" + +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Выйти из kshowmail, если нет новой почты" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Звуковые файлы (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Все файлы (*)" + +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Выберите звуковой файл" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +# +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Если &нет почты" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +#, fuzzy +msgid "Mailbox Select" +msgstr "Список писем" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Дата" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Действия" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "KShowmail" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +# +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Если &нет почты" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:44 +msgid "Confirm Close" +msgstr "Подтвержать выход" + +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Если выбрано, удаление сообщений должно быть подтверждено" + +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Подтверждать удаление" + +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Если выбрано, удаление сообщений должно быть подтверждено" + +#: kcmconfigs/configgeneral.cpp:52 +msgid "Start Minimi&zed" +msgstr "Запускать как иконку" + +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Приложение будет запущено в минимизированном виде" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "При закрытии свернуть в трей" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "Кнопка закрытия окна сворачивает приложение в трей" + +#: kcmconfigs/configgeneral.cpp:60 +msgid "Minimize to tray" +msgstr "Минимизировать в трей" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "Минимизировать в трей, а не в панель задач" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:68 +msgid "&Keep mail as new" +msgstr "&Оставлять почту как новую" + +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Оставлять почту как новую до перезапуска" + +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Начальная задержка:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "" +"Задержка в секундах до первой автоматической проверки почты (0 = не " +"проверять автоматически)" + +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Частота обновлений:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "" +"Время в минутах между автоматическими проверками почты (0 = не проверять " +"автоматически)" + +#: kcmconfigs/configgeneral.cpp:90 +#, fuzzy +msgid "Timeout:" +msgstr "Время" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Добавить фильтр" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "Изменить фильтр" + +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Имя:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "Статус фильтров" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "Фильтр" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Игнорировать" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +#, fuzzy +msgid "Activate Filter" +msgstr "Изменить фильтр" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +#, fuzzy +msgid "Blacklist" +msgstr "О&чистить список" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +# +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Играть выбрать звуковой файл" + +# +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Играть выбрать звуковой файл" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +#: showrecordelem.cpp:160 +msgid "new" +msgstr "новое" + +#: showrecordelem.cpp:162 +msgid "old" +msgstr "старое" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +#, fuzzy +msgid "Deleted Mails:" +msgstr "Удалить фильтр" + +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Отправитель:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "Автообновление: %1" + +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Обновить письма" + +# +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "&Показать заголовки выбранного письма" + +# +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "&Показать полностью выбранное письмо" + +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "&Удалить выбранные письма" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "П&рекратить текущую передачу" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "Отправить отзыв о программе" + +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "&Настройки ящика" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Готов." + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "Задача остановлена" + +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 сообщений общим размером %2 байт ожидают" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +#, fuzzy +msgid "Delete?" +msgstr "Удалено" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +#, fuzzy +msgid "Last Refresh: %1" +msgstr "Автообновление: %1" + +#: kshowmail.cpp:523 +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"KShowmail будет закрыт.\n" +"Вы уверены?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +#~ msgid "Execute user commands" +#~ msgstr "Исполнение пользовательских команд" + +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Пароль" + +#~ msgid "Condition" +#~ msgstr "Условие" + +#~ msgid "Contains" +#~ msgstr "Содержит" + +#~ msgid "Doesn't contain" +#~ msgstr "Не содержит" + +#~ msgid "Equals" +#~ msgstr "Равно" + +#~ msgid "Doesn't equal" +#~ msgstr "Не равно" + +#~ msgid "Greater" +#~ msgstr "Больше" + +#~ msgid "Less" +#~ msgstr "Меньше" + +#~ msgid "No more Conditions" +#~ msgstr "Больше нет условий" + +#~ msgid "And" +#~ msgstr "И" + +#~ msgid "Or" +#~ msgstr "Или" + +#~ msgid "Edit regular expression" +#~ msgstr "Редактировать регулярное выражение" + +#~ msgid "Regular Expression" +#~ msgstr "Регулярное выражение" + +#~ msgid "For help about regular expressions lookup the Qt documentation" +#~ msgstr "Для справки по регулярным выражениям смотрите документацию по Qt." + +#~ msgid "second Condition" +#~ msgstr "второе условие" + +#~ msgid "Counter" +#~ msgstr "Номер" + +#~ msgid "" +#~ "Filters are counted for each automatic deletion;
Filters with high " +#~ "counters are listed first
" +#~ msgstr "" +#~ "Номера учитываются при каждом автоматическом удалении;
Фильтры с " +#~ "бОльшими номерами применяются первыми.
" + +#~ msgid "Reset Counter" +#~ msgstr "Сброс номера" + +#~ msgid "Filter Status" +#~ msgstr "Статус фильтров" + +#~ msgid "Filters are switched off" +#~ msgstr "Фильтры отключены" + +#~ msgid "Filters are switched on" +#~ msgstr "Фильтры включены" + +#~ msgid "Automatic Delete" +#~ msgstr "Автоматическое удаление" + +#~ msgid "Filters are switched on and are applied automatically" +#~ msgstr "Фильтры включены и применяются автоматически" + +#~ msgid "Add filter" +#~ msgstr "Добавить фильтр" + +#~ msgid "Copy filter" +#~ msgstr "Скопировать фильтр" + +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Фильтр %1 будет удален.\n" +#~ "Вы уверены?" + +#~ msgid "" +#~ "Automatic filters can cause loss of important mails.\n" +#~ "Please test your filters.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Автоматические фильтры могут привести к потере важных писем.\n" +#~ "Пожалуйста, проверьте свои фильтры.\n" +#~ "Продолжить?" + +#~ msgid "" +#~ "Your conditions contain empty match strings.\n" +#~ "This will not work." +#~ msgstr "" +#~ "Ваши условия содержат пустые строки для сопоставления.\n" +#~ "Это неправильно." + +#~ msgid "Setup &filters" +#~ msgstr "Настройки &фильтров" + +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Команда %1 будет удалена.\n" +#~ "Вы уверены?" + +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Ящик %1 будет удален.\n" +#~ "Вы уверены?" + +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Пароль будет сохранен в виде зашифрованного текста,\n" +#~ "но может быть расшифрован.\n" +#~ "Продолжить?\n" + +# +#~ msgid "Message" +#~ msgstr "Сообщение" + +#~ msgid "Send reply mail" +#~ msgstr "Послать ответ" + +#~ msgid "User command" +#~ msgstr "Команда пользователя" + +#~ msgid "Menu Entry" +#~ msgstr "Пункт меню" + +#~ msgid "Press button to select command path" +#~ msgstr "Нажмите, чтобы выбрать путь для команды" + +#~ msgid "Test" +#~ msgstr "Тест" + +#~ msgid "Execute the command immediatly" +#~ msgstr "Исполнять команду немедленно" + +#~ msgid "Wait for command to complete" +#~ msgstr "Ждать окончания выполнения команды" + +#~ msgid "Enter menu entry name" +#~ msgstr "Введите название пункта меню" + +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Введите путь к выбранной команде и аргументы.
<user>, <" +#~ "server>, <passwd>, <header> und <body> могут быть " +#~ "использованы как аргументы
" + +# +#~ msgid "Server Options" +#~ msgstr "Настройки сервера" + +#~ msgid "Password:" +#~ msgstr "Пароль:" + +# +#~ msgid "The account must have a name" +#~ msgstr "Ящик должен иметь имя" + +#~ msgid "This account is already present" +#~ msgstr "Такой ящик уже имеется" + +#~ msgid "Command" +#~ msgstr "Команда" + +#~ msgid "User commands" +#~ msgstr "Команды пользователя" + +#~ msgid "Add user command" +#~ msgstr "Добавить команду пользователя" + +#~ msgid "Edit user command" +#~ msgstr "Редактировать команду пользователя" + +#~ msgid "Copy user command" +#~ msgstr "Скопировать команду пользователя" + +#~ msgid "Delete user command" +#~ msgstr "Удалить команду пользователя" + +#~ msgid "Accounts" +#~ msgstr "Ящики" + +#~ msgid "Delete account" +#~ msgstr "Удалить ящик" + +#~ msgid "Cop&y" +#~ msgstr "С&копировать" + +#~ msgid "copy account" +#~ msgstr "Cкопировать ящик" + +#~ msgid "Add new account" +#~ msgstr "Добавить ящик" + +# +#~ msgid "&General Options" +#~ msgstr "&Общие настройки" + +#~ msgid "Save password (not recommended !)" +#~ msgstr "Сохранять пароль (не рекомендуется!)" + +#~ msgid "Pop3 Timer" +#~ msgstr "Pop3-таймаут" + +#~ msgid "Pop3 timeout" +#~ msgstr "Pop3-таймаут" + +# +#~ msgid "Max Size:" +#~ msgstr "Макс. размер:" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Максимальный размер загружаемого тела письма в килобайтах" + +# +#~ msgid "Display Options" +#~ msgstr "Интерфейс" + +#~ msgid "E&xternal Program" +#~ msgstr "Вне&шняя программа" + +#~ msgid "Sound File:" +#~ msgstr "Звуковой файл:" + +#~ msgid "Enter sound file" +#~ msgstr "Введите путь и имя звукового файла" + +#~ msgid "Setup &accounts" +#~ msgstr "&Настройки ящиков" + +#~ msgid "Setup &commands" +#~ msgstr "Настройки &команд" + +#~ msgid "&Setup" +#~ msgstr "&Настройки" + +#~ msgid "Select Command" +#~ msgstr "Выберите команду" + +#~ msgid "Send complain mails" +#~ msgstr "Отправить спам-жалобы" + +#~ msgid "Clear message list by Ctrl-C" +#~ msgstr "Очистка списка сообщений нажатием Ctrl-C" + +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "Принудительное обновление сообщений нажатием Shift-F5" + +#~ msgid "Select account" +#~ msgstr "Выберите ящик" + +#~ msgid "Refresh &all messages" +#~ msgstr "Обновить &все письма" + +#~ msgid "&Send complain mail" +#~ msgstr "&Отправить письмо с жалобой" + +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Вход на сервер %1 ..." + +# ycp-format +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "соединение с Pop3-сервером %1 установлено" + +#~ msgid "POP3 Timeout" +#~ msgstr "Pop3-таймаут" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Таумаут: задача была удалена" + +#~ msgid "getting UIDLs ..." +#~ msgstr "получение UIDL..." + +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "получение сообщения %1 из %2 ..." + +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Удаление выбранных сообщений..." + +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Сообщение %1 в ящике %2 будет удалено.\n" +#~ "Продолжить?\n" + +#~ msgid "Yes all" +#~ msgstr "Да для всех" + +#~ msgid "Sending complain mails..." +#~ msgstr "Отправить письмо с жалобой..." + +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Письмо с жалобой будет отправлено для сообщения %1 в ящике %2.\n" +#~ "Продолжить?\n" + +#~ msgid "Header %1 at %2" +#~ msgstr "Заголовок письма %1 в ящике %2" + +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "Загрузка тела выбранного сообщения..." + +#~ msgid "Message %1 at %2" +#~ msgstr "Сообщение %1 в ящике %2" + +#, fuzzy +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, " +#~ ", \\, \\ and \\ may be used as " +#~ "arguments
" +#~ msgstr "" +#~ "Pfad des ausgewählten Kommandos mit Argumenten\n" +#~ ", , ,
und können als Argumente " +#~ "benutzt werden" + +#~ msgid "" +#~ "Enter path to selected command and arguments\\n, , " +#~ ",
and may be used as arguments" +#~ msgstr "" +#~ "Pfad des ausgewählten Kommandos mit Argumenten\n" +#~ ", , ,
und kГ¶nnen als Argumente " +#~ "benutzt werden" + +#~ msgid "Ignore case" +#~ msgstr "GroГџ/Kleinschreibung ignorieren" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..a2e91f1 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,1994 @@ +# translation of sv.po to deutsch +# Copyright (C) 2000,2003 Free Software Foundation, Inc. +# Daniel Stenberg +# Mattias Newzella , 2000. +# Eggert Ehmke , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: sv\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-04-17 21:57+0200\n" +"PO-Revision-Date: 2003-12-08 21:41+0100\n" +"Last-Translator: Eggert Ehmke \n" +"Language-Team: deutsch\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" + +#: _translatorinfo.cpp:1 main.cpp:65 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Mattias Newzella" + +#: _translatorinfo.cpp:3 main.cpp:65 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "newzella@linux.nu" + +#: main.cpp:33 +msgid "A powerful pop3 mail checker" +msgstr "En kraftfull e-postkontrollerare för pop3" + +# kshowmail.cpp:178 +#: main.cpp:40 +msgid "Refresh messages now" +msgstr "Uppdatera breven nu" + +#: main.cpp:42 +msgid "Launch configure dialog" +msgstr "Starta inställningsdialogrutan" + +#: main.cpp:107 +msgid "Kshowmail is already running!" +msgstr "Kshowmail är redan startad!" + +#. i18n: file AlertDlg.ui line 16 +#: AlertDlg.cpp:262 rc.cpp:15 +#, no-c-format +msgid "KShowmail" +msgstr "KshowmailDok" + +#. i18n: file AlertDlg.ui line 27 +#: AlertDlg.cpp:263 rc.cpp:18 kcmconfigs/filtersetupitem.cpp:257 +#: kcmconfigs/filtersetupdialog.cpp:95 kcmconfigs/configfilter.cpp:133 +#, no-c-format +msgid "Ignore" +msgstr "Ignorera" + +#. i18n: file AlertDlg.ui line 35 +#: AlertDlg.cpp:264 rc.cpp:21 kcmconfigs/configactions.cpp:49 +#, no-c-format +msgid "Show main window" +msgstr "Visa huvudfönster" + +#. i18n: file AlertDlg.ui line 61 +#: AlertDlg.cpp:265 rc.cpp:24 +#, no-c-format +msgid "New mail" +msgstr "Nytt brev" + +#. i18n: file AlertDlg.ui line 76 +#: AlertDlg.cpp:266 rc.cpp:27 +#, no-c-format +msgid "has arrived !" +msgstr "har anlänt!" + +# qserverdlgdata.cpp:18 +#: serverdialog.cpp:44 kcmconfigs/accountsetupdialog.cpp:39 +msgid "Account:" +msgstr "Konto:" + +#: serverdialog.cpp:47 serverdialog.cpp:48 +#: kcmconfigs/accountsetupdialog.cpp:42 kcmconfigs/accountsetupdialog.cpp:43 +msgid "Unique Account Name" +msgstr "" + +# qserverdlgdata.cpp:23 +#: serverdialog.cpp:52 kcmconfigs/accountsetupdialog.cpp:47 +msgid "Server:" +msgstr "Server:" + +# qserverdlgdata.cpp:23 +#: serverdialog.cpp:55 serverdialog.cpp:56 +#: kcmconfigs/accountsetupdialog.cpp:49 kcmconfigs/accountsetupdialog.cpp:50 +#, fuzzy +msgid "Server Name" +msgstr "Server" + +# qserverdlgdata.cpp:42 +#: serverdialog.cpp:60 kcmconfigs/accountsetupdialog.cpp:54 +msgid "Protocol:" +msgstr "Protokoll:" + +#: serverdialog.cpp:63 serverdialog.cpp:64 +#: kcmconfigs/accountsetupdialog.cpp:57 kcmconfigs/accountsetupdialog.cpp:58 +msgid "" +"Protocol, which shall be used to get the mails from the server. Currently " +"KShowmail just supports POP3." +msgstr "" + +# qserverdlgdata.cpp:75 +#: serverdialog.cpp:68 kcmconfigs/accountsetupdialog.cpp:62 +msgid "Port:" +msgstr "Port:" + +#: serverdialog.cpp:71 serverdialog.cpp:72 +#: kcmconfigs/accountsetupdialog.cpp:65 kcmconfigs/accountsetupdialog.cpp:66 +msgid "Port Number. Normally POP3 uses port 110." +msgstr "" + +# qserverdlgdata.cpp:28 +#: serverdialog.cpp:76 kcmconfigs/accountsetupdialog.cpp:70 +msgid "User:" +msgstr "Användare:" + +#: serverdialog.cpp:78 serverdialog.cpp:79 +#: kcmconfigs/accountsetupdialog.cpp:72 kcmconfigs/accountsetupdialog.cpp:73 +msgid "To authenticate to the mail server you need an user name." +msgstr "" + +# qpassworddlgdata.cpp:17 qserverdlgdata.cpp:33 +#: serverdialog.cpp:84 kcmconfigs/accountsetupdialog.cpp:78 +msgid "Password" +msgstr "Lösenord" + +#: serverdialog.cpp:95 kcmconfigs/accountsetupdialog.cpp:89 +msgid "Don't save" +msgstr "" + +# qoptiondlgdata.cpp:101 +#: serverdialog.cpp:96 kcmconfigs/accountsetupdialog.cpp:90 +#, fuzzy +msgid "Save password" +msgstr "Spara lösenord" + +#: serverdialog.cpp:97 kcmconfigs/accountsetupdialog.cpp:91 +msgid "Use KWallet" +msgstr "" + +#: serverdialog.cpp:101 kcmconfigs/accountsetupdialog.cpp:95 +msgid "" +"Don't save password. KShowmail will ask you for it at first server connect." +msgstr "" + +#: serverdialog.cpp:102 kcmconfigs/accountsetupdialog.cpp:96 +msgid "" +"Save password in the configuration file. Not recommended, because the " +"password is just lightly encrypted" +msgstr "" + +#: serverdialog.cpp:103 kcmconfigs/accountsetupdialog.cpp:97 +msgid "" +"Use KWallet to save the password. Maybe you have to type in the KWallet " +"master password at first server connect." +msgstr "" + +# kshowmail.cpp:147 kshowmailview.cpp:41 rc.cpp:102 +#: serverdialog.cpp:119 kcmconfigs/configdisplay.cpp:46 +#: kcmconfigs/accountsetupdialog.cpp:113 kshowmailview.cpp:53 +msgid "Active" +msgstr "Aktiv" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#: serverdialog.cpp:120 kcmconfigs/accountsetupdialog.cpp:114 +#, fuzzy +msgid "Select it to activate this account." +msgstr "Välj ett pop3-konto" + +#: serverdialog.cpp:125 kcmconfigs/accountsetupdialog.cpp:119 +msgid "Encryption" +msgstr "" + +# qoptiondlgdata.cpp:136 +#: serverdialog.cpp:135 kshowmailfeedback.cpp:57 +#: kcmconfigs/accountsetupdialog.cpp:129 +#, fuzzy +msgid "None" +msgstr "IngetNamn" + +#: serverdialog.cpp:136 kcmconfigs/accountsetupdialog.cpp:130 +msgid "SSL" +msgstr "" + +#: serverdialog.cpp:137 kcmconfigs/accountsetupdialog.cpp:131 +msgid "TLS" +msgstr "" + +#: serverdialog.cpp:141 kcmconfigs/accountsetupdialog.cpp:135 +msgid "" +"The download of the mail header and body will not be encrypted. Use this, if " +"your provider doesn't make a secure transfer available." +msgstr "" + +#: serverdialog.cpp:142 kcmconfigs/accountsetupdialog.cpp:136 +msgid "" +"Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure " +"communications on the Internet." +msgstr "" + +#: serverdialog.cpp:143 kcmconfigs/accountsetupdialog.cpp:137 +msgid "" +"Transport Layer Security (TLS) is a cryptographic protocol that provides " +"secure communications on the Internet. It is the successor of SSL." +msgstr "" + +# kshowmailview.cpp:42 +#: serverdialog.cpp:152 kcmconfigs/accountsetupdialog.cpp:145 +#, fuzzy +msgid "General" +msgstr "Avsändare" + +#: serverdialog.cpp:153 kcmconfigs/accountsetupdialog.cpp:146 +msgid "Security" +msgstr "" + +# qserverdlg.cpp:40 +#: serverdialog.cpp:157 kcmconfigs/accountsetupdialog.cpp:150 +msgid "New account" +msgstr "Nytt konto" + +# qserverdlg.cpp:45 +#: serverdialog.cpp:159 kcmconfigs/accountsetupdialog.cpp:152 +msgid "Edit account" +msgstr "Redigera konto" + +#: serverdialog.cpp:194 kcmconfigs/accountsetupdialog.cpp:187 +msgid "Please enter an server." +msgstr "" + +#: serverdialog.cpp:200 kcmconfigs/accountsetupdialog.cpp:193 +msgid "Please enter an user name." +msgstr "" + +#: kshowmailfeedback.cpp:31 +msgid "What is your general opinion about this program?" +msgstr "" + +#: kshowmailfeedback.cpp:33 +msgid "It's one of my favourites" +msgstr "" + +#: kshowmailfeedback.cpp:34 +msgid "I like it" +msgstr "" + +#: kshowmailfeedback.cpp:35 +msgid "It's sometimes useful" +msgstr "" + +#: kshowmailfeedback.cpp:36 +msgid "It's average" +msgstr "" + +#: kshowmailfeedback.cpp:37 +msgid "Nice try, but this could be done better" +msgstr "" + +#: kshowmailfeedback.cpp:38 +msgid "It's poor" +msgstr "" + +#: kshowmailfeedback.cpp:39 +msgid "It's useless" +msgstr "" + +#: kshowmailfeedback.cpp:40 +msgid "It's crap" +msgstr "" + +#: kshowmailfeedback.cpp:42 +msgid "Which features of this program do you like?" +msgstr "" + +#: kshowmailfeedback.cpp:45 +msgid "What is your favourite feature?" +msgstr "" + +#: kshowmailfeedback.cpp:48 +msgid "Which features don't you like?" +msgstr "" + +#: kshowmailfeedback.cpp:51 +msgid "Which features do you never use?" +msgstr "" + +#: kshowmailfeedback.cpp:54 +msgid "Are there features you are missing?" +msgstr "" + +#: kshowmailfeedback.cpp:55 +msgid "Yes, a lot! (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:56 +msgid "Some (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:58 +msgid "It has too many features already!" +msgstr "" + +#: kshowmailfeedback.cpp:60 +msgid "How do you rate the stability of this program?" +msgstr "" + +#: kshowmailfeedback.cpp:61 +msgid "Rock solid" +msgstr "" + +#: kshowmailfeedback.cpp:62 kshowmailfeedback.cpp:69 +msgid "Good" +msgstr "" + +#: kshowmailfeedback.cpp:63 kshowmailfeedback.cpp:70 kshowmailfeedback.cpp:77 +#: kshowmailfeedback.cpp:84 +msgid "Average" +msgstr "" + +# qserverdlgdata.cpp:75 +#: kshowmailfeedback.cpp:64 kshowmailfeedback.cpp:71 +#, fuzzy +msgid "Poor" +msgstr "Port:" + +#: kshowmailfeedback.cpp:65 +msgid "It keeps crashing all the time" +msgstr "" + +#: kshowmailfeedback.cpp:67 +msgid "How do you rate the performance of this program?" +msgstr "" + +#: kshowmailfeedback.cpp:68 +msgid "Great" +msgstr "" + +#: kshowmailfeedback.cpp:72 +msgid "It's so slow it drives me nuts" +msgstr "" + +#: kshowmailfeedback.cpp:74 +msgid "What is your experience with computers in general?" +msgstr "" + +#: kshowmailfeedback.cpp:75 kshowmailfeedback.cpp:82 +msgid "Expert" +msgstr "" + +#: kshowmailfeedback.cpp:76 kshowmailfeedback.cpp:83 +msgid "Fair" +msgstr "" + +#: kshowmailfeedback.cpp:78 kshowmailfeedback.cpp:85 +msgid "Learning" +msgstr "" + +#: kshowmailfeedback.cpp:79 kshowmailfeedback.cpp:86 +msgid "Newbie" +msgstr "" + +#: kshowmailfeedback.cpp:81 +msgid "What is your experience with Unix/Linux systems?" +msgstr "" + +#: kshowmailfeedback.cpp:88 +msgid "Did you have trouble figuring out how to work with this program?" +msgstr "" + +#: kshowmailfeedback.cpp:90 +msgid "No problem" +msgstr "" + +# qoptiondlgdata.cpp:136 +#: kshowmailfeedback.cpp:91 +#, fuzzy +msgid "Some" +msgstr "IngetNamn" + +#: kshowmailfeedback.cpp:92 +msgid "I'm still learning" +msgstr "" + +#: kshowmailfeedback.cpp:93 +msgid "I didn't have a clue what to do at first" +msgstr "" + +#: kshowmailfeedback.cpp:94 +msgid "I still don't have a clue what to do" +msgstr "" + +#: kshowmailfeedback.cpp:96 +msgid "Where do you use this program most?" +msgstr "" + +#: kshowmailfeedback.cpp:97 +msgid "At work" +msgstr "" + +#: kshowmailfeedback.cpp:98 +msgid "At home" +msgstr "" + +#: kshowmailfeedback.cpp:99 +msgid "At university / school" +msgstr "" + +#: kshowmailfeedback.cpp:101 +msgid "What is your primary role there?" +msgstr "" + +#: kshowmailfeedback.cpp:102 kshowmailfeedback.cpp:110 +msgid "Home user" +msgstr "" + +#: kshowmailfeedback.cpp:103 kshowmailfeedback.cpp:111 +msgid "Student" +msgstr "" + +#: kshowmailfeedback.cpp:104 kshowmailfeedback.cpp:112 +msgid "Educational (teacher / professor)" +msgstr "" + +#: kshowmailfeedback.cpp:105 kshowmailfeedback.cpp:113 +msgid "Non-computer related work" +msgstr "" + +#: kshowmailfeedback.cpp:106 kshowmailfeedback.cpp:114 +msgid "Developer" +msgstr "" + +#: kshowmailfeedback.cpp:107 kshowmailfeedback.cpp:115 +msgid "System administrator" +msgstr "" + +#: kshowmailfeedback.cpp:109 +msgid "Do you have any other roles there?" +msgstr "" + +#: kshowmailfeedback.cpp:117 +msgid "How did you get to know this program?" +msgstr "" + +#: kshowmailfeedback.cpp:118 +msgid "In a menu on my machine" +msgstr "" + +#: kshowmailfeedback.cpp:119 +msgid "Somebody told me about it" +msgstr "" + +#: kshowmailfeedback.cpp:120 +msgid "On the internet" +msgstr "" + +#: kshowmailfeedback.cpp:121 +msgid "Printed magazine / book" +msgstr "" + +#: kshowmailfeedback.cpp:122 +msgid "Other (please add comment below)" +msgstr "" + +#: kshowmailfeedback.cpp:124 +msgid "Would you recommend this program to a friend?" +msgstr "" + +#: kshowmailfeedback.cpp:132 +msgid "The message list display in general" +msgstr "" + +#: kshowmailfeedback.cpp:133 +msgid "Display of message headers" +msgstr "" + +# kshowmail.cpp:126 +#: kshowmailfeedback.cpp:134 +#, fuzzy +msgid "Display of complete messages" +msgstr "Visa &hela de valda breven" + +#: kshowmailfeedback.cpp:136 +#, fuzzy +msgid "Filters" +msgstr "Underrättelsedialog" + +# kshowmail.cpp:127 +#: kshowmailfeedback.cpp:137 +#, fuzzy +msgid "Manual delete of unwanted messages" +msgstr "Ta bo&rt de valda breven" + +# kshowmail.cpp:127 +#: kshowmailfeedback.cpp:138 +#, fuzzy +msgid "Automatic move of filtered messages" +msgstr "Ta bo&rt de valda breven" + +# kshowmail.cpp:127 +#: kshowmailfeedback.cpp:139 +#, fuzzy +msgid "Automatic delete of filtered messages" +msgstr "Ta bo&rt de valda breven" + +# kshowmail.cpp:127 +#: kshowmailfeedback.cpp:140 +#, fuzzy +msgid "Automatic mark of filtered messages" +msgstr "Ta bo&rt de valda breven" + +# kshowmail.cpp:127 +#: kshowmailfeedback.cpp:141 +#, fuzzy +msgid "Ignoring of filtered messages" +msgstr "Ta bo&rt de valda breven" + +#: kshowmailfeedback.cpp:142 +msgid "Integration of SpamAssassin" +msgstr "" + +#: kshowmailfeedback.cpp:143 +msgid "White- and Blacklist" +msgstr "" + +#: kshowmailfeedback.cpp:144 +#, fuzzy +msgid "Filter Log" +msgstr "Underrättelsedialog" + +#: kshowmailfeedback.cpp:145 +msgid "Filter messages by regular expressions" +msgstr "" + +#: kshowmailfeedback.cpp:148 +msgid "Sorting of messages by size, date etc." +msgstr "" + +# qoptiondlgdata.cpp:31 +#: kshowmailfeedback.cpp:150 +#, fuzzy +msgid "Play sound" +msgstr "Spelar ett ljud när nya brev anländer" + +#: kshowmailfeedback.cpp:151 +msgid "Play beep" +msgstr "" + +# qoptiondlgdata.cpp:113 +#: kshowmailfeedback.cpp:152 +#, fuzzy +msgid "Initial timer" +msgstr "Initial timer:" + +# qoptiondlgdata.cpp:125 +#: kshowmailfeedback.cpp:153 +#, fuzzy +msgid "Interval timer" +msgstr "Intervall-timer:" + +#: kshowmailfeedback.cpp:154 +msgid "This feedback survey :-)" +msgstr "" + +#: configelem.cpp:294 +msgid "Please type in the password for %1" +msgstr "" + +#: configelem.cpp:515 +msgid "Time out on %1. The operation could not be finished on time" +msgstr "" + +#: configelem.cpp:515 +msgid "Time Out" +msgstr "" + +#: configelem.cpp:1647 +msgid "" +"You want to check your mails for spam, but SpamAssassin is not running.\n" +"KShowmail skips the spam check." +msgstr "" + +#: configelem.cpp:1647 +msgid "SpamAssassin is not running" +msgstr "" + +#: kfeedback.cpp:35 +msgid "Feedback" +msgstr "" + +#: kfeedback.cpp:39 +msgid "&Mail this..." +msgstr "" + +#: kfeedback.cpp:89 +msgid "" +"

Please tell us your opinion about this program.

You will be " +"able to review everything in your mailer before any mail is sent.
Nothing " +"will be sent behind your back.

" +msgstr "" + +#: kfeedback.cpp:114 +msgid "Questions marked with " +msgstr "" + +#: kfeedback.cpp:123 +msgid " must be answered before a mail can be sent." +msgstr "" + +#: kfeedback.cpp:134 +msgid "&Additional comments:" +msgstr "" + +#: kfeedback.cpp:312 +msgid "yes" +msgstr "" + +#: kfeedback.cpp:313 +msgid "no" +msgstr "" + +# kshowmailview.cpp:43 +#: showheaderdialog.cpp:28 showmaildialog.cpp:39 +msgid "Subject:" +msgstr "Ämne:" + +# kshowmail.cpp:1475 +#. i18n: file kshowmailui.rc line 4 +#: rc.cpp:3 +#, no-c-format +msgid "&Actions" +msgstr "&Åtgärder" + +#: showmaildialog.cpp:15 +msgid "Reply" +msgstr "" + +# kshowmailview.cpp:42 +#: showmaildialog.cpp:30 +msgid "Sender:" +msgstr "Avsändare:" + +# kshowmailview.cpp:44 +#: showmaildialog.cpp:33 +msgid "Date:" +msgstr "Datum:" + +# kshowmailview.cpp:45 +#: showmaildialog.cpp:36 +msgid "Size:" +msgstr "Storlek:" + +#: kshowmaildock.cpp:37 +#, fuzzy +msgid "KShowmail: a powerful pop3 email checker" +msgstr "En kraftfull e-postkontrollerare för pop3" + +#: kcmconfigs/filtercriteriawidget.cpp:26 kcmconfigs/configdisplay.cpp:78 +#: kshowmailview.cpp:71 +msgid "From" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:27 kcmconfigs/configdisplay.cpp:82 +#: kshowmailview.cpp:72 +msgid "To" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:28 +msgid "Size (Bytes)" +msgstr "" + +# kshowmailview.cpp:43 +#: kcmconfigs/filtercriteriawidget.cpp:29 kshowmailview.cpp:73 +#: filterlogview.cpp:38 filterlogview.cpp:66 +msgid "Subject" +msgstr "Ämne" + +# kshowmailview.cpp:42 +#: kcmconfigs/filtercriteriawidget.cpp:30 +#, fuzzy +msgid "Header" +msgstr "Avsändare" + +# qoptiondlgdata.cpp:65 +#: kcmconfigs/filtercriteriawidget.cpp:31 kcmconfigs/configdisplay.cpp:50 +#: kcmconfigs/configdisplay.cpp:74 kshowmailview.cpp:54 kshowmailview.cpp:70 +#: filterlogview.cpp:37 filterlogview.cpp:64 +msgid "Account" +msgstr "Konto" + +# kshowmail.cpp:1475 +#: kcmconfigs/filtercriteriawidget.cpp:48 +#, fuzzy +msgid "contains" +msgstr "&Åtgärder" + +#: kcmconfigs/filtercriteriawidget.cpp:49 +msgid "does not contain" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:50 +msgid "equals" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:51 +msgid "does not equal" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:52 +msgid "matches regular expression" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:53 +msgid "does not match reg. expr." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:69 +msgid "is equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:70 +msgid "is not equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:71 +msgid "is greater than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:72 +msgid "is greater than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:73 +msgid "is less than" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:74 +msgid "is less than or equal to" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:107 +msgid "Case sensitive" +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:196 +msgid "The Regular Expression Editor could not be initilized." +msgstr "" + +#: kcmconfigs/filtercriteriawidget.cpp:211 +msgid "The Regular Expression Editor is not available." +msgstr "" + +#: kcmconfigs/configlog.cpp:34 +msgid "Log mails deleted by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:36 +msgid "Check to activate the log of mails deleted by filter." +msgstr "" + +#: kcmconfigs/configlog.cpp:46 kcmconfigs/configlog.cpp:78 +msgid "Remove log entries at exit" +msgstr "" + +#: kcmconfigs/configlog.cpp:52 kcmconfigs/configlog.cpp:84 +msgid "Remove log entries after" +msgstr "" + +#: kcmconfigs/configlog.cpp:58 kcmconfigs/configlog.cpp:90 +msgid " Days" +msgstr "" + +#: kcmconfigs/configlog.cpp:66 +msgid "Log mails moved by filter" +msgstr "" + +#: kcmconfigs/configlog.cpp:68 +msgid "Check to activate the log of mails moved by filter." +msgstr "" + +# qoptiondlgdata.cpp:65 +#: kcmconfigs/configdisplay.cpp:33 +#, fuzzy +msgid "Account list" +msgstr "Konton" + +#: kcmconfigs/configdisplay.cpp:35 +msgid "Mail list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:37 +msgid "Mail content" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:47 +msgid "To switch on/off the 'Active' column in the account list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:51 +msgid "To switch on/off the 'Account' column in the account list" +msgstr "" + +# qserverdlgdata.cpp:23 +#: kcmconfigs/configdisplay.cpp:54 kshowmailview.cpp:55 +msgid "Server" +msgstr "Server" + +#: kcmconfigs/configdisplay.cpp:55 +msgid "To switch on/off the 'Server' column in the account list" +msgstr "" + +# qserverdlgdata.cpp:28 +#: kcmconfigs/configdisplay.cpp:58 kshowmailview.cpp:56 +msgid "User" +msgstr "Användare" + +#: kcmconfigs/configdisplay.cpp:59 +msgid "To switch on/off the 'User' column in the account list" +msgstr "" + +# kshowmail.cpp:178 +#: kcmconfigs/configdisplay.cpp:62 kshowmailview.cpp:57 +msgid "Messages" +msgstr "Brev" + +#: kcmconfigs/configdisplay.cpp:63 +msgid "To switch on/off the 'Messages' column in the account list" +msgstr "" + +# kshowmailview.cpp:45 +#: kcmconfigs/configdisplay.cpp:66 +#, fuzzy +msgid "Si&ze" +msgstr "Storlek" + +#: kcmconfigs/configdisplay.cpp:67 +msgid "To switch on/off the 'Size' column in the account list" +msgstr "" + +# kshowmailview.cpp:41 +#: kcmconfigs/configdisplay.cpp:70 kshowmailview.cpp:69 +msgid "Number" +msgstr "Nummer" + +#: kcmconfigs/configdisplay.cpp:71 +msgid "To switch on/off the 'Number' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:75 +msgid "To switch on/off the 'Account' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:79 +msgid "To switch on/off the 'From' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:83 +msgid "To switch on/off the 'To' column in the message list" +msgstr "" + +# kshowmailview.cpp:43 +#: kcmconfigs/configdisplay.cpp:86 +#, fuzzy +msgid "Su&bject" +msgstr "Ämne" + +#: kcmconfigs/configdisplay.cpp:87 +msgid "To switch on/off the 'Subject' column in the message list" +msgstr "" + +# kshowmailview.cpp:44 +#: kcmconfigs/configdisplay.cpp:90 kshowmailview.cpp:74 filterlogview.cpp:35 +#: filterlogview.cpp:62 +msgid "Date" +msgstr "Datum" + +#: kcmconfigs/configdisplay.cpp:91 +msgid "To switch on/off the 'Date' column in the message list" +msgstr "" + +# kshowmailview.cpp:45 +#: kcmconfigs/configdisplay.cpp:94 kshowmailview.cpp:58 kshowmailview.cpp:75 +msgid "Size" +msgstr "Storlek" + +#: kcmconfigs/configdisplay.cpp:95 +msgid "To switch on/off the 'Size' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:98 kshowmailview.cpp:76 +msgid "Content" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:99 +msgid "To switch on/off the 'Content' column in the message list" +msgstr "" + +# kshowmailview.cpp:46 +#: kcmconfigs/configdisplay.cpp:102 kshowmailview.cpp:77 +msgid "State" +msgstr "Status" + +#: kcmconfigs/configdisplay.cpp:103 +msgid "To switch on/off the 'State' column in the message list" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:106 +msgid "Allow HTML" +msgstr "" + +#: kcmconfigs/configdisplay.cpp:107 +msgid "To switch on/off HTML in the message view" +msgstr "" + +# qoptiondlgdata.cpp:136 +#: kcmconfigs/configaccounts.cpp:34 kcmconfigs/configfilter.cpp:71 +#, fuzzy +msgid "Name" +msgstr "Namn:" + +#: kcmconfigs/configaccounts.cpp:194 +msgid "Do you really want to remove account %1?" +msgstr "" + +# qoptiondlgdata.cpp:152 +#: kcmconfigs/configactions.cpp:33 +#, fuzzy +msgid "Action if new &mail" +msgstr "Åtgärd vid nya brev" + +# qoptiondlgdata.cpp:152 +#: kcmconfigs/configactions.cpp:34 +#, fuzzy +msgid "Action if &no mail" +msgstr "Åtgärd om inga brev" + +# kshowmail.cpp:178 +#: kcmconfigs/configactions.cpp:45 +#, fuzzy +msgid "Show message box" +msgstr "Visa brev" + +#: kcmconfigs/configactions.cpp:46 +msgid "Show message if new mail arrives" +msgstr "Visa meddelande om nya brev anländer" + +# qoptiondlgdata.cpp:163 +#: kcmconfigs/configactions.cpp:50 +msgid "Show main window if new mail arrives" +msgstr "Visa huvudfönstret om nya brev anländer" + +# qoptiondlgdata.cpp:26 +#: kcmconfigs/configactions.cpp:53 +#, fuzzy +msgid "&Beep" +msgstr "Ljudsignal" + +# qoptiondlgdata.cpp:25 +#: kcmconfigs/configactions.cpp:54 +msgid "Beeps the internal speaker if new mail" +msgstr "Ljudsignal i den interna högtalaren vid nya brev" + +# qoptiondlgdata.cpp:32 +#: kcmconfigs/configactions.cpp:57 +#, fuzzy +msgid "Sound:" +msgstr "Ljud" + +# qoptiondlgdata.cpp:31 +#: kcmconfigs/configactions.cpp:58 +msgid "Plays sound if new mail" +msgstr "Spelar ett ljud när nya brev anländer" + +# qoptiondlgdata.cpp:48 +#: kcmconfigs/configactions.cpp:61 +msgid "Play the selected sound file" +msgstr "Spela upp den valda ljudfilen" + +# commanddlgdata.cpp:16 commandentrydata.cpp:16 qoptiondlgdata.cpp:16 +# qoptiondlgdata.cpp:37 +#: kcmconfigs/configactions.cpp:67 +msgid "Press to select sound file" +msgstr "Klicka för att välja ljudfil" + +# commandentrydata.cpp:35 +#: kcmconfigs/configactions.cpp:70 +msgid "Command:" +msgstr "Kommando:" + +# qoptiondlgdata.cpp:25 +#: kcmconfigs/configactions.cpp:71 +msgid "Starts external program if new mail" +msgstr "Startar externt program om ny post" + +#: kcmconfigs/configactions.cpp:74 +msgid "Start the selected program" +msgstr "Starta det markerade programmet" + +# commandentry.cpp:88 +#: kcmconfigs/configactions.cpp:80 kcmconfigs/configactions.cpp:213 +msgid "Select external command" +msgstr "Välj externt kommando" + +# qoptiondlgdata.cpp:164 +#: kcmconfigs/configactions.cpp:84 +#, fuzzy +msgid "Minimi&ze" +msgstr "Minimera" + +# qoptiondlgdata.cpp:163 +#: kcmconfigs/configactions.cpp:85 +msgid "Minimize window if no new mail" +msgstr "Minimera fönstret om inga nya brev" + +# qoptiondlgdata.cpp:158 +#: kcmconfigs/configactions.cpp:87 +msgid "Terminate" +msgstr "Avsluta" + +# qoptiondlgdata.cpp:157 +#: kcmconfigs/configactions.cpp:88 +msgid "Terminate kshowmail if no new mail" +msgstr "Avsluta Kshowmail om inga nya brev" + +#: kcmconfigs/configactions.cpp:203 +#, fuzzy +msgid "Sound files (*.wav, *.ogg)" +msgstr "Wav-filer (*.wav)" + +#: kcmconfigs/configactions.cpp:203 +msgid "All files (*)" +msgstr "Alla filer (*)" + +# qoptiondlg.cpp:166 +#: kcmconfigs/configactions.cpp:203 +msgid "Select Sound File" +msgstr "Välj ljudfil" + +#: kcmconfigs/configspamcheck.cpp:37 +msgid "" +"KShowmail uses SpamAssassin to check the mails for spam. You have to " +"install, configure and start the SpamAssassin daemon, before you can use " +"this service." +msgstr "" + +# qoptiondlgdata.cpp:152 +#: kcmconfigs/configspamcheck.cpp:48 +#, fuzzy +msgid "Action for Spam" +msgstr "Åtgärd om inga brev" + +#: kcmconfigs/configspamcheck.cpp:54 +msgid "Choose the action for spam mails." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:60 kcmconfigs/senderlistdialog.cpp:59 +#: kcmconfigs/filtersetupitem.cpp:255 kcmconfigs/filtersetupdialog.cpp:92 +#: kcmconfigs/configfilter.cpp:130 +msgid "Mark" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:71 kcmconfigs/filtersetupdialog.cpp:104 +#: kcmconfigs/configfilter.cpp:143 +msgid "Choose the mailbox" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:190 kcmconfigs/filtersetupdialog.cpp:442 +#: kcmconfigs/configfilter.cpp:603 +msgid "Mailbox Select" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 +msgid "SpamAssassin is running." +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:226 kcmconfigs/configspamcheck.cpp:231 +msgid "Check for SpamAssassin" +msgstr "" + +#: kcmconfigs/configspamcheck.cpp:231 +msgid "SpamAssassin is not running." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:27 +msgid "Press to choose the mail directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:32 +msgid "" +"Please choose the path to the mailboxes.\n" +"KShowmail supports only MailDir boxes." +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:47 +msgid "Please choose the mailbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:65 +msgid "Choose the mailbox directory" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:134 +msgid "Inbox" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:136 +msgid "Outbox" +msgstr "" + +# kshowmailview.cpp:44 +#: kcmconfigs/mailboxwizard.cpp:138 +#, fuzzy +msgid "Drafts" +msgstr "Datum" + +#: kcmconfigs/mailboxwizard.cpp:140 +msgid "sent-mail" +msgstr "" + +#: kcmconfigs/mailboxwizard.cpp:142 +msgid "Trash" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:39 +msgid "List" +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:41 +msgid "" +"A mail whose sender is listed here will pass the filter.\n" +"A mail will be accepted, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is accepted by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:43 +msgid "" +"A mail whose sender is listed here will be hold up by the filter.\n" +"A mail will be stopped, if its From line incloses a list entry.\n" +"E.g. a line of\n" +"\"Ulrich Weigelt\" is filtered by the entries\n" +"Ulrich Weigelt\n" +"ulrich.weigelt@gmx.de\n" +"\"Ulrich Weigelt\" " +msgstr "" + +# kshowmail.cpp:1475 +#: kcmconfigs/senderlistdialog.cpp:53 kcmconfigs/configfilter.cpp:72 +#, fuzzy +msgid "Action" +msgstr "&Åtgärder" + +#: kcmconfigs/senderlistdialog.cpp:64 +msgid "The mails will be deleted." +msgstr "" + +#: kcmconfigs/senderlistdialog.cpp:65 +msgid "The mails will be marked." +msgstr "" + +#: kcmconfigs/filtersetupitem.cpp:253 kcmconfigs/filtersetupdialog.cpp:90 +#: kcmconfigs/configfilter.cpp:128 +#, fuzzy +msgid "Show" +msgstr "KshowmailDok" + +#: kcmconfigs/filtersetupitem.cpp:256 +msgid "Move to %1" +msgstr "" + +# qoptiondlgdata.cpp:152 +#: kcmconfigs/filtersetupitem.cpp:258 +#, fuzzy +msgid "Check for spam" +msgstr "Åtgärd om inga brev" + +#: kcmconfigs/filtersetupitem.cpp:259 +msgid "Unknown action" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:37 +msgid "&Timers" +msgstr "" + +# qoptiondlgdata.cpp:107 +#: kcmconfigs/configgeneral.cpp:44 +#, fuzzy +msgid "Confirm Close" +msgstr "Bekräfta borttagning" + +# qoptiondlgdata.cpp:106 +#: kcmconfigs/configgeneral.cpp:45 +#, fuzzy +msgid "If checked, window close must be confirmed" +msgstr "Om markerad måste borttagning av brev bekräftas" + +# qoptiondlgdata.cpp:107 +#: kcmconfigs/configgeneral.cpp:48 +msgid "Confirm delete" +msgstr "Bekräfta borttagning" + +# qoptiondlgdata.cpp:106 +#: kcmconfigs/configgeneral.cpp:49 +msgid "If checked, message delete must be confirmed" +msgstr "Om markerad måste borttagning av brev bekräftas" + +# qoptiondlgdata.cpp:147 +#: kcmconfigs/configgeneral.cpp:52 +#, fuzzy +msgid "Start Minimi&zed" +msgstr "Starta minimerad" + +# qoptiondlgdata.cpp:146 +#: kcmconfigs/configgeneral.cpp:53 +msgid "Application is started as icon" +msgstr "Programmet startas som en ikon" + +#: kcmconfigs/configgeneral.cpp:56 +msgid "Close to tray" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:57 +msgid "Close button leaves the application running in tray" +msgstr "" + +# qoptiondlgdata.cpp:164 +#: kcmconfigs/configgeneral.cpp:60 +#, fuzzy +msgid "Minimize to tray" +msgstr "Minimera" + +#: kcmconfigs/configgeneral.cpp:61 +msgid "Minimizes to the tray rather than to the taskbar" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:64 +msgid "Show Connection Errors during refresh" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:65 +msgid "" +"If a connection error occurs during refresh (e.g. unknown server), an error " +"message will be shown. During other actions, this error always will be shown" +msgstr "" + +# qoptiondlgdata.cpp:60 +#: kcmconfigs/configgeneral.cpp:68 +#, fuzzy +msgid "&Keep mail as new" +msgstr "Behåll breven som nya" + +# qoptiondlgdata.cpp:59 +#: kcmconfigs/configgeneral.cpp:69 +msgid "Keep mail as new until termination" +msgstr "Behåll brev som nya tills avslut" + +# qoptiondlgdata.cpp:113 +#: kcmconfigs/configgeneral.cpp:72 +msgid "Initial Timer:" +msgstr "Initial timer:" + +#: kcmconfigs/configgeneral.cpp:73 kcmconfigs/configgeneral.cpp:91 +msgid "[Seconds]" +msgstr "" + +# qoptiondlgdata.cpp:112 qoptiondlgdata.cpp:118 +#: kcmconfigs/configgeneral.cpp:75 kcmconfigs/configgeneral.cpp:76 +msgid "Seconds until first automatic logon (0 = no automatic)" +msgstr "Sekunder till första automatiska inloggningen (0 = ingen automatik)" + +# qoptiondlgdata.cpp:125 +#: kcmconfigs/configgeneral.cpp:81 +msgid "Interval Timer:" +msgstr "Intervall-timer:" + +#: kcmconfigs/configgeneral.cpp:82 +msgid "[Minutes]" +msgstr "" + +# qoptiondlgdata.cpp:124 qoptiondlgdata.cpp:130 +#: kcmconfigs/configgeneral.cpp:84 kcmconfigs/configgeneral.cpp:85 +msgid "Minutes between automatic logon (0 = no automatic)" +msgstr "Minuter mellan automatisk inloggning (0 = ingen automatik)" + +#: kcmconfigs/configgeneral.cpp:90 +msgid "Timeout:" +msgstr "" + +#: kcmconfigs/configgeneral.cpp:93 kcmconfigs/configgeneral.cpp:94 +msgid "Seconds until a server connect will be canceled" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:23 +#, fuzzy +msgid "New filter" +msgstr "Nytt brev" + +#: kcmconfigs/filtersetupdialog.cpp:25 +msgid "Edit filter" +msgstr "" + +# qoptiondlgdata.cpp:136 +#: kcmconfigs/filtersetupdialog.cpp:34 +#, fuzzy +msgid "Name:" +msgstr "Namn:" + +#: kcmconfigs/filtersetupdialog.cpp:40 +#, fuzzy +msgid "Filter Criterias" +msgstr "Underrättelsedialog" + +#: kcmconfigs/filtersetupdialog.cpp:44 +#, fuzzy +msgid "Filter Action" +msgstr "Underrättelsedialog" + +#: kcmconfigs/filtersetupdialog.cpp:52 +msgid "Match all of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:53 +msgid "Match any of the following" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:73 +#, fuzzy +msgid "More" +msgstr "Ignorera" + +#: kcmconfigs/filtersetupdialog.cpp:73 +msgid "Add a further criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Fewer" +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:74 +msgid "Remove the last criteria." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:86 +msgid "Choose the action for all mails which are filtered by this filter." +msgstr "" + +#: kcmconfigs/filtersetupdialog.cpp:94 kcmconfigs/configfilter.cpp:132 +msgid "Spamcheck" +msgstr "" + +#: kcmconfigs/configfilter.cpp:33 +msgid "Activate Filter" +msgstr "" + +#: kcmconfigs/configfilter.cpp:35 +msgid "Check to activate the header filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:41 +msgid "First Check: Sender Lists" +msgstr "" + +#: kcmconfigs/configfilter.cpp:45 +msgid "Whitelist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:46 +msgid "" +"Click here to edit the list of senders whose mails shall pass the filter." +msgstr "" + +#: kcmconfigs/configfilter.cpp:52 +msgid "Blacklist" +msgstr "" + +#: kcmconfigs/configfilter.cpp:53 +msgid "" +"Click here to edit the list of senders whose mails shall be deleted or " +"marked." +msgstr "" + +#: kcmconfigs/configfilter.cpp:65 +msgid "Second Check: Filters" +msgstr "" + +#: kcmconfigs/configfilter.cpp:70 +msgid "No." +msgstr "" + +#: kcmconfigs/configfilter.cpp:86 +msgid "Moves the selected filter at the top" +msgstr "" + +# qoptiondlgdata.cpp:48 +#: kcmconfigs/configfilter.cpp:87 +#, fuzzy +msgid "Moves the selected filter up" +msgstr "Spela upp den valda ljudfilen" + +# qoptiondlgdata.cpp:48 +#: kcmconfigs/configfilter.cpp:88 +#, fuzzy +msgid "Moves the selected filter down" +msgstr "Spela upp den valda ljudfilen" + +#: kcmconfigs/configfilter.cpp:89 +msgid "Moves the selected filter at the bottm" +msgstr "" + +#: kcmconfigs/configfilter.cpp:116 +msgid "Third Check: Action for all others" +msgstr "" + +#: kcmconfigs/configfilter.cpp:123 +msgid "" +"Choose the action for all mails which are not filtered by the steps before." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:17 kcmconfigs/kwalletaccess.cpp:86 +#: kwalletaccess.cpp:17 kwalletaccess.cpp:86 +msgid "KWallet is not available." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:25 kcmconfigs/kwalletaccess.cpp:94 +#: kwalletaccess.cpp:25 kwalletaccess.cpp:94 +msgid "Could not get wallet name for network datas from KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:45 kcmconfigs/kwalletaccess.cpp:114 +#: kwalletaccess.cpp:45 kwalletaccess.cpp:114 +msgid "Could not open KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:56 kwalletaccess.cpp:56 +msgid "Could not create folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:65 kcmconfigs/kwalletaccess.cpp:122 +#: kwalletaccess.cpp:65 kwalletaccess.cpp:122 +msgid "Could not open folder for KShowmail in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:73 kwalletaccess.cpp:73 +msgid "Could not save password in KWallet." +msgstr "" + +#: kcmconfigs/kwalletaccess.cpp:132 kwalletaccess.cpp:132 +msgid "Could not get password of account %1 from KWallet." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:182 +msgid "Please enter an account name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:228 +msgid "There is already an account named %1. Please choose another name." +msgstr "" + +#: kcmconfigs/accountsetupdialog.cpp:241 +msgid "" +"You have changed the account name. The account will lose all downloaded mail " +"headers. Please perform a refresh." +msgstr "" + +#: filterlog.cpp:128 +msgid "Could not save the filter log." +msgstr "" + +# kshowmail.cpp:588 +#: showrecordelem.cpp:160 +msgid "new" +msgstr "nytt" + +# kshowmail.cpp:585 +#: showrecordelem.cpp:162 +msgid "old" +msgstr "gammalt" + +#: filterlogview.cpp:21 +msgid "Filter Log View" +msgstr "" + +#: filterlogview.cpp:31 +msgid "Deleted Mails:" +msgstr "" + +# kshowmailview.cpp:42 +#: filterlogview.cpp:36 filterlogview.cpp:63 +#, fuzzy +msgid "Sender" +msgstr "Avsändare:" + +#: filterlogview.cpp:49 +msgid "Clear the list of deleted mails" +msgstr "" + +#: filterlogview.cpp:58 +msgid "Moved Mails:" +msgstr "" + +#: filterlogview.cpp:65 +msgid "Moved To" +msgstr "" + +#: filterlogview.cpp:78 +msgid "Clear the list of moved mails" +msgstr "" + +#: kshowmail.cpp:75 +msgid "" +"Thank You for using KShowmail.\n" +"Please use the feedback dialog to tell us your experience with this program." +msgstr "" + +#: kshowmail.cpp:75 +msgid "Welcome" +msgstr "" + +#: kshowmail.cpp:102 +msgid "Autorefresh: %1" +msgstr "" + +# kshowmail.cpp:122 +#: kshowmail.cpp:132 +msgid "&Refresh messages" +msgstr "&Uppdatera brev" + +# kshowmail.cpp:125 +#: kshowmail.cpp:133 +msgid "Show &header of highlighted messages" +msgstr "Visa de valda brevens &huvud" + +# kshowmail.cpp:126 +#: kshowmail.cpp:134 +msgid "Show &complete highlighted messages" +msgstr "Visa &hela de valda breven" + +# kshowmail.cpp:127 +#: kshowmail.cpp:135 +msgid "&Delete highlighted messages" +msgstr "Ta bo&rt de valda breven" + +#: kshowmail.cpp:136 +msgid "S&top current transfer" +msgstr "" + +#: kshowmail.cpp:137 +msgid "Show Filter Log" +msgstr "" + +#: kshowmail.cpp:138 +msgid "Add sender to whitelist" +msgstr "" + +#: kshowmail.cpp:139 +msgid "Add sender to blacklist" +msgstr "" + +#: kshowmail.cpp:150 +msgid "Send &Feedback Mail" +msgstr "" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#: kshowmail.cpp:153 +msgid "Setup &account" +msgstr "St&äll in konton" + +#: kshowmail.cpp:159 kshowmail.cpp:543 kshowmail.cpp:559 kshowmail.cpp:644 +msgid "Ready." +msgstr "Klar" + +#: kshowmail.cpp:165 +msgid "" +"Shows the number of deleted, moved or ignored mails by the filter.\n" +"The positions denotes:\n" +"by last refresh / since application start / listed by the log" +msgstr "" + +#: kshowmail.cpp:326 +msgid "Refreshing ..." +msgstr "" + +#: kshowmail.cpp:363 +msgid "Job was stopped" +msgstr "" + +# kshowmail.cpp:623 +#: kshowmail.cpp:392 +msgid "%1 message(s) with a total of %2 bytes are waiting" +msgstr "%1 brev på totalt %2 bytes väntar" + +#: kshowmail.cpp:418 +msgid "Do you want to delete these mails?" +msgstr "" + +#: kshowmail.cpp:418 +msgid "Delete?" +msgstr "" + +#: kshowmail.cpp:428 +msgid "Deleting Mail(s) ..." +msgstr "" + +#: kshowmail.cpp:469 +msgid "Downloading ..." +msgstr "" + +#: kshowmail.cpp:491 +msgid "Last Refresh: %1" +msgstr "" + +# commanddlg.cpp:189 +#: kshowmail.cpp:523 +#, fuzzy +msgid "" +"KShowmail will be closed.\n" +"Are you sure?" +msgstr "" +"Kommandot %1 kommer att tas bort.\n" +"Är du säker?" + +#: kshowmail.cpp:805 +msgid "Filter: Deleted: %1/%2/%3; Moved: %4/%5/%6; Ignored: %7" +msgstr "" + +# commanddlgdata.cpp:47 +#, fuzzy +#~ msgid "Execute user commands" +#~ msgstr "Ta bort användarkommando" + +# qpassworddlgdata.cpp:17 qserverdlgdata.cpp:33 +#, fuzzy +#~ msgid "Pass" +#~ msgstr "Lösenord" + +# qoptiondlg.cpp:112 +#, fuzzy +#~ msgid "" +#~ "Filter %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Kontot %1 kommer att tas bort.\n" +#~ "Är du säker?" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#, fuzzy +#~ msgid "Setup &filters" +#~ msgstr "St&äll in konton" + +# commanddlg.cpp:189 +#~ msgid "" +#~ "Command %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Kommandot %1 kommer att tas bort.\n" +#~ "Är du säker?" + +# qoptiondlg.cpp:112 +#~ msgid "" +#~ "Account %1 will be deleted.\n" +#~ "Are you sure ?" +#~ msgstr "" +#~ "Kontot %1 kommer att tas bort.\n" +#~ "Är du säker?" + +# qoptiondlg.cpp:150 +#~ msgid "" +#~ "Password will be stored as scrambled text.\n" +#~ "It might be possible to decipher it.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Lösenordet kommer att lagras som förvrängd text.\n" +#~ "Det kan vara möjligt att dekryptera det.\n" +#~ "Är du säker?\n" + +# kshowmail.cpp:178 +#~ msgid "Message" +#~ msgstr "Brev" + +# kshowmail.cpp:128 +#, fuzzy +#~ msgid "Send reply mail" +#~ msgstr "&Skicka klagomål" + +# commanddlgdata.cpp:20 +#~ msgid "User command" +#~ msgstr "Användarkommando" + +# commandentrydata.cpp:24 +#~ msgid "Menu Entry" +#~ msgstr "Menypost" + +# commandentrydata.cpp:34 +#~ msgid "Press button to select command path" +#~ msgstr "Tryck på knapp för att välja kommandosökväg" + +# commandentrydata.cpp:56 qoptiondlgdata.cpp:49 +#~ msgid "Test" +#~ msgstr "Test" + +# commandentrydata.cpp:55 +#~ msgid "Execute the command immediatly" +#~ msgstr "Utför kommandot omedelbart" + +# commandentrydata.cpp:29 +#~ msgid "Enter menu entry name" +#~ msgstr "Välj menypostens namn" + +# commandentrydata.cpp:40 +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, <" +#~ "server>, <passwd>, <header> and <body> may be used " +#~ "as arguments
" +#~ msgstr "" +#~ "Ange sökväg till valt kommando och argument
<user>, <" +#~ "server>, <passwd>, <header> och <body> kan användas " +#~ "som argument
" + +# qoptiondlgdata.cpp:54 +#~ msgid "Server Options" +#~ msgstr "Serverinställningar" + +# qpassworddlgdata.cpp:17 qserverdlgdata.cpp:33 +#~ msgid "Password:" +#~ msgstr "Lösenord:" + +# qserverdlg.cpp:73 +#~ msgid "The account must have a name" +#~ msgstr "Kontot måste ha ett namn" + +# qserverdlg.cpp:83 +#~ msgid "This account is already present" +#~ msgstr "Det här kontot finns redan" + +# commandentrydata.cpp:35 +#~ msgid "Command" +#~ msgstr "Kommando" + +# commanddlgdata.cpp:20 +#~ msgid "User commands" +#~ msgstr "Användarkommandon" + +# commanddlgdata.cpp:29 +#~ msgid "Add user command" +#~ msgstr "Lägg till användarkommando" + +# commanddlgdata.cpp:35 +#~ msgid "Edit user command" +#~ msgstr "Redigera användarkommando" + +# commanddlgdata.cpp:41 +#~ msgid "Copy user command" +#~ msgstr "Kopiera användarkommando" + +# commanddlgdata.cpp:47 +#~ msgid "Delete user command" +#~ msgstr "Ta bort användarkommando" + +# qoptiondlgdata.cpp:65 +#~ msgid "Accounts" +#~ msgstr "Konton" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#~ msgid "Delete account" +#~ msgstr "Ta bort konto" + +# qserverdlg.cpp:40 +#~ msgid "copy account" +#~ msgstr "Kopiera konto" + +# qserverdlg.cpp:40 +#~ msgid "Add new account" +#~ msgstr "Lägg till nytt konto" + +# qoptiondlgdata.cpp:54 +#, fuzzy +#~ msgid "&General Options" +#~ msgstr "Allmänna inställningar" + +# qoptiondlgdata.cpp:100 +#~ msgid "Save password (not recommended !)" +#~ msgstr "Spara lösenord (rekommenderas ej!)" + +# kshowmailview.cpp:45 +#~ msgid "Max Size:" +#~ msgstr "Max storlek:" + +#~ msgid "Maximal size of downloaded mail body in kilobytes" +#~ msgstr "Max storlek på nedladdade brevkroppar i kibytes" + +# qoptiondlgdata.cpp:54 +#, fuzzy +#~ msgid "Display Options" +#~ msgstr "Allmänna inställningar" + +#, fuzzy +#~ msgid "E&xternal Program" +#~ msgstr "Externt program" + +# qoptiondlgdata.cpp:38 +#~ msgid "Sound File:" +#~ msgstr "Ljudfil:" + +# qoptiondlgdata.cpp:43 +#~ msgid "Enter sound file" +#~ msgstr "Ange ljudfil" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#~ msgid "Setup &accounts" +#~ msgstr "St&äll in konton" + +# commanddlgdata.cpp:20 +#~ msgid "Setup &commands" +#~ msgstr "Ställ in &kommandon" + +#~ msgid "&Setup" +#~ msgstr "&Inställningar" + +# commandentry.cpp:88 +#~ msgid "Select Command" +#~ msgstr "Välj kommando" + +# kshowmail.cpp:128 +#, fuzzy +#~ msgid "Send complain mails" +#~ msgstr "&Skicka klagomål" + +# kshowmail.cpp:122 +#, fuzzy +#~ msgid "Forced refresh of all messages by Shift-F5" +#~ msgstr "&Uppdatera brev" + +# kshowmail.cpp:177 qoptiondlgdata.cpp:70 +#~ msgid "Select account" +#~ msgstr "Välj konto" + +# kshowmail.cpp:122 +#, fuzzy +#~ msgid "Refresh &all messages" +#~ msgstr "&Uppdatera brev" + +# kshowmail.cpp:128 +#~ msgid "&Send complain mail" +#~ msgstr "&Skicka klagomål" + +# kshowmail.cpp:466 +#~ msgid "Logging in to server %1 ..." +#~ msgstr "Loggar in på server %1..." + +# kshowmail.cpp:509 +# ycp-format +#~ msgid "connection to pop3 server %1 established successfully" +#~ msgstr "uppkoppling till pop3-server %1 utfördes" + +#~ msgid "Timeout: job was killed" +#~ msgstr "Timeout: jobbet avslutades" + +# kshowmail.cpp:552 +#~ msgid "getting message %1 of %2 ..." +#~ msgstr "hämtar brev %1 av %2..." + +# kshowmail.cpp:660 +#~ msgid "Deleting highlighted messages..." +#~ msgstr "Tar bort valda brev..." + +# kshowmail.cpp:710 +#~ msgid "" +#~ "Message %1 at %2 will be deleted.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Brevet %1 på %2 kommer att tas bort.\n" +#~ "Är du säker?\n" + +# kshowmail.cpp:713 kshowmail.cpp:814 +#~ msgid "Yes all" +#~ msgstr "Ja, alla" + +# kshowmail.cpp:763 +#~ msgid "Sending complain mails..." +#~ msgstr "Skickar klagomålsbrev..." + +# kshowmail.cpp:811 +#, fuzzy +#~ msgid "" +#~ "Complain mail will be sent for message %1 at %2.\n" +#~ "Are you sure ?\n" +#~ msgstr "" +#~ "Klagomålsbrev kommer att skickas för %1 på %2.\n" +#~ "Är du säker?\n" + +#~ msgid "Header %1 at %2" +#~ msgstr "Huvud %1 på %2" + +# kshowmail.cpp:180 +#~ msgid "Getting complete highlighted messages..." +#~ msgstr "Hämtar färdiga valda brev..." + +#~ msgid "Message %1 at %2" +#~ msgstr "Brev %1 på %2" + +#~ msgid "OptionDialog" +#~ msgstr "Alternativdialog" + +#~ msgid "KShowMailApp" +#~ msgstr "Kshowmailprog" + +# commandentrydata.cpp:35 +#~ msgid "CommandDialog" +#~ msgstr "Kommandodialog" + +#~ msgid "KshowmailView" +#~ msgstr "KshowmailVy" + +#~ msgid "KShowMailDock" +#~ msgstr "KshowmailDok" + +#~ msgid "KshowmailDoc" +#~ msgstr "KshowmailDok" + +# commandentrydata.cpp:35 +#~ msgid "CommandEntryDialog" +#~ msgstr "Kommandopostdialog" + +#~ msgid "EditDialog" +#~ msgstr "Redigeradialog" + +#~ msgid "AlertDialog" +#~ msgstr "Underrättelsedialog" + +# qserverdlgdata.cpp:23 +#~ msgid "ServerDialog" +#~ msgstr "Serverdialog" + +# commandentrydata.cpp:40 +#, fuzzy +#~ msgid "" +#~ "Enter path to selected command and arguments
<user>, " +#~ ", \\, \\ and \\ may be used as " +#~ "arguments
" +#~ msgstr "" +#~ "Ange sökväg till valt kommando och argument\n" +#~ ", , ,
och kan användas som argument" + +# commandentrydata.cpp:40 +#~ msgid "" +#~ "Enter path to selected command and arguments\\n, , " +#~ ",
and may be used as arguments" +#~ msgstr "" +#~ "Ange sökväg till valt kommando och argument\\n, , , " +#~ "
och kan användas som argument" + +#, fuzzy +#~ msgid "Ignore case" +#~ msgstr "Ignorera" + +# commandentrydata.cpp:35 +#~ msgid "CommandDlg" +#~ msgstr "Kommandodialog" + +# commandentrydata.cpp:35 +#~ msgid "CommandEntryDlg" +#~ msgstr "Kommandopostdaialog" + +#~ msgid "OptionDlg" +#~ msgstr "Alternativdialog" + +# qserverdlgdata.cpp:23 +#~ msgid "ServerDlg" +#~ msgstr "Serverdialog" + +#~ msgid "EditDlg" +#~ msgstr "Redigeradialog" + +# qpassworddlgdata.cpp:17 qserverdlgdata.cpp:33 +#~ msgid "PasswordDlg" +#~ msgstr "Lösenordsdialog" + +# qpassworddlgdata.cpp:17 qserverdlgdata.cpp:33 +#~ msgid "PasswordDialog" +#~ msgstr "Lösenordsdialog" diff --git a/sounds/Makefile.am b/sounds/Makefile.am new file mode 100644 index 0000000..c1836a1 --- /dev/null +++ b/sounds/Makefile.am @@ -0,0 +1,2 @@ +soundsdir = $(kde_datadir)/kshowmail/sounds +sounds_DATA = neuepost.wav newmail.wav diff --git a/sounds/neuepost.wav b/sounds/neuepost.wav new file mode 100644 index 0000000000000000000000000000000000000000..d20b90e35df1bea9e5b0afd55826a54da8011f56 GIT binary patch literal 137506 zcmYJ62bdJa_V&A{d-BZYyli9_Si-X8AYcH@3VJbs2@?iXRE#KQ%n=n)%sC<|W>kXd zsu-?0q2#c6XJ==or+fN4zo|dZ=RPxZS65e8ojT_|?>SXH9(~Ax2Ue7OwBzY zFR9JbG)J~ZD97i zL~2w>S-F%A&?=>FqgE=P04~M(!<=k}|DM zYL&`4&#RYDxg6EVJyr6l%^vrY?*VdcfYj?Jca%x{MN)@nS8MrlR3_!+TA_UBOKY`S zi8fg3)=GK3^ruuCDkTG@7X{MmO1VaRBjs$QoHfa~8nsdKykSz>FI!`nwA)|$UnM1V zQh%tFj*z>W<%l~6$sG++f3UR5@j$6NQtC8i&j-o1p>i}-uGPtLwH!6bd6V>}S?+I? zwg<=)E9H!%p)!tP+2;+Eeh!!CG)QT!Jh4E|N~D!xQe%wtrbhm%+rxUfuSy%AeRhrXZ1|Nu&JBEF#NlDQ}e0fzqOqe2tXS<3{P%0J*bH zj;p2h{!(M891W18Mk%M&5-Fj4ob+IjTxrx=q_3l-h0$_Wq)n9jM#z<++9atxTAngO zt`3m;L*#6jluwZH>?3!Llp4)ae~eroEw#qTwJ}mUSk6bu`CyU2a4F-vSw@cRkmX?c zu9lV>{GZCxek;+J~@|-=$*H(QHX1`-~FNkbEiSFDlmyr4_8bRLbc?akhP|ze0|y7l80QjV4~*HtnrNI}^ldNxR8IZ(=x!w5M>J2|VD`pxnbB-UTfu&x4``CPeLqxqy} zKPlxI1En9#F>_QQ>Wv!^i`n<_*O0D zByFGxAU;@yXHg?kev-Z-V~`!YR-O%e;Hg+ZDJ|2F$3GqhVPI;;n|rJ>VX4qwZiiZ;={! zoNAdt{Kp9C(+DX8fd|P^wUjo=EHeLCi<-w~Ict_$;1hGj+%x0!W>mJUS?+C-BmPFn zXNY`;O9`_$L~2n!QaAsqz_|dJk(GaFjnrak{Wnf z<^m5jUe3UZGAW~n4I)K#ge~LSly=o+=L?QdCFRT`HdHIepm~LSBWZL4j4zkjs1&Wj z?xIo(!sTY?D@SVkWgdfCM6P?KeyJSS$)`qqH4McoZF=PzGg>WWa1?AeUu2di|5izP ze>tKrSbL7t$d^`ONie4}xn7ukI!Fp%0+|ZsxJ3E|j^l$$q(-HDE5yfdf$QKQ7G5T8 z50axHa-YJA!BS(OwB9IXSWA(}3=5bbt>9xTr9YJ-X?i+B#ynikunaJ|K<)wmn&kcw z(hf`tzJMf^W`P`NWSu+>>&CXJrC8HYc@~-kyTbC(K+0f^XkfFP!yT|Hm>GNm4IC*~ z8nU%p@xV!c?ASnBvn6DwuzM@o%}au3>2Dc%GA2G%jtBeV5k za!pbTZivU=X~pt<)go~SeNl)H#)GQp12~GdgO&4i*U!A7L^0 zd*wwa$6vzcVOmvEpLq<6{^3dUCDIxpt>dYJQnw&0fm#^@ID^k0mX$hMt0J8m(QA4Q z3Mt*?S&Wu`DE@ipK3&!{p5&w9Vs=($q`<>Da+jP;MgV+L$j2D;3K6bUYvILVDGS2bcY#% zy$+T?A{)FWBckUG**~;}-oUH4r$)}ua_&>DsgZ+evs?k)`xE;GDKd*QbWlXZ&{jc0sJqNS_*ITq+V{eg#sxn$=-uimrJ`*c}j(7 zL5Ef&b#dD03# z8QC&YbRWwmdO{2!J;uBJoBos zVwBW_SAs9#2W`?%S{Nor^p5s;o~nWF6O|C>;KM)^d`gu_9FGG^p#yk*6~|#`*a)&` zTwn{DL=;viXX+{l+E32$%5ZMtV|*|=z-$hZnI#HWQM1a7QG*Bs4o`m+7S_qXcvX4{ zLW0kn(Jy7|U^t!z+(x1`A{EeG3ky`9OIZYwjEZl; zerAw3308$(Rm(B+ggt@Q)zT9@0Fg2>$C^Qfq4ELo;H>ybu2*Uy8Bw0}r$Fisl5bc# z+E*gAuskv){j)5e>_?-Ftw|U?oV-Z-nlE)ggBqz14+YmiTg9cA=@NM&c!c&a8Y}|u zj64}Vmcm?-0m8D;a^|gCyf7mKH_!^|lj$UCV?5{z_FgNp0?W`c6%iF?HA`hBMrZ57 zi?9b3Gx0>U4jm-|WF~194vwdXqchW>0(J?b0CCY%VhUnDg}c}dNQNK4eiWNR*RTL^ znD0T^4<1+XS!Ba#@h^Bo6=9QqE6vId-v%x!gjBgT*f6cBs0J1R=fQsQSv-NKGb?0? z@v~?OOdFP7DE0ECoM@>+W*o0d{+QezwTJ=G6_ty|hvOSKCx;C7V}ocJo)_QE{J=!; zH`prYU^a4uu`u8C7fk>G=r5?wxWEv4!V?(-ItmZKlfaST>UcMDuXUmYDkoea7KWce zhT~;4ASihol`F#Yqq{}YB6%+2RdgQ4T_8^+22mL-vUto7Yz1q9E2@5B8Sr0~KUK2E zPpW9SQtX8BD^8Xt!eU-$hFlOHycx$Hf}RgQ(2A;!Bg{ z{t;4EBh0oyWJ}ygu6>-;g7;QseInWEdg(ushR=_dYZIj{5URhF6BXgZ$eiJqV8Z0V zKxO(3W5#BgAN-n%^cWxBo-#Zk9uU9AU8ALxdx^j6<%4g--z$DczH+40=9y)p2aFVM z$h}}dV|H#RVa)J8R&j>OH@cvF3{nHB@q}tt>!gG{v5FpeK2k;cDl<&))f^}$!Z^sg zf?{Z)vU+fY7I`+PLJh2;?*D43Xco%`31K{ND=Y^6#AA{XQCwZE8)1LSnpNbD-eAWH z&y_DAW~!EU6y}k8-OD&CWt7xpyx=)lrsOa(iv#_o4DLj%f!BoLF()HLvM^sX4}O7F zV9QtoZPm$#Z_1SSC6?qEzK8yU$=I}-UGgJ%f98TrKm9_UWTsdRf`L`YQ}KArQj5p| zO(fgF>Iykcc;pyq8-3-jQaQtmkiP-*cqaN^E-fg1!b_kJ_-CF32EnS(4Ms(dl&ko0 zA_j7L@UBMDKzdF+dnVd+FeEn>T)q!sitoW&(LV}bbeTp1g_YPgJHtlSCb z1TV^@eRP_<1*>>S7h7j$u;HQdfzu&Vun^S7N|*z5fM^Z`V z$BG8{z;l?r3VF6#;bBgSvv!SMR%Ay*wzE82mz*Ii39CaFkW6#7MR+dgq%vG88$vD( z4*}yK#)3!kL6eC+=sz(jI*Hvd`;4BxVykGmTG7jsE5v2Y30jmZXJq+VL8%oSRV;_- zqDEw{GEu~A_zrXr7K=R8%%ith2Qnw)!VH$lhrZ#V@nYCDyoCGlXZSGkK42)hC#;ww zm`R#R;0hWSfkP}kHPazK^LmSMm^4$1KB|oHt)x#+n7a0b6LS&9~ip5sY3HW=9+yj5E zmYi0VSO<1HC2Q-T{}`Fy(elCb!>e=UgPySdf+v6plN)FB%rcV4JD^$ha!uJb@7E8QNmN5(jvVkMge{C ztK3s4^~q@wQDG18I%JJ(nLAJyon{<={OtOn<1wSg{r4K$|Kq z00)Vx=m|cGk%MiFC|6owJ*-4DupygMWmROL9I=W5qc4ye%ob~C%_2e8NkO_C89f}B zHqb{97tLfX55EBxvg!{`P)kLPARqZD=_9p@ZCx*)tz-*%aQt2Vwl?Zm6^n8NUfrS=J zG_G>Tg@RR#g`SL;`k)8cP%hd7C!x8FkTH-~rLQW>0D6NCFzZs;NrKj}`p?=lxyMTBHM7F~XgjC_ zdJ#t<0k{!*ul5tP$T^lo8T@;ov_o!#Jx<_|LQ^~l&)Mq-Kv+CKc#p3Gxv+ZTV;BqE z8h=3>@Hwm&pR1TM2#Y^K$LTNgsxlU6H69oZ#k-I%hB@G;K^vG8nP^%=4`>6=$n*EE z@qq#KTjg^>A+(qni&&5S1!w^pO&f*Mdr*uB4_&Dg9jFwvRGCR+k7dxJ(mU#ch9Ck= z8g7ZVBzoi+HU|_SOiZ;PtgqgtLi=6 z6Exro*iFBcy)$QE8hn76CfY)_+<`8s_?y+`eCZ`KiSK4#)X1#-h}B!9oai!7`bOl% zE&*8n2sy^vu;Tzc94PWePr*I*HX&Q?RCY|RMD;;sv{aO(VlS2RL~j`#Rt$&70_i`i z?bs={!sy5bj+AHNC&`o$xsz)cEW2cg*Wrvr;$RSXOGJdHAhyq!Gy2NP0eXsdgC^{| zQ?V`_9FK->Az}KAR?<^)+Gr8}Q>|{ZcFjslt~?PBT_Z;&at~`RIZ{?CWwnC)WbksO zPplcR^2+K9nKx!MPsULwHOQn7kh>WbtXX9wl=cmf*6@L3P}H?zsSj5H*;Re;6<>!n zg7|mHAOQ@O zXcV7bBzlbuVGU?0c*9j}og*}!awM+M2`PX(%!tZvA~kBDv*a9D5h502WdTh@<0`~D zKn#wi$Tg4?eFTG$BRd{jveF(d{&1YkBKQ*(d(X*UW8Z;KT7<0(l3v4C@iL4RJO_VR z^Je`QAIEwIOp<d${BlDO2w}FiN^uy z;h2-NHbMM8QDR_ltX8g;X$Q#B5b1xF8iu|%e+)_?Gj{D@5y+9a8@;C<92hSPKLml* zE+6KaGMEQ(2zY_KTjU51!fssf4z0$26EiYX?2iRg-~_B_q4BIxgL&kU@Pf31R-!jZ z1}_C#!7ycSg z4&s3bJVC_?WV2`khRRiTbd|^x*#Qb)18dX@0<%iy6E@6TsxzdFR+A+sCy&Lln?vP~ zuy9%#Dt8c%v40k{FA%Fi#z++wN5qEK;!!yspRGSkYQkB_EHWo(K6VRVhnEq{V?E@D z6f45U@XO?>$W^0fARn9<-iike%T>?-77HiGb0SZ8quOUnJc)L~w$WH3Tw=Ujv9(-j z11>v4%9VE}Ydlco$^4MzBl=L*0E#0&=8_|r6+H&QU`c2IbFRE88q9rQGcp8QkuuLN zl0SSOex30|q+bE)QJM5}NS2*5E5oEuqos#nM}^pWL}U&It3A-@BhfG(9)APo!{}jm zJP$5~*5GGU9t#{ti#jKVpRsop$DMdL}__~Tw{f;O50z0 zG(!IB1!c?R8oA<0|5t;&3wxlkH8?TYL^gSEgib`jlZMF{R9sFhKri_qOY{**tJMnR z3C5uLAOqTtMU$x`_lS*=>m|R$tT9%0=pYmLEf&aZafN7{nSn*ZK*2zyhVCFw_^HaF z;hphCL}SWgm~$|Y=n(z}7rQ}KQJgcQLA8vRUMvR76Am1-%}V^*#6qd?Kr+;01Z@Txk_cVl|jNIPxOzUnk!xLxfjk6e{CF zegLZ>Q^2|`62POYOfXpr;v)9;z}i7=Ft}N2AQgJeDhj@LjLg(T=@B*Hzr}KfZzH;# zDEF}Is6q4;ZvonqMVcr_?D{N`yTLNP$=8vy!t&^cil|{8_(D7+Tnv^3=EFWY<_~G0 zrRXZSM6?D!WM4R3lvtO{0nuwjdP7vyKl>e!aid)$#p=gP)(CHpBz;n*@W(47WIrgm z)CR!^o~F^bEvQ*;Iv4DyPV7pgk&bBZm(QMGs&ZATvHr=`2wL z+DD8?{+vB1_*do|28A_^kY1xBL@#gyyfzZU>Qr7G@6T=pWu0nO9Q`1l!OAIi11cg< z*nhc501wALr&4(;o-JSg&CAwc*A-D>iToRta&}$ylRID{Fc-KbZPd$Cu~=*$mO=Ch z8gegK48rn!kQ{v`5(BMO_Jb1MJpu=~NA;B~4EK_$hgD;PtXQZF96Ug+W%FJEc^Pzl zn6w0IBR7h)V3RPru~Gw$flYxK%3AS%ST5E9|Hsm?Vq^;LF?U3NjEwk=Sw?CwIri7` zt`bN`qzCSk{bSs)YgTtz=>}n0-GS5MFJPT`SR%$;=^I(V5puMzNB|$s`eK>%pPZuN z?d1^dq7WoS4!i^oBSV8GxbJQE87*Hy*{lv0^NtRC;oN*G9pCX-)9$6&F< z(xZ(6DUV32by+{@l_x8&AIa7SbIZi0$a#_7V}CjOiO3Hz8}u2evQvbf z!x&j-1&!1$1jR{{271FTp$s& zgsWt(&=*h;Btu`2B;E!lLu89}!x->?pc(N*ZdS)>$1D9WkU#EK864PVT^5Ph$$;MB z-OyCDj9qPbW~`8$A^99|MX_dVjo1-vQki4=jlSR~mG4J(;2`sZze1ap|HCg26q#~e z#Q>y#${dpQX4cUa-i0I=2-d2#aC!p1gYc|ysw^I!PoXcU${2|z z*pIC89ZEmoTddZQX&PFy}(+Q62uZnD|PidC0Uau;zlC;_4oYd1?> zB5Ev>JQ}_R-;50?t0(V(X2P$SWf&o73x1(_ct^B{RR(wq&%lfFCeTP}9c?O?K7sTg z08t_K-juz{E}7BUJH|;5_sO<^R!zx{k6aimDPZkGF$LNv>P;49sw;*QEci0>OV5cV zK+|S9LI=<|@>fI&9D(!LdbP+6%Ts=;UT_<4PA+JoTm!B9OARI zjQ$gKvVu}9k|&o(Y&1q%1e5X2WF){7vIWQp*&-u)g>Qo8;DHo>R~#9=RvZ_`M;yq0 zJ>H)}$NLKgf@?@JlcZMVjz5FdFa3=;;so zh3+XilC@PwD(=BwVL#{yj0D|PtPn2;KjWQc7$&}q-C>O)E8a!pt#S5{k%7UN4a|Oq zi=5CIJe$g0vGN5j!b;I9+G3Xqv#RC?zlY42RTZ%!MYV>67URdTe^3d3jwi=E;5%TX zXeye3m)e`HLjKH<;xV8++DBBu5%B`gLdWO_ZK`M;3t-+Ts^Z`deJ6SJ><*B{a zpe(x$CP;mB0}CVGMcL@-Y9uRY7ZBaXDm}_)Q#X4l5MoE2@!x$$uM@wJf#HG@6Y!f>l zD`x}cJR*JK_X%LOW2CR_@L=~mdn&L)+Quis=J84RKzg9qEG!7Gpb#8fC3iqZ63kVr zuSg06ApZ?ME03hC06wAiGm=plB~K)dAu~lp#Cx=8C|N=n0zDy`N57Cfo>uu!qCK!1 zlu_@)z`^%g0A7(u7~f6A$q3a-6?O$%V^1)i91Mk><6Rjq?V(3#6&xLuVeD{gG?;ua zdsB8k33nNxY112g4jD28h;2^mX z*bDPbbjlHkIZ{5%pUU814{Cj1F$Gp;(Hrv1WF@iMAu>Yt^MH=L!^~UrM9HiSjFFze zpNLC2f&((=tOMvNW9TQ=hZa&sKhacTW>znFOBw%-j)Pa&1M+^ zVx@z$Nk16_x(@acn-K*R$=oV$QYgKlZ_FS2c#seljMQMtD*uJI;u-4gdTau`=NeK| zqX+FdLYmkc=de)~8R9)S!g`2;@EiCyxD8%xZ=?=GA`=EXfK$-|QpcJo$A9p?2=5Rw zGd!JK8OW`Er2(7f8DO-Ezj<2_T);1rXTv*VyR7=a=&^Nno)O2BiK~{Di1>&n$Z(?- z=pMVFkS3ZzZjF2TiOd)q%!bIH_yCWgemRFX$dM;fg>9odSO<2;IGIPR6wBrveejXl zXH}0q?ut9ZoLRMOkurAl3>DiQB6d1lYy!+4D|d{SvL^ZPJ`dJDDqGGzpK;RmcA1fo8A|=F>yw?vR!2L%`jj=Kk+EDvNu+lMEn<9^_P=b6N+zixURM-w} zVMpi$ObEQj-q@7@wz6xSnO8H+4q$u_9133#F73?|;8R$;4a$?TE13Tju_mRb_@hbE zo{9m+Nb7hwa$UTk4rfFvywQ#aM9OF!UI|XDazx}8!EE)8wL)+BB@)2mz*v|nyZyj8 zc9DP;=r`-X+(*VdNB(7IS!?4h=@yYwovcZNs`PfMJe7B;nKPBgXBO3-Pu|N1*Wjz5 z5t_yx8|IIUIJ;@^m#kf=wGeQbzA`)X5T2oOBlLk^Mj|IiB*3~N3HTKV#S!|A$7A+b4Fp$IP75of936+*Vi{Nrdj~m#^TYh{<>X(~ zuW)cbc!6b>NEvgD6%k#)smXG4H_uahuGs4Wiea5<{g6H?6yONH0RQ3{a0*tQ`PD0I z6|{hd(i)ZydqGRlO}IYw;q6$fLMfsrP?bCg*;YKf;`XfI!$`n$xH?>eY)y__2W7xl z+9#TUxsvm#le?8CSD8DQHZ}utsz?zFC({91Gh@Wg_(ftFaB(j(;P(`3<9!68aoS;B zij`+F;{2Wsyn+ZE4+4_I3P(wQ;nVOoe)Wc&8(skZiHF6n5=GKil@rFAv1d3I_)C5P z4OCK7S$gan%>lEqLA9ffJCQkgQ1})e4E_tU!HHREgz@3`hDpEhCOMKd@XCE;=mrb_ zZ4s?t4s@yE&-R>0rBC3AU*s} zu}Ih?$dAuZxgwqj?`MxRx`nR#r3TDj{c1>1YO)G5O3E1nyB&ifLo|R04~D^tHam5( zbFhYWZAK5@#-HQ4>!dcTBG@{ZLLMFehHqho32nh!gPpAG!vObkKNZ`t(n1X^o*WOp z0(8O0!m_Y)xG1y9?lZC|>~n#~p?BO52SDq|Fj9lqS>44-hsyGSF^mG#!IR;k;a2bs zYQQeh0oGp?+Q29|!y~Y(ft(PQgsq|H^iXj}uG21<4VPDO3Up}daq*Vy^)ey)rXm38;lEYh(@b-eBh*b3h)^8rO((D z?_9#zlyzZYup%`}M97Q~8^*G+6TB6DQXCAFW}dJNI3}?u5>PuiXondj%0PC+8$=Vx zjhwp5-m{OE94~wP$gY*h8LjRkr}8Z3iJh73cw)YIuZrIR zRC&4m#n$L^t@ujTS(sgZJz-212O1?W4wY!E^2msE9R)~z)oQ=!{nQ_0Wg9{0)GO6pi4wC*etvV`vgVMJI=UY zaVETv(r>gH7Rxx$dh8UIyf;6JK4R4>`>3>DvB#V{6YKx== zm^0|aZ}V_OU(xC!`ScT=Ay(#h&{#KB{A%wRoGVWxRU`5tUq{^{xu0LuBZlTzdepB# zu$P-XW@J{Q**@~iX^L;DUzkPKur!{@J5ca6WWXITZhno8)poM5L>TOdp^w$lUXApD z{;PMW=oRq-nRN02ytPDz2ApR`V0d5xnQW{R@024N2P)wU$4Lz|2MZ+|hQ~w4;8bLC zUl=B4ohSJ~!6O_;o$(6qcnj*)TbtF2##P!AS$~t=m(i6Mg{Uvu6zaF1>S}=sNEZQX;25fq>p6i zz#gyw&j^0NHtOX$@Jy_W{U>lr_N($v5?mMG307h2{7zwk^qh<$vGPQz3$FwTSS1G6 z$-mKS<&WV7_%$LD#e#@rIU~EO>__c%Q&|(m8{xKGX9htpqAt$xAY{1Uk^bS45Qz*NG9l;^c5*1g#>De6yB7(WBNAVoiuUV@m&r0rh zANdfGl#89PUd^gA`pCWt-k+$E(S*g`Xpi-)F)~J#!^i70v+CE`kU0?*Y!bY}KQb#= zvijgtIEJ+_XT&0SHgcG1?;3k5;n;XJ*04Y=wcbXCi###d%D#GXN4$fKPsVq`lGSPt z{)e0_I);3)9&$wNqa;5>Rs}wVC&ni#-US=SFTu}Yk~|x&!HXef{3J1minP#j<_p}% z3&Jnq^tsY=-W?zx0P>SV#Ddrpu3{Zxv#|7^Rc<^fn8^|ELE*9RqOc@922Un8hS#P? zvre}u|of>|K?pa-aBiN*+rT;(ppH`%9Xm!njy6! z(o%)yxa=5aEsiXbPik@}(IR`hkU#mDkURxlp&U&k&cXQ|ERsp&auQmpvE2hqu>$O{hAB1a?TgBJs#f>Mk22TOK~l~mA@ zJ;D(g8@#4T+QEjfmZ;pHmmOtD%6KlkiZu#25#u3FC#QK-H zJs3G{Gjdi};A6^?;FQc4IG}QKDsD%=$FfTp|FX2mg9{ee`!wQSqi-UELg~d;^TZDI|;VayYPP0OzesLLl zP?;{Y9}f?sBKpSGv1WK4@d?>lcn8dkaqx8R1f5y0AyUV~(@&lZQ^0EQ_22?EU<&+S z3_yF1(X!EUh5avJf_k&NMao#yVa*68F;1@WTi`>ajQkP&W1RGElH5g0tOT(KoADE) zO_9D4yD7Fq3%p4{Tt{zJyGjS%pN7lL0UwkY1?1|E@;;VSgaao<#B zP5u)cfM0=O3LW8R=n1mMcf++nDNvrwCH@nHBLj)vfvvDYkP}U3&e`=rPK$RH@gVGp zA@W6PMcMwM5A4-uZ5pc@EOs(V><7H#_d7rj_$1kI_8@_ktdHT*VQX+uP!o?&^r7}W z5XHbg6tAKTS;3jeFrq0iShzn~8gNkigd@u}9tlqr&Vm6BjPi71b^5K zdV{aWc9l<6yLuT1%z~K*^XlYIq=p>eaWDp08kUA0!ODr?$R>g3L@(rK1A;DBRnq*m$f%|0B;5|mv~7$ zANGVSX^*+(jcXNMlA{9uRZfHJ;0KbVKI@?hBgv?Fm`c%R{|FnOWYHR9WgAsRdtU9~e1@qU^KjE4s`Xk(kN{ zGf(g$=9aY(xDorm@eN=!Z}Kui<-hR-$ew+cWQh4?SL{C^B}jdoX1V)ITLq%AFgCo= zP^rhhXb_J#Q}HwCWu5H*03Y!DVfk1289WP-4R6ShvBRc7ED#?SMr23~L;Qd*;aA}C zrFh$*Tn8_a3hy-RFYT}v0c+qlilbV_#mlpwmUyLBJ5Wl;NMaGC|M1V*(#dMc=E*paDmfQe z0P7sATH!627v5&U=O8_m{rG>{$oLGn3UDryV8V zT9{nl7z$x<9#px;?J0 z{pEh|?s7d^(%tN`JE`0KLY`2h*>ZiTcB}O6cK2U*pmwTuwDz^T&h4iy))vZWm^R@f53$-If+O~{*ip<9i?k(>1?qqkqd%ru^-I4h!V`cd7 zgUogEcX4J$rZVF?z0SYRtImDS)6TQb`OZGhZ0BgFpOdi*ohHY&6ZUrdUHfhOH+zWF zYA>^&vVXLL&Kmnkd!s$eS?GLbudyqfCC(*|&uMf{b~>Df%p1<-&RXY+%yF4F8&8)L zbXOT;jSB56?RMh{v!CZ^caeUxxzecdM2vZ6jk(*iNq@^T(+qp>_O3L4&~MPM@huYyF=ZV>}(^FTUlzJad`nU~i}I zI&-S$Rm11Y_i1LS=LXM3<|cES%vHp=&e-5N-m^=8MSn?Or_a?_YgcHuXpe{<-RYj` z9_EgAf5|+ac|>IStTR^Rceu#rb-P34^F?}LdSg1Cejr_$&PgY&pR6s`t5&_0NL^?> zXf;_Mq_(9dTD8`W)Q_owr{i_lsRb5oSSj%_4cjKQJE2${hg^!+MT1%a4t-r=3b{ya`ns; znFHLho++M*&UsG6vs#b1rP{xqb38v}j?DNyrm>-J3Y7JFBlbIg(E zM$e_jT3?B|TED=1Mc@}N`adM_zrcIu22Y2__Ffy9=AEn8nUjOF{VVi6o{RlA`gR(B zc{lrxFq1~Tce=OBJHfly_}cu)SLPk>8El;D3;R}k4$(V|AALK_g<_Lq&1=2)dmhuy z)}Qmd=vk?=O21Uk(Jyw-5wy6|-B13G&z$QF&MeFv>a4dXI5GQRyUP9{{X;rx|1Ui> z{k>J5{=v$V*|^7AY(1Eom&&nvQa7dUNWGO>k{XekmAXvIW~bgrxv5)H<5F`|kEGV5 zUXi~EmN$K)byDiXR4DC9=UW|CpS1l}Dw8_ezQMjCU2C7|+-9GdzTI~057O^C=jxw1 zYm(2?cHD7m~Qi|_s(#eopIVJ<|^-t zo|o-woCo}m`1j5HCo|GG-uJ%wtUF%2&U=IJNx{IMd<)I~`u!raS$dZ_&-b}rWc=Y9 zXI!R*&0WDB-(8u*^>h61`(E|VG;h_qjl)AJuTQ_+JjB;$R{Eyr{y`TM^UGE%fUz;A4J}mv9*vJCwD(fHXNvqECSX)v*r;=hHKAD~0QY(^?)V|gb z>(bQJ)SIb;te;cgCwC`DTW47lQX7+1)_3U{>B-4U68G5!?w6^L`rft1Ivef5=^?2# zR!e$?y;93fztnqR`a{o5&$M)BY>9oAccB(eyNR{dBL4^G*4~z6j`t$(WtmIUpW1)9 zgUurIHs@aJOMRX1HvMVm%*+;jkx%okcW$!JGN%N7@;vHHaO38ofg8=H%tP)n-z)w~ z&oSD?zWITJ^|;&S+b2+CzAD=Jov+#dg)z%qU_NLx`QGu5@f~ce*Ejn<57l@-)ZRCv zp=$s8`ddbmKQ}lzSmgem`7ruTc&*mzG5te)Px!wyKlFSPSmJ-yC^POe$NHoGW^<`v z-WT4R%&Er9=FjF~#(l;&=Ih4uo}-ONjT4QR#Ui$OR_TvvGv)cmdQQ?#bWhSw)}Pk) zb2aw^cZJ)MsmfgEZqGb#|6woAyy6VC=ZJ;8W6w*!m~OG3PB*6Sv3|2|NMCP#lv-|` zoE~AVNDfR5vV7J)f>Bkes#GX-Nb-`@_H;%1-Nadm#?&P1_4HNN;=V%?uh_RZnZ&C2 zRo1mmKl|0x%Zc37vG!)C!oDrpKhd3jNMGg5iu;l?^+M0V>6;U`Szoyxy~im?e_|c% z-0vA>{E-^ecd%zuaHLz+mvTJ5ql_2a4T5_w`M(NWktj_c5&24wCZF`45_r*Z+*&iw z2pa$O9AsXr{h=Kn8sHT)^_~#EPME{}Bf=_z;d!H~5Fn{!=wVyoq zhd%J1j7~-v`F|`aEN;=YIVZnVqZ6KdS+=JZ;eVX=rrqaFG9pG-xtapZHJ`$Xs<3!V?&RF*>XMK9P zH9c)P)Mx3}tcw!U5?ib>&LHdU z_}oN;-DqE!x-9W=-&58|H=O=Hc46W&O?MxUZ|i-?nV&gVkZWmrQmWM6*I8&)rVn%G zr~gb}lex*h(7GdYzjn4r`y96>^Rjz_dv$7oTW@a2EVqj7;pQUm&vuQy#2N1U(*J&< z(Ec=XxaWc7n`XX$rt_w@HgK&`mOj|+3*`m&weQrf2{w68)Edpnf%)bReIN5r?`__U z@u_&(E#C3wPU9bAw0}&nNhEiuzubSDcd$2QTE3(2UwR6? zA%DI(!tbxgX^Szw=SJ({dZmDnBWixPMA{b6lQ|C#8G-<=qqTAunY@oW6^ z#7(KL_|v@~CYL5>_I@0%vT{?W^?2e1_T1#L-5s%?#UC8ob4d4pQkOa>B|qy*#Lsi8 ztOxoU`(nv=tV2@6t@qL`eTB)+%z^2{QtR!jQ@^GrX*=v#@-5+0_c_;Uhd4J_<(XeS zCuLIUlg;(U3D&#zX!A_Zi^dGm)MK2Y;3EII?p)_#qcQSz;L*$;=X>9?k^Vlvw#%O% z`P~@kZ41;Gnc(NS&zR5a>qD1BW4?#HA4m6%Y}e`nONw3yjmS)h+>?8xc}Vn;f>Vud z_oC?2#li66%x>@8@|JKs@o;o|`SITVnNP!~Q^n zDbA);e!9Q2#Tu9Dv;IhLPAy98oBTc1korE6n>aDKAmvG{=v^H@+qylqvipYK6YMp; zT^$dlHaX?pKeXkizO_H^y}PF+{#?8$@t@?D_@tO8=1slqyxRR+`yI~fnddtH?K;O< zZNC}+qxY4*WvPABgOcCGXQbykM{%OJRdB6u zo!&n$FTcdSOuMVd&1=e>sB3u-Mq7-<#zX$`;z3*5GjZG9QfTk%Ia zmZWF6Lwc|7Y)+n*UJ#odn`PA{R(Fn!|B?Q%_m0j?^ysYns^eg^1^isp? ziS*rXG#B)Fj*fL|nVh$MbKP~$LT^|2LGO>+lim~cPXmYKC+r>RH}ftHAMMc$Z>T8e zGUGQ-O<@1vF}Y_2rrYh|VFh!|&wOp6xBSZ@rO|E1Bi`ZB$D?nD>%8;LHzNzeUBSjk zxp$oZhrDRuV#AlCMW_1P{r7qA@)t+V+*$sIG8g(!Eu0%QQ^UOridXyI(Q2tl)J)z7!`b4)pwZskka?;Pn|Iv=q zr>D9SsdTBkBz;cuiqx3YNy)R4o0AVqjPP!3QLHrmOFA0Ar04U*2rI95acpt&+xTa( zU;7^Go!a|nYF#|l{!skK^yNL7u2J@|&rvHw$>^?Ylo7YOdwd=CjW0~_4 zGvfDeF z@wY5nJH>OkTk1@9`eiQmjq-Y|9_wT8<-X_KBaJKd0_ULMlcD*U_uVpYgOTT78P4-2 zo!Ooj!wVvhNi^_j;4WXGGq{yvh2Jfu5qzJx6(bB~ONW zts#-Kb7q?JgO3O9G~Lj8UqJiYe?xA<`>Xw-_t@}l=7sKc-lKvK8FuD6%`j`d7ic4$ zh<=eV$Nko>)fQ+Qo$=b~nW?E+nV@G)%HKP}*N(cU zG4=~zZ9bov?F;6-=PXRGD!niCS!ZF;E_lNkAGojR@%XsRB~|N#<-JdapDX=Q52Su8 zS(JZ|^+j+|c)ERQd0WY(uC|QU&n(^Q{M6S`G_UFaZJoU%G_`0z-l0~Wx2AlY|5~#? zU-M4&d=u@9_7BYSmztM*efdx1=R0ZZk)q=Y&a8!5(5l>;CoF=zh&2&jox*M3;JB&!P*hM$2(8CYZ4#3 z+cI}{&al#fLwmbg=eP~-hGc%<`1rqxefy?4wzZ(`u=tS7@a|QK{`PyVEnR;}u3>8D zExWb8tKB*FjE<5$3sT=ZN5{)z-*lbV^NzjAKEFHE*&O#-bJM#Lzjkkmoo#npb9xrU zj&;UmcJ~g6FGzlxyhXb%UEBUq>LdSk_9I<4rcVpJV%^rgO25hPiGPs1I#Qf@ZO<{m z6N}Dh|FdgZ$w9`oy?2GSYSX&EDqb8Jy{Fu)&+TvQHrHj|)?W`l;~nHV(9@XrOr$2U zMo*O=VP2X%Hg8D$7O!X z+@)XWRwbvW@AXa54(>bA*`8@le4ac&as-Wu7rPcD-_&kP@6)?Gwjo)S{xxx1Y+n4@ z^l|C^yRPo6&Ez^`yYB70Fg_=FLuyQ7XIE86Q{NJ2LvLSeeXQ4BWxd*YUi-CuHR*Y& zlX|Xb`>St@R++q@ZFToIRytjto*RpI9G!kkKO{aaeo}f;{58AAcW_rt>@@#&=e$%= zW@2on)fe!4Pw4n9^;7gddu!ihV@0qm^J(H){cK-#IOfjlIovZN6!3SO3o=)vi$l@e zAN91o$hR&$%D5*mHL@&os@ah9h3_ffx8bG1Yy9U2DuemHY5v~at8$O>{^Y+b+TV9t zq`TyL|4MsVV0OVB1t0n!bef_s6cqWI16M}(4d3E>Jp4uU7vnqcqT;-qnbsa{LCGft z&zoI|8aKE4=kmt(QK`ck_X$nx&IFC3de1G^f5RoYqwN-_De#Q{Hn(5qB>(5$TQpbq z*e7N_56tvvO>lshvsyJuB;l(m2F zIhh-^Oz$VLGmQ_mg{kk25%!6_KYITYI54q3H77>YWv-e~K36CG4*~zlZrrP{Z)Ng5&(Dcl zTVJz2^8M92eCL(PXMA&GN9^2VjWZT?{@Zz%yE=AT_otaldKz}mvMfyG4biC z=elQil_sXU7xvED`C{LTW~y)0)*U^Sp^vQ}TQ7<|8{d}Lqn*(A(#~0ltD+AkX8e6p z`rYUai8njvS${gk&KK#4=}WEMeP`*qIlL>F+?cb*^K92Z>(<~!!B%U5^>y%MpP@Zw zu1q&-pOtJ0%!?hT|DF4N=tb|wjIG^Uurhb2c82e2|G?<7(ixsZ?I%hn6-@9R;Vuh& zS2;NJiC*bz4jfZ&R+&P*SYUKbx~ z&rA)7ZA!nUX?^{>$EEMgXx5~7sr^CbuhflwFU7W4$7pMN|I>9svcbMQy)Jc4UuoYg z?RmGjr_0*tJuWe`ZAiMv?@9j9`Lcbmt0nhK4aiJ!GxiyMZztxsMIKY1<`}7w67xug z-MQSp-#twt%_a6OeVRANI6L#Aew^(aqtX}X-mVj46`B@5KKYPmMSJg_fu6(6eqF}y zU$lYVXLe8Mit5j#qt-*6H+Da(9cF!zUgBQdwW2qzwPb#>Bkqiz_Sjj0Qr`o@l#QY< z?S(x*gzruN-M2Y-QqHALZs#b;39ZbGk&JS;wlaUX@5=Z&T3OBsxvzQdupSORpLdb3 zBlDELDf(049bRAN0pC{N75=WsFTrhrsd={rmum&#dvjL#pO1!e=LJ3sTowEz;P@v+ zSLN;U{p6pK`?zmO_~e4KJqcrTK|J>`cck4EzAAroWVk&zS(5WhZj~ox9OVrd{k$(bVQSnBxPm5Ic4`#9e-;DeJ^jnw|A-A z**19RDb_2_Pus8DQ>8uD@y0(d_b%-_VfzJbi~8DI|JV9S$2~i4=)T21d)KBt_op9g zuiANX&ylhIJ=0>_x;k3ZvHtev_M*;Z-jdYoZF974XJPDhyE1)z-}U;{8N2=AOkKf& z_J;26;CoMP`U=B3`AaDI50b9HK1PNZz7ez>idznuSv{eIEKMV0De;cemShPi8~Ukk&!1?{%!~T^1|e`Nltat#|d7 z@5=q#ySue(R_lbVYqz|!>*8I{?R;R@E&puX{6zany9WI2*>Ym*wDzrg4&VCqw(Hwt zZRhX$eb3H4M%&`vrQJ{NTGrEFA(3(>#rxssY`M;{`Di#(!Q!=x*zHCeGLFKjmF0ENt^J@Noa+g;<*|4T~ zTy#pm2l{=OH!)lveWb=?dG)hrZriC&e z_zwtO>P|K0h9?ED3bsW$1Lv5T$o_eGfgO&64YYX0tT<1O9yeD#1^ltqb-4mGZ`_L%#eBpW8_}pV?A$^YhZ|w2D&9Wvi ztmmEd(|TQeO-D~WVZE8m^jy;MO6R$~Ls|9?V?{CAb~ z@8^jw_O1-ylE1Kcc2v`^3N0)3gbuSm3tgXka$sR_mwtBU$3RZtc=xmP@7j_6HP+iP zzj24}oYaAdJ?U}ok?A{nr^nlquP0|F*7YoE`#n=`ZQuEC*Q&ne_{%+awk>EqJa%61 zo9(}~T3u(xzUaBLYkd2@-FI}K*7-t5XV-7Nv7Y~R+|xcc_FVFlc&KN6{It|@eYeG1 z6Mc!*$s+6B!~sdad#F3mKGGhVdBgbBOlik?-t#@@n_!$|7W=;S9_C-}UlF`9bb9d1 z(CyL2@PES-^Nx=+hO6@4j?{XLdi;-M?$zu9jWR zv2BTQ-M_aT-+g)f+>Qm^xrre$J-y31vwLCkVDF{wmgF$a>*>>fFz4%Ko-zLG0^R<) zkR9G2Y5QkkmSAb>-)C!T-W`2@5I=hU88%t zI!CoX)3&^A{qEHE+jj5MI%LN+Tb6Il?09i^^Nt(-ZQXkNu1~gBY&moT<&&e;nue_?Tw(yqn zFREr&{#n|;@|>#ED{hyKXz_}RYksI6*YCNS?&{oV{0E;85X zr(|BVKhCUlZ?}%@J*Bs_@4MKX?!P+AJFaQ_vTeWiExYq~JhSteU03b+VMq1O{H^OY zJ^J^tnblBv$`Fimoxtk>%^B-RbVwW6!K@+qi3c z@7lI)+qSK{w*I?gPiA7Xqt09JGaoYZ?1xP%Rj1DRsRK68Z6^g#kE6WNfq}sVa0_f3 zU7mAS9D`A@~5b#5>t&+om1V@)Q;h+l*;ZgEmK~nB*yI4bWT~C zIz9e*-20^GsVQkElkX;sOr2j1&uE=II^|Bv<)mKm6>;;D;!`fgPf-(^cL}28t1(ZN zF&a)uN>7UGNE^%L((Uwad?zuMUyZnk)P;IO@zCH%gMc{jET{>1JYAiA?KiCVEDrMt zBd1?yXswr3ZL9pLZCt^Wtt*;ZU??11oLPLUP@6~Pjn4m^S0`^@!Oo(kg-7!S<#f;e zRnW0GrkGbWq0n78sCZH7w2J$cf3!tatBe7?M~|2Sj{;_edP=F9nG%zC5g}D3gf;c zzfG-|vMAY~ye?^cQhY|B+PloujQ=v4WX5OR&SEnDrWT|PPV=VxPMeuIEGsGfa>BOw zS;@OnQj*%nj#k!CPEzeuB+56--^w~lGK9+j+Q}yuVMXwr=tNE!{V!5IG%v7#eeYT4 ztnQp|`)R&lnP%B!@*0L#wbI_L=v(@scuUFKq927F3Loap$ZMDXzr5_cF}b;adu30{ zX^=hhFF*Ti_WYb-Ih%6&=RYWTlE0a_HZrf+S z?-=XAoLfDY*ePKo+CF+U+7+6I)WSnVDfya@Qsej${u04!sbA4U{zI0aN{o3B($$C6K{JW2nS zZcD$Ac{_7U`p=Y0Ne`3plpcvc;&Ngxscy^65`k=@JXLl{T1z%vw1hfG3W->tA?ONt z&iw(@zsG;gpW-{>+3W7=(%93?-Ha{tJGGC?bIY^Kmz2krX^RIJ{ZqK3AhW=m_b@j% zSDvf;`}NPozuR&?<<`laoc%PrK~9Umr~Vr9%!SUvlp?73WpPe%Ua_crMrE(6`ML)B z8iu!~s6}L-?mFeE@RWE9d}l%J9v8mN&499yYUmLB23dpZLR*-=B8TLNOf5eH&dhsd zceO0W8@nT6Z=yZEUHtomvLs2$vEoXQ)BAL@OcV>3WxSDRsn3K6ELzr$z?U&|C ztCm4jb5uW8?O8@~>aC=)3D4v2#An4fj9a9+tBR_As~#x_Ddx+1OFjwrQDNc$@f2@_ zje?JJYr>bp-9ryq5!=sy&tq`lpij7Bzize}=IYl}UM+i8(xJ3lnWpS;si^cs@y?=_ zMKuaNdE0YN{O$dx^`8ZQCuN(mO*#MO73N3(9{#Kp-~DJxQMry5dgWqi$CmpLrcmDwe$dR9)R zII|$5eP-Rv6B)fS=4M#Z>!-)2ElpXU{9jVbq^F5{;$O!QnxN{B@{GJfvPE1=ED+A7 z+fvi{XNXqVN=U;^inIw&4!riY@|<(6bs?_Z&RI^0{f%jy-czZsNGUr~(y^>{*_4vi z#e0jk6`aXmUr?6cBX4`|m7HGLum9fsoA>u{_UW8|bNA=g&;2LYmfJdiN#V|-P!Uqn zwPb0@^U~JkS1S%xHq~!6{xw}OZ?i79&vE>9I^37N5SVQ{X>lpN)7q!JO=y=mK4C}P{#Z@SbajC; zRdG%BPSQ@&R&rRdgq(_{py{xPHxS^ojl$}n&VR-`&0XaTIi}cOS^Aj{80zTWXoKb3 z%HEecOKuid6}>GwQS_*=Q9+yh33*R*+GJn++xze6ztjF+`1>{Z zGHfUDgUkn0Uc3Mi-VoK3sDQZjwDN%ZL(G==hY6h%&Vw7|Lj0ekGbxFwp;Rh;VFr~s zE@MN6BU4o^nAIk0d)A|B`f4q+er4D*axzw>b7}r`G&4J6V%n}`RZ?j}$N0&y2Q@|N zd#VkJJ<@)XvyvX7!AyXvSKtH?cf44K=RU9jQD} zS-0}PilOBlO0O4IIk#gVJ?~bK6g#-*KE_@9@!7GH)mhS#&RCz^v$ct zKVNXVFi>PHURsh=x}dCM#X)Vas^j`9!)N0q^JVJ+`zPmI_f^keUo-Z7U{2^;q#;iW z-G`eY56~TW8?r04m}xD1AbKrsC_!aU6osIAo{lYzEspIIYmLc@!xH``yi2N=vN&aQ z>ZjDo)OBfd(iIu|GG3&6(|cqd%GiJ_TviZ1fmGDx~pbd;Gz@qn(&gSJ6iBTim!%9b!HF9IhCu)x8(`) zCl!t_9#)iFaI|PGScjFR_OdD3(n_c9u|aDXVd`hCW?$eK;JWIr@9E=h>1Wxj(A|ib zcLO>Ge?!7(UHm4|lmD5@p=%1tgvH{uvRnnCTB*{iCaC3_w3zv^Sp2O7ZQ|IZnMw1K z4kekA7A5yesg;VS%}dKkyPg(FeU+M>T9)ceU6wX6O`9r69h6d@T%7nNzG*^I!pJyJ zj6);SOaeCWL`7S0i)ck>nIqH-asF3^lk^3HXAa@4SIw$8RB zo2v|ObPK9lRj#Z!Q@*w0YsG=GS0%@a9~9>2Q+dmCU*?UROtpBD@HpOY)MvS30tlWFZo#lLB=Q-Zn zrdYbtR@!yrQjkhW3eeYo)1bt-iW3Vk)z2x7qDtXASpV?>hg#fncy>NF4eW znjCHt(eO?qUoZ(#gTI-En0oXrx}RXLFd$Tk)e@~VUw&8KSTR>MQS&Iq6k8|0Wqi-r z%`x|5o5Ze<qkoY6c$%_)TZ?dyqAVDr_tKg1a4V9<0mW0UDBwKqq#P zx7fAXal&dbdGvF1A9cMe*OZMb=PKq^w6C~O-n#s8+3KRQ{JjO63WgQ@uV8Dz(SmaY zH}bi>X$7;2`<5!pD$3edJg=Buo?3pXqK$T+_IK3-L%Nx^&2?y8f83ir+db91V|^d| z3j!TO=fX!L(&!r=2{e(vuzAEjlH=E=)0oMEC&DsOxwyG>rR=cG2Lerps=lfOntd_G zSXbP$xHEBm;@8KIh@TxFjL%MJo3t$HW8$MEb@Ir>zwwjf6Txk>2fs&c%-DwoJtN<2bXm>{6(hh#Uxk3B_LUL(LOtpQ4i8-b(# z{yx^-*g3$l!#>5j$BdY!>O;B6ihGtQ^*!{ zE?8Z#qOfOi>r#2y>9QZ?(u#}adF2}`O0@q}-P1+%b&UxogPCtvIGed!dV6@6d#`$L zd6)adY+8^3h)y($Lf>E=@(R00tS8s-i>UT=T{?x?D7Y>hEAA#eBfBj>r-)NdQr1;2 zQifF5)KT^Ln50-?Z1>ovvHfFP$F+_hkpO{{Ff5^M!n?R%u{GlGxR!A(<5$GLj31cL zIKcue3IE04joT3WR8vQ_RB=QO$&+NqrT>#^q`yT+1qYcibYK1^auqQeD}Sc@w=SJ!$SAj`{Xd>kRWg<9hvus=JlnDw4pS$S$2$99#6WNKlejQdrWk^mys| z(yb+xMYD=-7k4OGR{Xd4pVHjYjIx*IH?@gX4Rw!n>4rI`Jkxa32{UP3W=*yovl$Cq^3AHU46} zFm8uNrxs}DtA*-L>M!aCYD_gpaZj;LxlQ>(VU%~2?H4Vj%g7)xglxdK@GtY1lPple z1Mf$qb5Q0l^c1*iIL6s3ty`=!Eu+no%r4Ua!f+D5Huhh>e`VB7CF?7Z$8?r!1v z>XrG=`=7BFf{Eckcr+J?c7aOa{pb)(jg7$WVqSDJx){TWgQSQ$O|KAq7d{mF1v)_u z;a8wMxGd@-X(nZ*Z=?yb4PeeXE3dEYq&lHes;w%CTA?XczfpZqJyRE`sw)pDPpeZk zGBv3Vsn@EdDvR=>@{Dq{vcED;nWPBG{>sM6U&!i7d6MShknk>p(Q?{K<&%>L9-+c- zq4(hTyamyrk@mq%{~1pgcLP@+yTbCuCLyjJnR(1oK`)U>go(#WeoDv6EHX&`RaQ;@OIBSblXHqus-vnB)f;t9 z^>4*=d9q@^;+nj>JSwkJ7!8Fjah?Z3=uUXcV*S+Y)=CbC+kc z{|b9Qus!4s9|vlw_2F8P`jG~a-I2M`o6uIc4$>IijoraeOn|Mzn&F%9OyVKYiKtCP zu?fHrvIOXgDB>_VpKsz{rCQPN=@rZs!A9XK(Hqfb(F*ZN$wJ8y$z*9m`F_P;#Sw)} zc}3YuS)^F5Jgmaii&Y`;SBzqb?3ZMQWS_Kw{JqRBhF?>oRl~bd3In{=Bh~dA-GGVXPr*jJ?o)*uLNX%sI!^(RIx8$T#2r ziLD-75NsckMYcuyM6x4FpcmGM4@FvVYdIupj$Y=CfPTRgnuJ~iTK%KQR`>?||7vgs zDBgy^BjApR7+s25Fe&*8=rxy+KJqwOMjqxD@jFs+^k^nss24St%#bQ&>tsFT5&3Kd zt1u}z`89cK*$Rn8qLv9{HD%?p_p+hV)sj(?RpMB2L^MMv0?eqDKajjmF6F-_*AUBq zD*6s`9ZH9G^S(#@z`do6UgH{a%foAe_u1pVu3o?Am1l})kmrhfi!0Ol)}CtbWBXzm zXO0-Z8SWZJ8rPeeSj+9r9d_FY+ay~rTbcE^?T{nttZ>eEmOI-$cn5h0fCs7}a6?(SyU{JY zGTs=T0!o1)_zR>!W}!-~9sU!)i#5iixCn27cOySgW0_b%L&1N{X?h~%;Yax}1=B^$ zzrv5A58?|FscfNav$Th_yA&6%7Hnp&&@O5?l|y}`QyGe$%{LJ-gb@FY#2~kj>F{Xa z1Y@9{P#8GN5_q}MEs;~94WW9#%aa`*9%;Z$j<(_D1K(E%UMN}+IUYO%TtVa5N4}c= zPCnAp-TlHn6ex=i`bV-;{U^O{_gvRS=V7PGxxh8Zz1&^fz1!2+f0H!@@d?$B<8w^(956==k7?nn!L}J7Ia9`kZ$dC4h zPCy8}3sj#O$RK1B+5z8;|G~E52?UB?L>HiA(4MFnEyfz*TZst(JL<*n&ws){Ox7e4 zh|XjliIQ!J3B)C03-KH0wk>2L2@7~(5JlRmT?8#ao`SwxY+QF;74|c|A+rG+XDDWRtEnB?z8RK zPJg!4@1GECX>jCIVyn<*-J|M;rF1$PT5!r`$kvV8Gb^>hzycxaGJqQmqp{ZCi zWDy*P-T+xRa6Z!5!=e774x$)B)Zxb?9`kVene8emERi$kpMJqw~Pt+88a4 zcHrHL-sikrU!DMdfspteawIj5PNAz&7x^x-9XW@DsReW$#=tZbo)_fMjVV1jmpF{i z!dGBL$N}hooHP7A)ChR}PDS(_#wCR>hQ@@phZ=;Bfm$5Ty^f@YdxQibQ7AD~H#8>P znVSu~msfeSp@#5I_zI{(71$2^A(n>DMfM`&k-@;DA|Y~#MffbN65Wivh3@iZLW7Vi zXaxNitBrfHWYhso<<*L|k8}=w3hZXv`+N9!zGvQQzOZki&*-`An(iFnoa0Dv#JN7Y zx4GUrg7(#R$U!(8ySw;&zWKf#-jD8gu4yiTyT9j%Zwh-oK!n8M*<<0{ zdxd1f{o&KlI>-fU&~xZu>?58>3?u3jiDU@W-;z}-HL1v?+7+$U;7F?5!V3MOxIn&#Z7kB zb$+uSu${KobY$4)S>=}XW|0Xob~X+&X)LR)jIFt?n(eq%V#zULhFtv`!#ZP6(2d-& zuXperHd|ABl4FA7h=X?iaH)V!&hI|s8R6;UZsYpT`N6f#t@ijqho9$L=WpZh%-&&> z*#YbkwhJ4}K4hD*a(@!54a9^xhB59vs7*ZJ7+uc=I2br`i=%p8M`$0s1kJ?;S`mrC+3VWglhB<+tTNd2{7RbwKkqCO0-MzD`2-#K}o5 zl8cf%r1S=OL3T1fWopXC6kGDUr2a{R65IU0bzk#CSt6e&`z-be=Lwe33FIiW9NNTf z4*eH+!D1}Umizwo3OuA|phl`A}I@ z+DV!&c_D5pjuD?1&yw_(9tIsTCYvD5kd6oIxd=>#GvpT(-xNW`OyxS|5ycdFCpn~; zsd%qYDhDawDo)8;$@JpB!qrTKGLUk7DtZEGjT}N6Vd>;1;7r;_Y$Rl4S7IR6AGq{N zfHMAhFgK7M;Irran^+HP3#LXsgkA>62d!Y0-}rm8X#qu`4%^Y+&o|PO;#zDwXWnYM zXnJAVX1-- zji`B;wZitwanbe7o#t8KIqQ)EOf=EQ2Yd>~ssbZ|bHd`N2(m&Davr!j)zC2D;QzwA zz-tLXuoLcz>_!TZiD&_~7{`exq>BE^R0y^Udy1xunv2E@4+=ue5auD>nRe5$f(GE! z?vfPBf{Na%#j0FoH$^Myb&*bZOehyZ!oz}1bPo9vx1ckTIHVq826tvJxH0e;*G3?8 z3+hMzV$Jarcsx-|4x^gUF-$J~fWHGzMTP<&(9iIP$e$>V48?QF>HMaAH)$e961(sY z_&Q95Nzoc`bDlP`C)6&W_3!sh^=duo-WT54{v6-{eHx4easqt=8`)(4VXxA&!o@m< zJ1~dN_R?xKpEZp&cef67jCUXN&i6NA6WLBI2h@ixyk_?scd5IPyQBMvNA26^mjtwd z<-s$d%i&4UAwb1;8+sN^=hj4afWTEn+T&aCo!6nXptaR$ycrGJ_bBaZ&3i zF=ZkviE6}D;K?Nr2r_dWBHFM4cuQOJ8bDg;BlH5O_)4SqK!(CL&K3>__psaj&;4K7 ziNF;o-=Bpa&`mo5G#KbwW#mYl9<$ z^#kSpyZ-6yzkvbZ{y`$2xthE_z;moeJ7Y&sI&2emKl_Ru%*xoS{tDk2-zwi5pA_JNtpbDDx_+zI?)l-7 z`x>(Dz^>r#z(Jtu7!7>i65xWJ7?A^y?5hYB=@NDXcLbk?764y&W6(XugFbKoZ!?^N z9mOvbugJCF?%s%Z0eX=jQVWT~FX5Z;c6bIj142}W(L_UjF26hV4BUsa>E+B9#?NFk z&*(Ljgzq7y6LrD->LU8_RkVxQDa;mC6F(DnV{Y+>ksZk)e3X8|3>Wf+eV8893Gy1g z5Ea7nqgNwsBL54Y3vc9b-iPQ;o)n&s7|=&3jHJN(z@BXcxZXMVYS4$1*kdFEae!=! z2GADX*{Fs09pqV*ME^!6g~x>&2IE5f(9*yOc9Q?3Z>4XAuQOOV%(u_I$#Krw#yr%N zXr64@YAbV$a1D0Pb(>xJE|t5X`>;FHvlXnI%KNXkt@nY)@9yF5?W*IP<=6pk%S7kD zKvj9#cZf|7wh0{ywhjyq3=2LA*}~n!2=I{}2`vkE;_5{|N2f`-$%(mXQCEMWRhytSf;-iu{X)jRclcn<|b0q_$4`txqR1A~Tvagax;(&0v@UuW7C}tGQZu&7* zjenY`#Bgj6wjUo!#1Xmpdwe0TC2oLztRMM-96(Md>jD+p4`K?@8srq*06oziBoX}| z@Xg;wGqHYPPnx2~B4we~!O=l)@MY*hNF6c;cL$NcS>G)07|$*DWcN7tS@(W-J=YY+ zR{M4PKaR%ER9AC1^SDcB0b$YL;0Z3o)tA7Bbj z#Ezqt$U0;b=mQ<73g-xlN@aw?-=g}GanjndKC+oIM7CejS^PwFLD*1mj=4^sp-lYi z{JG#}Zb)|m&c+(x=C~<(D()cJCV?c!#I3~(gy)%Iw2;0*)un$?rPMN@7aqdY7c3Dp z5!4s7W-960Oa)cK|H_wwyI?*ap+?e6869(jSwauz>#$1T7bio*0uJ^;;7m{++8j&| z-149H>AfnS88DV%UzYcqJI;N`b<@RjkDlg91@$|l3=-Pj#vg;hFZ(43v7KHE~nDd!~4Sr%wFu* z028_y>>C)u7W$IB&pZ=6lqb%Ed(Ze_b}UP=)%=Tmn|$|uAzv5&IR8(730pUKA(S1? zjcnz%bBDNh+-9ylm&{Szzuf-lL8vG2FHZ!X#Dk!#IS){VD0n>!a2Yi`y?I3N>P?z1$~zK3;Lnz%wpjqaSvIg!l!x< zc$P;o@v(Pfn*esqp^!(MrbCeJE)o|w<_fF4N^vOQIsz{BHSx%C0Zr^A}N$E zmEIH277n8Mq#HHyI)`z#$kWn&+nwPR`&WZGIu7J!R0Zw_da;*4H+UP&pMN5CxpARs zY<16bd)RW+G{Ue--^H-YC@~|JF;)_EG=pq^tetGjY@F3%U2T1Bsjwci-LtoF9JH^t z&Ni<$RyUOEX6b6{e;I`4_tv%!+I7RV&z0lk9H$)T?XPWZZO5!jt+lPqfv%;EqqcLD ztF60*Tk3A>e(%ol%=NwT&tp4)UceaG5zGiR480G9!-u$3Xd2oae~iDxA-omX&EpUS zj6=Q66qzoWLsp{Wht_#q^IPOxTkob=$wG1-Tdif zEwVP5!9P#W7S55plXX<&D&y7LLENEOvqtkkvs$CoERH!Gb49aI^`HEJw4uZxc1WzU z=E_~_J295HzKQmv#mV-hvc%5`KjKfsEr^Ycd8!&Kzavf)Yy^JYWOxO4I&?BPBv>mn zl4}I5fVx2)qHTZ&e6ats=aGB0N96hA>F4Y3Yv;Y`wmF7aVT<0<*;d`5ao6#j2i)vG zo^;Q4*Lm9;(?5X0@MzhJ58Atxd#ain>VcWCrTL?Aq@k7Zhv}9%!BWk#)%+Ih@2S=f z);5-ArUXM%{VaW|{vZ7?LqFqQ^GsW^!|A-{n&Yf=e0Cttc-K`I>Av9p;~wJv?E2(> z;4StIWDf>Hfl;2r3WehZ?4)k2$Sy(C{cSN2Z!Ms`YeO*UV4 zODdIqkyJ@6(nR@ic~`kzCX#KJ){q^M$0-TbR@G~jNWB5@%}q6h>Wk{PDwXPsauq=N zM=IXP>&c5`R+&TQkrl~?$TI+E_)Ypma!5QzyjN5pND=ndPbQcMKj3y$lnP zl*oukbFO++!RrB8prs)FV>p_O{zXn8V~|`#g&stkW23PU))D97V%&i}2Uz)kNIRGh z(xv>MQ`m^agTBQ;)aEBsgQ*y*4Zt=JG6#i-_>uUF_@?+7P&J&A%mR3KW64L!0-&E& zDt0L!0apLBdZT)XYJoCQaX_w+yJXvBK;tE=BOfeJm0yv)micA>lW$RGs;;TZRCQJ5 z${k8nIaBVH-jlH6JW&y-GgE{!ghz#h$S9IZzDs^e(j_k8e;}VG4!RquA6_0l9oY`B zz}U$Df<4)C?+5otXHR=W8)L0${b1{6UvHo4Xy^C?UST_Jn`zl@+Gj}A@6kbq0@Hh2 z*ct1d?Y20pY$3}ebEYZDG{@*OL`;RIOQtiX(Z+>_9ePVuRM%DiylRx*Z>Zqk zU8_Lv(%0G2w#@v|P@)^CXN>jDoHfzW!@1G5)h+d0_e}KO_4fAN@f!n?a9Q*tv>Z-^ zcR?mzaWuq@;1t}KNSDZ}$Y$;zUJASuQ2_jB9co6Zqx;Y+Xj^m}(gUfE^a0GpB5VlW z86ScN@LR-BvW)Mf`ZI`tFK8_oC~ynL2#vyDq7&l7;;6WW#3Q~V`3G=a@1+N%@1$|E zwX%Wo&+@Nwp`w9ev_h>MtKw@!F}-8DX-dIbZ&l_i+A3Pg5t&hPQSz^JgKW2auVMy3 zT4t+r)n+wcqtZN8=Kz)bUHM4q98r{B$sbRg#%^OzfotOm@&OtJu;a}Z7+7Tadq}w_BdU& zoLz1A%u5VMbSJdO%FY!pD!dM~6|TbUqJbp`%6e!Wx-+H))>)1ru2Js!p2uD<;EE@C z|9bKP8}QkYV&7q{W?pHm4!*TX#jvY;oW-&>2h&{RG_=8VUu!fxN8M zAm8U!s4KvT;mF#^V{Qgdj7abzq6NR0n#%MO*aZ^de&#jxh};g4$EWCEltXr-eXy>W z3;PC?E5&4esxN&2;4GhoHN_JonbMI`m*lYIzIcP^m+-A%D^mz~>gMzb`V+HUI7fU` zx=dbO`An6ep<~v>?2YLkiYRnYPIQ45~Tlo};MAT5Qfkx?$)N0C3O{doKokTVK2>J?s7(EsK6gcC%>=AmJ zc>eJexR1Gc9;v6y^VGZE>vb=8ezYgqMp=t2d(3sr^(->$BwKxZ3_w*bo7S3g%p0uD z9HX4e!8ej>x7n`RHTI)chk3Sfw%)I6q+hH1S=mlow<5mcLPe^!Pvy6&+WI-h1s25d z&3)N7lI;a@H~wYs`|o*Yx!1aUpzg15}HBZmw#js3lt|35Z&V(nO8LucR^ssoo!h#+Aig zj(Z;q$99ZqqS>upr@Ek2D=y1oq=&`#L?Tg5Q9aRR0R&jA6k-834z3Z0(Q@>l+sOnkeq{<_en{}%UON~5BjP;4t zVOwOIVqI^Q0>o#tRbm6op<@tGtTyu1^*{7a@ne3YH|lBZ`30DuWbYIo&aP#3fXP@8 zI2>3Qj1L6?>vfWw$EyeLM*cyMqs8cU^fTa|@{yHDC*&>S2RhdUgqPS#T*SL#pO9a0 z9K0P$gl0qC;S|7H=m2JWmMrHFq#eLRa7d&Tf06zxf3CQoEKm+ttdZ@Nwvgz=H^c>^ z5uy)5k&qS4680A{lCRS9@*G8HaU)U#VmTyyDsYxf zXIrrw1M1)k_NMQU>!78n;b_%dZM({Tx{G?A>Hn2_Gl04v;M@)Puyj|Ivz|-t{^s(z z^4-7P2i?W4ANHD-Oe3MYtX-(xp*3mKDlL`vs`I)c{TsbVSFLJQsUrnLF)sHe9thV2{d5t4_`hOmp2u2&9X}Qz;UCCX#6El(wg62)Tcgzh%lI#zLYyRi z5l@M&xD`vo{)aS0njl}`@vt3!giJ?|VL$L#QbYOZ_JW5%duoy7$O;tuRVvLl&3%no zJy*3!fy!2hw+Z_S@|k$S6@ga32x|!23O@-6@o`BL*?W1O;+3+uYQ4&;nx(d=t7)>; zL)9K|Gv8L3RPEK->gAe8nj*~$&3W}K)j;JW`5mc1dPh7`)Iro=cuLSkFqr;C3_u}X zqtF501sA}>ZR2hCfv$Y9y_=1&&9nBf%(eu~eDgkY7fZf%wPUhtqx-ApfoHLMr|Yt_ zyQ9Ls%+bgxb8T^-cF%Gpxtcq-*eBVBS#BA-8rJBub(eH()q=`yfEE9seOXykN9%1m zQa?kVVt8&$x2ytlS8LaC_eMA0v(AHgobHvN4%)q){Zh6C+lI~dPxasOuVLS^CU$b5 zU0_K-6WSf#61mJ7xFcLTNCLggI|FqFJkJ%F1SjAbNOL?0lGOeOAA&s~U-KCxfIq|I zkQ|U_cnxihExCMNk_>(%KuUJQDv+4sxZ|a zMXo$gK0>Kijo0MFjEOCe9SLgF2L1TXh$8Ks8NuUMW_7RE$^jlHZeNi+c+9 z(3yN1&xfPY;o&OwgYUK{(=7qoi*uF(Cde>B*HU+`s-S9~F`;WS;_L4GS&_ap6(iy693~3Rvk^fK9rLJVkaQqk*nPfEv^ zXVe|RkkRl%NDbWrIQ0vVsyYUG0wu%CKy}&=I$8|dfi1wF5jo^ezLIK6b*1)GFDWL(3RJsP`&7SyGU$u) zsqzl+YiJZ|`7BviFk>78k2flnCn}$+T4?6SjEv2Qs~`U%eiL{|#GBYNG50l{)LLb( z;=Qbe6qRff>gbQ;3d{(nLx-XlL4sOxpo1^oGskJOPB1;xyDNs3NlTv=KP|~FdsDt& z`>5)PK4O|`4ShgI-ZUUQBKUG;x(Pqz&;4yn|Zb|^klh!xH$ zyj?hc_Z1m5YqcF=A(1#N(j1ju_H ze-gEbnnYpLOVWy0$C@A;Aq|g=*5T43m%=B*Lcmpb4!;Wjj+Ai-Z#~ok`G^k3NfP6C z;5X#^0dKm7+(zCcO=N%mC;nv01(dKJ`UsOI=qwm67$vAJC}a9Dx9IECeSQ|7#~;K` zpaN7rjS6Oij(4#nO|}K7lt!qgtJ`X}YbrE4Q0FRu)=i{&s6MXRrL-&V$%o1@`DNJz z`Bnw3TB_crj;dxV&&$`#+5^O5uV}I04Sk#XL$(1b6c^eB-WwGH24-gHN+=p!!p`@- z^GtRpxCYqH7-MvEEB+}vSY{~8Dqm23wqjCMN5ew%F8gEGbI(^_U-oan8X6SY#Wji! z;`)R)2bsWp-!<1pTRYPe-OkFX+AkIU3QvVhds4fjvYu|KzLsIKv5RS;xxbaQWjKB~ zW;$1bx;4df&tvj*@&5FV^J)F>Ky}&?ei%6nv*3!wFNgGATMz^i%&;G$K4 zE69ajK}Vp!Py?X)3By^)2xKIZgqYwz@N1Cqx(10NQVhoZI77<#F+ivCo9aUs)A7s+ z<^wa0X~&3}=RgC5G6?g59zbVVgx@Lgp`1#&l==)N#I+n1NXk2{In! z9(RFdX5UJrZ3Ob#k-7PZ%f(wndo8UyyxV5?T`K9_j>=e!1{q zpyK!rRUo6V&$x%^NRB7(k(bC?{MURv!2av<`;Y=+9#$Lu4d;Ts>o#u#Z#(b*Go7bE zbzub}KW+au8TLAl*C|fP- zF8eBdD$$893To0f$=`T4EC}*2|G@i@zvy=SBzcG`0SL<##=)Ei`lM~t|M(jIW6}t^ z@4e(Aq8m0C_CyKJ1M;1}gl9#%bNRdp2#4M!j__Yox0&{WRf6_Hhv1E%AE=^N#f>B> zlA2;n*p#`%&&D3Wo1+uMslj*t_uht{XRb2GPwNs>Eqy)hp3=odIr;1JTNkt_Tv;3{ zeXCt$kXpXj%`V0V18+^Qs1vS22N2WvGD<+tq*$U9{mfe!h5~8cGtTd}`<4y>p9+{Z zm>-(oTUJ=tT0h#b?We`X_d znOVWSpmQmdY6!G!AiV)c`5gKY3xE8j=8K_;6$a=;Ep{4<17{>BGcVgv*$%RD1p%VmU~??1yDxKhSl^1IQ6w%q2(mhcbhg zSvmWWT?ibDs$f%)bh{rY2hIkng)W2)A$?fF{frXuP2?Op4MXwjxE)Ui$q}1~-UI=3 zRjtTgd^5R}yaHy&GJvqn#Kr;+LyNt_lJJvwV|*7#0YrfU=NS@<=m8J#3LyNMAV;>Jg9mc6x_kqA*KnWK!wQDHY?%R)WEBA{iQ5N*gC3H^Y-BRkQ%AXP4k zHzU5|{qZ*#j5&}oU{cWoeNi^=B*@;*=8b~}!AB4bn~c{bJ5V#2w!&ee9MMHlL>MP* zBXBb|pfm}C6O$mc3+4%aF>RQJbUFVbm^j6NYgGW<*nM~tya4_MiJ?}!LXO9^1{ls$ zZcp?YP+HyPDk9TCEp8iJ>#y${>N)IM;7WEKaP|be*G2au?>FB;{};A@U}r!S+y(fo zFvyQP3jG5gKo%nTZ~^=oY76+d-BCCi8yyuDL{9+3-wL!Jk|-K|!}&Nf7vZ)?C-5?% zm(W$1ht|c~;Ol^!dk+66B?IsLp->@iEO{YmCEY09AbkRqF{R+-wHI#}rHhUW2MadS z4XNw=jzG;`hS$LQARj?}>cnB;c|kF&@ZEB2oFnX~Ee%bbjpYWN!D2jRGFXn=XS*(V z|FHW*zqlIEUSu7nA(jLE(OB{-aR8TM&p}q_Cy)U9-rva^=T37bgA}{*Hj6dMcGc#! zjj%Ux%mIFnnV#O>o`7+30`6rE$WluKS@2~MBR7=CgNFfRB_2OOJO-+tPkbqLnTn^q z)IQLu!PE}^Lh=BSjSmFA{WL5DPR=9jF5ZW5kV!NpV1ZjEQ=*p2q-Q0|B>#zvMYw38 zU;tA>eI}>lb3ndyH^5#&z&l$zpk|l(9)oJr!BNk4)$-ZoHLf$-45N&PO)-`Zwlj{~ zAPe-mzcSD|+?AWkI}JZXZ{fLwifl?=C#C^ScWaO%KQbI-SNRTl@?3tW$k)pS&^ZN^*sG~gbUO2zF)|$l zLcuns5wno)LXV`!0X51RaHqBvd>3>VZUOp;T;W4eHOVmPWZ7i7RlZ!I0e$@n#b|jg z&_~`B+k_>|WNH+diTe;9cxP<5OQ>z&x9_QYs$-;Wu4S=FWPGPr>pz0o^tGY3X|H9t zeY111r4l$2kgZf6{^hkhnwIEJ{wB6^NJQVi-@)S5X+x?au<`~|bW*HL#buie+3 ztqxLij|WGG+Jv(rzKA5cnO6o05e4c*pJLTOCFz2@unc@K$Ud)wcgN?0-%jErAtllY zHAsu8Px66Q4WqT7AKfW@3tT$;BpK43va52pe6ga1A|l@>cgyY6dl05Lkm+q4OmM#YxZjo%Vl$5*>j$(fC9}(Hud}I`K0XXT_hnt5w1oZww-!QMr z)5jGCXyX}6Tk|Hjk zdlvQv+W2wrMb`{Rp)K7u*Lu>D1F(W}OO-X%7PhT)e0O$tH}HP-Wdi5Jj^M=5xzMK& z3p(}Hq4VI5)`WkB$3~L4zTj4{1GQ#8Pzuk0IhX)h-!706J|B^wE6@$76|Dml+Y7O+ z*jH>c-kF$9zTq#VOPJ=u&!TMc5lKgBf9Ws4Uu=+MN<@-<;yU6s;{Qa0ML$80`dqL` zP|5tJYtu)l5Wf|*f%=Cs^J`IEs5_LIitw+JpNJa7JNzB!*z)0AI0APE&q>(C+r_O8 z*9;Ewuk=8!+IE$-v!&21uyg`!&rxg8{?mEJjr!)Y)k1Z-OlS!Dgs4gVrKbuS17v2H zfS`AhAsi%;!~1z3xml5?;W42)!JNQ<;E4lHb}YD0l0#3!^|?s&F1!sJOU&XQrQb1( zP%YdqxFXaFC8CIkk~Eguq@$%e$xVq&91`52f026p8afWX%WDN!`K$8I+CP;c{YNuv`|TR*`y3b(DT&U6e`4Lp3VvPsHQku8(K-Cr_yA;1 zv~5V?=evj6J6I^wAwyUF2i-~CB%NQkU%$`L&s1ctXN|Y_bIx>s^=|R&SQj{Trvdt? z1GxMGaQa?=Cx%>#v4Uy zXXHhox(JC)$1eip{vh=LD5naU2?CL@y-)!@yB^%-Ny2A9dAmb^37Rn%=pi&izo0f! zGk}V!nCeJxqYu*?=tJ}aI!upe_A*6`lbIqIChQEC5b*sOn*YDcoIBA<|y=Wb6!|b2!Q=RMF!@c$WYXeKehk+XW zHnJM0_#uj6f($9VBdjm{$h4q0@gEa+u^UKrcpUVVcN6pvRU8f`g-x6e%*ju9Yk^|@ z2htXNx?6Z70w!b03StIv2snDSlR9z*e=PNko(ikNAIRh2W@w5S*v4 z^H1X2;Hli0;85Qj*IL_h^CaUjeWI>)mAYzT6{LHnd#gWU9AW-r*=O4YP&>6}4dAxc z09TeIFeOkN7#yqvkj`MZ3AZS^iZ=(GzR7So{0JTZo`jMD4dAVa{^2xSR-|8e5_q;r zJW%(Dg9AV={e^HBplHxQ7Z3~}1BLt<^n2!&V6G4mjS?*oiAB4GbA?^O$#XL~bah%v zU!k%nH~&7+Iv~_{{s2l#=86ckm6HIg2}9t%G+O1cgoB9>wlG8KH636V9S)Zl9WTyKG^HBjzC*4CCh%VWzoYl>r?OY9xx zpBfk*9uu`ddNhex{(l^u1$0yC+J)opE>+xRu)%e3cXul~P~6?!-MzRw4DPhJ)zdVd zoFpfnoPXbcW%ZWDonh$t&S&qt_p|ZDdW$PdN6RM5XtFENusB5Pgys0dIn!BohLS#$ z+LlPf_r_1bdGrJK_Ug#dSx$4(D>Cb_M&is?liQwmmsg&Dmj9DK3w

=)7pVsH{jM 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 H_w@e&DwO~X literal 0 HcmV?d00001 diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/subdirs b/subdirs new file mode 100644 index 0000000..29c9f9e --- /dev/null +++ b/subdirs @@ -0,0 +1,5 @@ +doc +kshowmail +pics +po +sounds