From f21e5792b5084f5d008bf46f6316030c6dfb31e5 Mon Sep 17 00:00:00 2001 From: tpearson Date: Sun, 10 Jan 2010 00:18:25 +0000 Subject: Add author-abandoned basket application git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/basket@1072339 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- AUTHORS | 1 + COPYING | 340 + ChangeLog | 9 + Doxyfile | 249 + INSTALL | 195 + Makefile.am | 22 + Makefile.cvs | 10 + NEWS | 1 + README | 42 + TODO | 9 + acinclude.m4 | 12166 +++++++++ aclocal.m4 | 1266 + backgrounds-previews/Makefile.am | 15 + backgrounds-previews/abstract.png | Bin 0 -> 3346 bytes backgrounds-previews/alien-artifact.png | Bin 0 -> 4875 bytes backgrounds-previews/basket-title.png | Bin 0 -> 3730 bytes backgrounds-previews/green-curves.png | Bin 0 -> 1042 bytes backgrounds-previews/light.png | Bin 0 -> 3066 bytes backgrounds-previews/painting.png | Bin 0 -> 1171 bytes backgrounds-previews/pens.png | Bin 0 -> 3434 bytes backgrounds-previews/pins.png | Bin 0 -> 3268 bytes backgrounds-previews/rainbow-balls.png | Bin 0 -> 1366 bytes backgrounds-previews/rounds-line.png | Bin 0 -> 529 bytes backgrounds-previews/strings.png | Bin 0 -> 2399 bytes backgrounds-previews/todo.png | Bin 0 -> 3160 bytes backgrounds-previews/working.png | Bin 0 -> 3041 bytes backgrounds/Makefile.am | 15 + backgrounds/abstract.png | Bin 0 -> 199623 bytes backgrounds/alien-artifact.png | Bin 0 -> 114522 bytes backgrounds/alien-artifact.png.config | 2 + backgrounds/basket-title.png | Bin 0 -> 66625 bytes backgrounds/green-curves.png | Bin 0 -> 20242 bytes backgrounds/light.png | Bin 0 -> 87500 bytes backgrounds/painting.png | Bin 0 -> 106593 bytes backgrounds/pens.png | Bin 0 -> 74947 bytes backgrounds/pins.png | Bin 0 -> 33474 bytes backgrounds/rainbow-balls.png | Bin 0 -> 26551 bytes backgrounds/rounds-line.png | Bin 0 -> 5266 bytes backgrounds/strings.png | Bin 0 -> 16997 bytes backgrounds/todo.png | Bin 0 -> 59721 bytes backgrounds/working.png | Bin 0 -> 44354 bytes basket-1.0.3.1/AUTHORS | 1 + basket.kdevelop | 293 + basket.kdevelop.pcs | Bin 0 -> 1508559 bytes basket.spec | 53 + config.h.in | 253 + configure | 35434 +++++++++++++++++++++++++ configure.files | 3 + configure.in | 217 + configure.in.bot | 40 + configure.in.in | 53 + doc/Makefile.am | 6 + doc/en/Makefile.am | 2 + doc/en/index.docbook | 99 + file-integration/Makefile.am | 23 + file-integration/basket.magic | 2 + file-integration/basketthumbcreator.cpp | 117 + file-integration/basketthumbcreator.desktop | 18 + file-integration/basketthumbcreator.h | 29 + file-integration/cr128-mime-baskets.png | Bin 0 -> 12586 bytes file-integration/cr128-mime-baskett.png | Bin 0 -> 15162 bytes file-integration/cr16-mime-baskets.png | Bin 0 -> 672 bytes file-integration/cr16-mime-baskett.png | Bin 0 -> 766 bytes file-integration/cr22-mime-baskets.png | Bin 0 -> 1031 bytes file-integration/cr22-mime-baskett.png | Bin 0 -> 1219 bytes file-integration/cr32-mime-baskets.png | Bin 0 -> 1766 bytes file-integration/cr32-mime-baskett.png | Bin 0 -> 2088 bytes file-integration/cr48-mime-baskets.png | Bin 0 -> 3290 bytes file-integration/cr48-mime-baskett.png | Bin 0 -> 3858 bytes file-integration/cr64-mime-baskets.png | Bin 0 -> 4925 bytes file-integration/cr64-mime-baskett.png | Bin 0 -> 5915 bytes file-integration/x-basket-archive.desktop | 17 + file-integration/x-basket-template.desktop | 17 + images/Makefile.am | 4 + images/insertion_help.png | Bin 0 -> 5878 bytes images/tag_export_help.png | Bin 0 -> 10296 bytes images/tag_export_on_every_lines_help.png | Bin 0 -> 8295 bytes installer | 233 + kontact_plugin/Makefile.am | 18 + kontact_plugin/basket.desktop | 42 + kontact_plugin/basket_plugin.cpp | 107 + kontact_plugin/basket_plugin.h | 63 + kontact_plugin/basket_v4.desktop | 43 + kontact_plugin/basketdcopiface_stub.cpp | 56 + kontact_plugin/kontact_basketplugin.setdlg | 24 + kontact_plugin/uniqueapphandler.cpp | 171 + kontact_plugin/uniqueapphandler.h | 120 + links.sh | 223 + po/Makefile.am | 2 + po/basket.pot | 3176 +++ po/cs.po | 3611 +++ po/da.po | 3509 +++ po/de.po | 3481 +++ po/es.po | 3339 +++ po/fr.po | 3483 +++ po/it.po | 3486 +++ po/ja.po | 3440 +++ po/nl.po | 3814 +++ po/nn.po | 3518 +++ po/pl_PL.po | 3494 +++ po/pt.po | 3431 +++ po/ru.po | 3387 +++ po/tr.po | 3329 +++ po/zh_CN.po | 3185 +++ po/zh_TW.po | 3760 +++ src/Makefile.am | 106 + src/aboutdata.cpp | 59 + src/aboutdata.h | 35 + src/application.cpp | 61 + src/application.h | 38 + src/archive.cpp | 637 + src/archive.h | 59 + src/backgroundmanager.cpp | 394 + src/backgroundmanager.h | 132 + src/backup.cpp | 414 + src/backup.h | 85 + src/basket.cpp | 5734 ++++ src/basket.desktop | 34 + src/basket.h | 835 + src/basket.lsm | 16 + src/basket_config_apps.desktop | 37 + src/basket_config_baskets.desktop | 37 + src/basket_config_features.desktop | 1 + src/basket_config_general.desktop | 37 + src/basket_config_new_notes.desktop | 37 + src/basket_config_notes.desktop | 1 + src/basket_config_notes_appearance.desktop | 35 + src/basket_options.h | 41 + src/basket_part.cpp | 102 + src/basket_part.desktop | 21 + src/basket_part.h | 91 + src/basket_part.rc | 229 + src/basketdcopiface.h | 37 + src/basketfactory.cpp | 159 + src/basketfactory.h | 46 + src/basketlistview.cpp | 807 + src/basketlistview.h | 103 + src/basketproperties.cpp | 203 + src/basketproperties.h | 69 + src/basketstatusbar.cpp | 176 + src/basketstatusbar.h | 68 + src/basketui.rc | 233 + src/bnpview.cpp | 2390 ++ src/bnpview.h | 354 + src/clickablelabel.cpp | 29 + src/clickablelabel.h | 43 + src/colorpicker.cpp | 96 + src/colorpicker.h | 57 + src/cr128-app-basket.png | Bin 0 -> 13860 bytes src/cr16-action-likeback_bug.png | Bin 0 -> 703 bytes src/cr16-action-likeback_dislike.png | Bin 0 -> 844 bytes src/cr16-action-likeback_feature.png | Bin 0 -> 829 bytes src/cr16-action-likeback_like.png | Bin 0 -> 894 bytes src/cr16-app-basket.png | Bin 0 -> 825 bytes src/cr22-app-basket.png | Bin 0 -> 1341 bytes src/cr32-app-basket.png | Bin 0 -> 2185 bytes src/cr48-app-basket.png | Bin 0 -> 3843 bytes src/cr64-app-basket.png | Bin 0 -> 5669 bytes src/crashhandler.cpp | 226 + src/crashhandler.h | 31 + src/crsc-app-basket.svg | 1233 + src/debugwindow.cpp | 73 + src/debugwindow.h | 54 + src/exporterdialog.cpp | 148 + src/exporterdialog.h | 60 + src/filter.cpp | 307 + src/filter.h | 93 + src/focusedwidgets.cpp | 295 + src/focusedwidgets.h | 110 + src/formatimporter.cpp | 307 + src/formatimporter.h | 51 + src/global.cpp | 100 + src/global.h | 71 + src/htmlexporter.cpp | 560 + src/htmlexporter.h | 79 + src/kcm_basket.cpp | 72 + src/kcolorcombo2.cpp | 769 + src/kcolorcombo2.h | 343 + src/keyboard.cpp | 129 + src/keyboard.h | 37 + src/kgpgme.cpp | 443 + src/kgpgme.h | 85 + src/kiconcanvas.cpp | 244 + src/kiconcanvas.h | 89 + src/kicondialog.cpp | 559 + src/kicondialog.h | 329 + src/kicondialogui.ui | 243 + src/likeback.cpp | 854 + src/likeback.h | 364 + src/likeback_private.h | 105 + src/linklabel.cpp | 695 + src/linklabel.h | 208 + src/main.cpp | 115 + src/mainwindow.cpp | 345 + src/mainwindow.h | 107 + src/newbasketdialog.cpp | 333 + src/newbasketdialog.h | 100 + src/note.cpp | 2890 ++ src/note.h | 388 + src/notecontent.cpp | 1935 ++ src/notecontent.h | 603 + src/notedrag.cpp | 593 + src/notedrag.h | 103 + src/noteedit.cpp | 916 + src/noteedit.h | 289 + src/notefactory.cpp | 1008 + src/notefactory.h | 96 + src/password.cpp | 113 + src/password.h | 65 + src/passwordlayout.ui | 122 + src/popupmenu.cpp | 151 + src/popupmenu.h | 123 + src/qeffects.cpp | 602 + src/qeffects.h | 195 + src/regiongrabber.cpp | 180 + src/regiongrabber.h | 72 + src/settings.cpp | 991 + src/settings.h | 392 + src/softwareimporters.cpp | 696 + src/softwareimporters.h | 91 + src/systemtray.cpp | 463 + src/systemtray.h | 85 + src/tag.cpp | 934 + src/tag.h | 198 + src/tagsedit.cpp | 1206 + src/tagsedit.h | 185 + src/tools.cpp | 446 + src/tools.h | 95 + src/variouswidgets.cpp | 325 + src/variouswidgets.h | 151 + src/xmlwork.cpp | 110 + src/xmlwork.h | 45 + stamp-h.in | 0 subdirs | 10 + tags/Makefile.am | 3 + tags/cr16-action-tag_checkbox.png | Bin 0 -> 361 bytes tags/cr16-action-tag_checkbox_checked.png | Bin 0 -> 582 bytes tags/cr16-action-tag_for_later.png | Bin 0 -> 827 bytes tags/cr16-action-tag_fun.png | Bin 0 -> 922 bytes tags/cr16-action-tag_important.png | Bin 0 -> 625 bytes tags/cr16-action-tag_preference_bad.png | Bin 0 -> 600 bytes tags/cr16-action-tag_preference_excelent.png | Bin 0 -> 743 bytes tags/cr16-action-tag_preference_good.png | Bin 0 -> 721 bytes tags/cr16-action-tag_priority_high.png | Bin 0 -> 402 bytes tags/cr16-action-tag_priority_low.png | Bin 0 -> 374 bytes tags/cr16-action-tag_priority_medium.png | Bin 0 -> 397 bytes tags/cr16-action-tag_progress_000.png | Bin 0 -> 275 bytes tags/cr16-action-tag_progress_025.png | Bin 0 -> 298 bytes tags/cr16-action-tag_progress_050.png | Bin 0 -> 307 bytes tags/cr16-action-tag_progress_075.png | Bin 0 -> 307 bytes tags/cr16-action-tag_progress_100.png | Bin 0 -> 285 bytes welcome/Makefile.am | 10 + welcome/Welcome_de.baskets | Bin 0 -> 369269 bytes welcome/Welcome_en_US.baskets | Bin 0 -> 365616 bytes welcome/Welcome_fr.baskets | Bin 0 -> 367592 bytes welcome/Welcome_it.baskets | Bin 0 -> 369177 bytes welcome/Welcome_ja.baskets | Bin 0 -> 367616 bytes welcome/Welcome_nn.baskets | Bin 0 -> 366374 bytes welcome/Welcome_pt.baskets | Bin 0 -> 365282 bytes welcome/Welcome_ru.baskets | Bin 0 -> 358363 bytes 260 files changed, 148992 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 Doxyfile create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.cvs create mode 100644 NEWS create mode 100644 README create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 backgrounds-previews/Makefile.am create mode 100644 backgrounds-previews/abstract.png create mode 100644 backgrounds-previews/alien-artifact.png create mode 100644 backgrounds-previews/basket-title.png create mode 100644 backgrounds-previews/green-curves.png create mode 100644 backgrounds-previews/light.png create mode 100644 backgrounds-previews/painting.png create mode 100644 backgrounds-previews/pens.png create mode 100644 backgrounds-previews/pins.png create mode 100644 backgrounds-previews/rainbow-balls.png create mode 100644 backgrounds-previews/rounds-line.png create mode 100644 backgrounds-previews/strings.png create mode 100644 backgrounds-previews/todo.png create mode 100644 backgrounds-previews/working.png create mode 100644 backgrounds/Makefile.am create mode 100644 backgrounds/abstract.png create mode 100644 backgrounds/alien-artifact.png create mode 100644 backgrounds/alien-artifact.png.config create mode 100644 backgrounds/basket-title.png create mode 100755 backgrounds/green-curves.png create mode 100644 backgrounds/light.png create mode 100644 backgrounds/painting.png create mode 100644 backgrounds/pens.png create mode 100644 backgrounds/pins.png create mode 100644 backgrounds/rainbow-balls.png create mode 100644 backgrounds/rounds-line.png create mode 100644 backgrounds/strings.png create mode 100644 backgrounds/todo.png create mode 100644 backgrounds/working.png create mode 100644 basket-1.0.3.1/AUTHORS create mode 100644 basket.kdevelop create mode 100644 basket.kdevelop.pcs create mode 100644 basket.spec create mode 100644 config.h.in create mode 100644 configure create mode 100644 configure.files create mode 100644 configure.in create mode 100644 configure.in.bot create mode 100644 configure.in.in create mode 100644 doc/Makefile.am create mode 100644 doc/en/Makefile.am create mode 100644 doc/en/index.docbook create mode 100644 file-integration/Makefile.am create mode 100644 file-integration/basket.magic create mode 100644 file-integration/basketthumbcreator.cpp create mode 100644 file-integration/basketthumbcreator.desktop create mode 100644 file-integration/basketthumbcreator.h create mode 100644 file-integration/cr128-mime-baskets.png create mode 100644 file-integration/cr128-mime-baskett.png create mode 100644 file-integration/cr16-mime-baskets.png create mode 100644 file-integration/cr16-mime-baskett.png create mode 100644 file-integration/cr22-mime-baskets.png create mode 100644 file-integration/cr22-mime-baskett.png create mode 100644 file-integration/cr32-mime-baskets.png create mode 100644 file-integration/cr32-mime-baskett.png create mode 100644 file-integration/cr48-mime-baskets.png create mode 100644 file-integration/cr48-mime-baskett.png create mode 100644 file-integration/cr64-mime-baskets.png create mode 100644 file-integration/cr64-mime-baskett.png create mode 100644 file-integration/x-basket-archive.desktop create mode 100644 file-integration/x-basket-template.desktop create mode 100644 images/Makefile.am create mode 100644 images/insertion_help.png create mode 100644 images/tag_export_help.png create mode 100644 images/tag_export_on_every_lines_help.png create mode 100755 installer create mode 100644 kontact_plugin/Makefile.am create mode 100644 kontact_plugin/basket.desktop create mode 100644 kontact_plugin/basket_plugin.cpp create mode 100644 kontact_plugin/basket_plugin.h create mode 100644 kontact_plugin/basket_v4.desktop create mode 100644 kontact_plugin/basketdcopiface_stub.cpp create mode 100644 kontact_plugin/kontact_basketplugin.setdlg create mode 100644 kontact_plugin/uniqueapphandler.cpp create mode 100644 kontact_plugin/uniqueapphandler.h create mode 100755 links.sh create mode 100644 po/Makefile.am create mode 100644 po/basket.pot create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/es.po create mode 100644 po/fr.po create mode 100644 po/it.po create mode 100644 po/ja.po create mode 100644 po/nl.po create mode 100644 po/nn.po create mode 100644 po/pl_PL.po create mode 100644 po/pt.po create mode 100644 po/ru.po create mode 100644 po/tr.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.po create mode 100644 src/Makefile.am create mode 100644 src/aboutdata.cpp create mode 100644 src/aboutdata.h create mode 100644 src/application.cpp create mode 100644 src/application.h create mode 100644 src/archive.cpp create mode 100644 src/archive.h create mode 100644 src/backgroundmanager.cpp create mode 100644 src/backgroundmanager.h create mode 100644 src/backup.cpp create mode 100644 src/backup.h create mode 100644 src/basket.cpp create mode 100644 src/basket.desktop create mode 100644 src/basket.h create mode 100644 src/basket.lsm create mode 100644 src/basket_config_apps.desktop create mode 100644 src/basket_config_baskets.desktop create mode 100644 src/basket_config_features.desktop create mode 100644 src/basket_config_general.desktop create mode 100644 src/basket_config_new_notes.desktop create mode 100644 src/basket_config_notes.desktop create mode 100644 src/basket_config_notes_appearance.desktop create mode 100644 src/basket_options.h create mode 100644 src/basket_part.cpp create mode 100644 src/basket_part.desktop create mode 100644 src/basket_part.h create mode 100644 src/basket_part.rc create mode 100644 src/basketdcopiface.h create mode 100644 src/basketfactory.cpp create mode 100644 src/basketfactory.h create mode 100644 src/basketlistview.cpp create mode 100644 src/basketlistview.h create mode 100644 src/basketproperties.cpp create mode 100644 src/basketproperties.h create mode 100644 src/basketstatusbar.cpp create mode 100644 src/basketstatusbar.h create mode 100644 src/basketui.rc create mode 100644 src/bnpview.cpp create mode 100644 src/bnpview.h create mode 100644 src/clickablelabel.cpp create mode 100644 src/clickablelabel.h create mode 100644 src/colorpicker.cpp create mode 100644 src/colorpicker.h create mode 100644 src/cr128-app-basket.png create mode 100755 src/cr16-action-likeback_bug.png create mode 100644 src/cr16-action-likeback_dislike.png create mode 100755 src/cr16-action-likeback_feature.png create mode 100644 src/cr16-action-likeback_like.png create mode 100644 src/cr16-app-basket.png create mode 100644 src/cr22-app-basket.png create mode 100644 src/cr32-app-basket.png create mode 100644 src/cr48-app-basket.png create mode 100644 src/cr64-app-basket.png create mode 100644 src/crashhandler.cpp create mode 100644 src/crashhandler.h create mode 100644 src/crsc-app-basket.svg create mode 100644 src/debugwindow.cpp create mode 100644 src/debugwindow.h create mode 100644 src/exporterdialog.cpp create mode 100644 src/exporterdialog.h create mode 100644 src/filter.cpp create mode 100644 src/filter.h create mode 100644 src/focusedwidgets.cpp create mode 100644 src/focusedwidgets.h create mode 100644 src/formatimporter.cpp create mode 100644 src/formatimporter.h create mode 100644 src/global.cpp create mode 100644 src/global.h create mode 100644 src/htmlexporter.cpp create mode 100644 src/htmlexporter.h create mode 100644 src/kcm_basket.cpp create mode 100644 src/kcolorcombo2.cpp create mode 100644 src/kcolorcombo2.h create mode 100644 src/keyboard.cpp create mode 100644 src/keyboard.h create mode 100644 src/kgpgme.cpp create mode 100644 src/kgpgme.h create mode 100644 src/kiconcanvas.cpp create mode 100644 src/kiconcanvas.h create mode 100644 src/kicondialog.cpp create mode 100644 src/kicondialog.h create mode 100644 src/kicondialogui.ui create mode 100644 src/likeback.cpp create mode 100644 src/likeback.h create mode 100644 src/likeback_private.h create mode 100644 src/linklabel.cpp create mode 100644 src/linklabel.h create mode 100644 src/main.cpp create mode 100644 src/mainwindow.cpp create mode 100644 src/mainwindow.h create mode 100644 src/newbasketdialog.cpp create mode 100644 src/newbasketdialog.h create mode 100644 src/note.cpp create mode 100644 src/note.h create mode 100644 src/notecontent.cpp create mode 100644 src/notecontent.h create mode 100644 src/notedrag.cpp create mode 100644 src/notedrag.h create mode 100644 src/noteedit.cpp create mode 100644 src/noteedit.h create mode 100644 src/notefactory.cpp create mode 100644 src/notefactory.h create mode 100644 src/password.cpp create mode 100644 src/password.h create mode 100644 src/passwordlayout.ui create mode 100644 src/popupmenu.cpp create mode 100644 src/popupmenu.h create mode 100644 src/qeffects.cpp create mode 100644 src/qeffects.h create mode 100644 src/regiongrabber.cpp create mode 100644 src/regiongrabber.h create mode 100644 src/settings.cpp create mode 100644 src/settings.h create mode 100644 src/softwareimporters.cpp create mode 100644 src/softwareimporters.h create mode 100644 src/systemtray.cpp create mode 100644 src/systemtray.h create mode 100644 src/tag.cpp create mode 100644 src/tag.h create mode 100644 src/tagsedit.cpp create mode 100644 src/tagsedit.h create mode 100644 src/tools.cpp create mode 100644 src/tools.h create mode 100644 src/variouswidgets.cpp create mode 100644 src/variouswidgets.h create mode 100644 src/xmlwork.cpp create mode 100644 src/xmlwork.h create mode 100644 stamp-h.in create mode 100644 subdirs create mode 100644 tags/Makefile.am create mode 100644 tags/cr16-action-tag_checkbox.png create mode 100644 tags/cr16-action-tag_checkbox_checked.png create mode 100644 tags/cr16-action-tag_for_later.png create mode 100644 tags/cr16-action-tag_fun.png create mode 100644 tags/cr16-action-tag_important.png create mode 100644 tags/cr16-action-tag_preference_bad.png create mode 100644 tags/cr16-action-tag_preference_excelent.png create mode 100644 tags/cr16-action-tag_preference_good.png create mode 100644 tags/cr16-action-tag_priority_high.png create mode 100644 tags/cr16-action-tag_priority_low.png create mode 100644 tags/cr16-action-tag_priority_medium.png create mode 100644 tags/cr16-action-tag_progress_000.png create mode 100644 tags/cr16-action-tag_progress_025.png create mode 100644 tags/cr16-action-tag_progress_050.png create mode 100644 tags/cr16-action-tag_progress_075.png create mode 100644 tags/cr16-action-tag_progress_100.png create mode 100644 welcome/Makefile.am create mode 100644 welcome/Welcome_de.baskets create mode 100644 welcome/Welcome_en_US.baskets create mode 100644 welcome/Welcome_fr.baskets create mode 100644 welcome/Welcome_it.baskets create mode 100644 welcome/Welcome_ja.baskets create mode 100644 welcome/Welcome_nn.baskets create mode 100644 welcome/Welcome_pt.baskets create mode 100644 welcome/Welcome_ru.baskets diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..313ba00 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Sébastien Laoût diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..c13faf0 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..f1b4dcd --- /dev/null +++ b/ChangeLog @@ -0,0 +1,9 @@ + To see the Changes log, please visit +http://basket.kde.org/changelog.php + + To see which features will be implanted in the future versions, +please visit the roadmap on +http://basket.kde.org/roadmap.php + + See it also to know the project status and other informations about +it. diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..4a73757 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,249 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = basket.kdevelop +PROJECT_NUMBER = 1.0.3.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/seb/Programmation/basket +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = YES +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..99ef236 --- /dev/null +++ b/INSTALL @@ -0,0 +1,195 @@ + /====================================\ + | Quick Installation with the Wizard | + \====================================/ + +Quick Instructions +================== + + The installation can easily be performed by launching the +./installer script in a terminal and by following the instructions. +Theire is nothing else to do. + +More Information +================ + + In Konqueror, after having un-compressed the .tar.gz file containing +BasKet Note Pads, choose `Open a terminal' while in the un-compressed +folder (the same where you can read this file). +Then, type "./installer" (without the quotes) and press Enter. +You just have to follow the wizard. + + The scrit is there just to simplify your life. +If it does not work or you if want more control (experienced users) on +the configure process, please read the following paragraphs. + + /===================================\ + | Standard UNIX Way of Installation | + \===================================/ + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Alternatively, 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..cac2bf1 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,22 @@ +SUBDIRS = $(TOPSUBDIRS) + +$(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 + +EXTRA_DIST = admin COPYING configure.in.in + +dist-hook: + cd $(top_distdir) && perl admin/am_edit -padmin + cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs diff --git a/Makefile.cvs b/Makefile.cvs new file mode 100644 index 0000000..4c0afd1 --- /dev/null +++ b/Makefile.cvs @@ -0,0 +1,10 @@ +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + $(MAKE) -f admin/Makefile.common cvs + +dist: + $(MAKE) -f admin/Makefile.common dist + +.SILENT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..8a1ea0e --- /dev/null +++ b/README @@ -0,0 +1,42 @@ + ******************** + * BasKet Note Pads * + ******************** + + Purpose: +************ + + This application provide as many baskets as you wish, and you +can drag and drop various objects (text, URLs, images, sounds...) +into its. + Objects can be edited, copied, dragged... So, you can arrange them as +you want ! + It's a DropDrawers clone +(http://www.sigsoftware.com/dropdrawers/index.html) for KDE 3. + + If you want to contact me, please mail me at slaout@linux62.org +(I'm a french guy, if you prefer to speak french to me). + + Project Status: +******************* + + Visit the BasKet Note Pads website at : +http://basket.kde.org/ + You can find screenshots of it at : +http://basket.kde.org/screenshots.php + For project status, please see the TODO file of this project at : +http://basket.kde.org/todo.php + You also can see the project roadmap for near versions planned + features at : +http://basket.kde.org/roadmap.php + See changes log at : +http://basket.kde.org/changelog.php + And finaly, new versions will be announced here : +http://basket.kde.org/news.php + If you want to be noticed of new versions, subscribe to the RSS feed, + available with explanations here: +http://basket.kde.org/rss.php + + Install: +************ + + Please see the INSTALL file. diff --git a/TODO b/TODO new file mode 100644 index 0000000..61dd1f0 --- /dev/null +++ b/TODO @@ -0,0 +1,9 @@ + To see the TODO List, please visit +http://basket.kde.org/todo.php + + To see which features will be implanted in the future versions, +please visit the roadmap on +http://basket.kde.org/roadmap.php + + See it also to know the project status and other informations about +it. diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..4398721 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,12166 @@ +## -*- 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 Steet, 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 -o `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then + kde33ornewer= + 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="-Xlinker -framework -Xlinker 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 + +# 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 + +if test -z "$LIBQT"; then +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" +else + kde_int_qt="$LIBQT" + kde_lib_qt_set=yes +fi + +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 $build_arts = "yes"; then + AC_SUBST(LIB_ARTSKDE, "-lartskde") +fi + +if test $kde_qtver = 3; then + 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( +[/* Override any gcc2 internal prototype to avoid an error. */ +struct jpeg_decompress_struct; +typedef struct jpeg_decompress_struct * j_decompress_ptr; +typedef int size_t; +#ifdef __cplusplus +extern "C" { +#endif + void jpeg_CreateDecompress(j_decompress_ptr cinfo, + int version, size_t structsize); +#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. */ +], + [jpeg_CreateDecompress(0L, 0, 0);], + 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([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 + +]) + +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 $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 $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 + 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 + 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]) + + if test "x$GXX" = "xyes"; then + kde_have_gcc_visibility=no + KDE_CHECK_COMPILER_FLAG(fvisibility=hidden, + [ + kde_have_gcc_visibility=yes + 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_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) + +# we patch configure quite some so we better keep that consistent for incremental runs +AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure') +]) + +AC_DEFUN([KDE_CHECK_LIB64], +[ + kdelibsuff="$kde_libs_suffix" + if test -z "$kdelibsuff"; then + kdelibsuff=no + fi + AC_ARG_ENABLE(libsuffix, + AC_HELP_STRING([--enable-libsuffix], + [/lib directory suffix (64,32,none[=default])]), + kdelibsuff=$enableval) + # TODO: add an auto case that compiles a little C app to check + # where the glibc is + if test "$kdelibsuff" = "no"; 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 ]) + AH_TEMPLATE(HAVE_DPMSINFO_PROTO, + [Define if you have the DPMSInfo prototype in ]) + AC_CHECK_DECL(DPMSInfo, + AC_DEFINE(HAVE_DPMSINFO_PROTO),, + [#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.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` + kde_libs_suffix=`$KDECONFIG --libsuffix` + + 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="-Xlinker -framework -Xlinker 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/pkgconfig:$PKG_CONFIG_PATH" + if test "$prefix" != "$kde_libs_prefix"; then + PKG_CONFIG_PATH="$kde_libs_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" + fi + export PKG_CONFIG_PATH + PKG_CHECK_MODULES($1,$2,$3,$4) +]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +## Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 1996 +## +## 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 48 Debian 1.5.22-4 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' +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 1s/^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 MSVC, +# 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 "$LTCFLAGS" && LTCFLAGS=$CFLAGS +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="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +_LT_CC_BASENAME([$compiler]) + +# 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"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +AC_DEFUN([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +AC_DEFUN([_LT_COMPILER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +AC_DEFUN([_LT_LINKER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_LINKER_BOILERPLATE + + +# _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 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*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*) + 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 + ;; +sparc*-*solaris*) + # 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 + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) LD="${LD-ld} -64" ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +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}\{0,1\} :&$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 other than the usual output. + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; 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 linker 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 + $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + 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 + teststring="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; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + # 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. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # 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); */ + } + else + puts (dlerror ()); + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|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" + wl=$lt_prog_compiler_wl 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 + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + 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 + + 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}\{0,1\} :&$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 + $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm 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_cmds=".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" +if test "$GCC" = yes; then + 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 ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + ;; + +bsdi[[45]]*) + 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_cmds=".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~ + chmod a+x \$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_cmds='`test .$module = .yes && echo .so || echo .dylib`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + 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 + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + freebsd*) # from 4.6 on + shlibpath_overrides_runpath=yes + 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_cmds='.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_cmds='.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_cmds='.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' + ;; + +interix3*) + 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' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +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* | k*bsd*-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' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # 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' + ;; + +netbsdelf*-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='NetBSD ld.elf_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}${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 + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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_cmds=".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" + ;; + +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.3*) + 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 + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + shlibpath_overrides_runpath=yes + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +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 + +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 +])# 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 + if test -z "$LTCFLAGS"; then + eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" + 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" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; 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 DLLs +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 variants of GNU ld 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|DragonFly)/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 + ;; + +interix3*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + 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*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + 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 + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | 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_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_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" + done + 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 +# AC_CONFIG_SUBDIRS is not called here. 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 +# AC_CONFIG_SUBDIRS is not called here. 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 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([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + +# _LT_AC_PROG_CXXCPP +# ------------------ +AC_DEFUN([_LT_AC_PROG_CXXCPP], +[ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +])# _LT_AC_PROG_CXXCPP + +# 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 + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## 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 + +# Report which library types will 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* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=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([_LT_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_shlibpath_var, $1)=unsupported +_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=cpp + +# 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 + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# 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 + $as_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 + $as_unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + 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' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + 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='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + 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_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + 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 $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + 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)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + 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_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _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)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + 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* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | 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 + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + ;; + *) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _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*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _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' + ;; + pgCC*) + # Portland Group C++ compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + 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::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${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~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_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 + ;; + 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(archive_cmds_need_lc,$1)=yes + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + # So that behaviour is only enabled if SCOABSPATH is set to a + # non-empty value in the environment. Most likely only useful for + # creating official distributions of packages. + # This is a hack until libtool officially supports absolute path + # names for shared libraries. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + 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_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 1s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# 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 +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# 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 + +# LTCC compiler flags. +LTCFLAGS=$lt_LTCFLAGS + +# 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=$lt_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_cmds='$shrext_cmds' + +# 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. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +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 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'" + ;; +linux* | k*bsd*-gnu) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + 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'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +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='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # 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)= + ;; + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + 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 + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + 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* | dragonfly*) + # 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)='${wl}-a ${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)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + 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* | k*bsd*-gnu) + 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* | ecpc*) + # 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' + ;; + pgCC*) + # Portland Group C++ compiler. + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + 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* | netbsdelf*-gnu) + ;; + 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*) + ;; + 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 + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _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' + ;; + esac + ;; + 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' + ;; + + interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + 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 + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + 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* | k*bsd*-gnu) + case $cc_basename 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' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + 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' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + 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*) + _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 + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _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' + ;; + + unicos*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + 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 + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) +]) + + +# 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 '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _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= + # Just being paranoid about ensuring that cc_basename is set. + _LT_CC_BASENAME([$compiler]) + 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 + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + 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}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + 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 + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # 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 $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _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 '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix3*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + 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 $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + 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 "$lt_prog_compiler_static"; 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 + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + 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' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + 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='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + 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_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_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' + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${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 + ;; + + bsdi[[45]]*) + _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)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + 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_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _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)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + 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* | dragonfly*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _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 + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_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)=: + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + _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]].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + 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 + +# +# 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) + pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $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 && continue + 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..eefdbd4 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1266 @@ +# 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. + +# gpg-error.m4 - autoconf macro to detect libgpg-error. +# Copyright (C) 2002, 2003, 2004 g10 Code GmbH +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file 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. + +dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpg-error and define GPG_ERROR_CFLAGS and GPG_ERROR_LIBS +dnl +AC_DEFUN([AM_PATH_GPG_ERROR], +[ AC_ARG_WITH(gpg-error-prefix, + AC_HELP_STRING([--with-gpg-error-prefix=PFX], + [prefix where GPG Error is installed (optional)]), + gpg_error_config_prefix="$withval", gpg_error_config_prefix="") + if test x$gpg_error_config_prefix != x ; then + if test x${GPG_ERROR_CONFIG+set} != xset ; then + GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config + fi + fi + + AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no) + min_gpg_error_version=ifelse([$1], ,0.0,$1) + AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version) + ok=no + if test "$GPG_ERROR_CONFIG" != "no" ; then + req_major=`echo $min_gpg_error_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpg_error_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version` + major=`echo $gpg_error_config_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` + minor=`echo $gpg_error_config_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` + if test "$major" -gt "$req_major"; then + ok=yes + else + if test "$major" -eq "$req_major"; then + if test "$minor" -ge "$req_minor"; then + ok=yes + fi + fi + fi + fi + if test $ok = yes; then + GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags` + GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPG_ERROR_CFLAGS="" + GPG_ERROR_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPG_ERROR_CFLAGS) + AC_SUBST(GPG_ERROR_LIBS) +]) + + +# gpgme.m4 - autoconf macro to detect GPGME. +# Copyright (C) 2002, 2003, 2004 g10 Code GmbH +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file 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. + + +AC_DEFUN([_AM_PATH_GPGME_CONFIG], +[ AC_ARG_WITH(gpgme-prefix, + AC_HELP_STRING([--with-gpgme-prefix=PFX], + [prefix where GPGME is installed (optional)]), + gpgme_config_prefix="$withval", gpgme_config_prefix="") + if test "x$gpgme_config_prefix" != x ; then + GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config" + fi + AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no) + + if test "$GPGME_CONFIG" != "no" ; then + gpgme_version=`$GPGME_CONFIG --version` + fi + gpgme_version_major=`echo $gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` + gpgme_version_minor=`echo $gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` + gpgme_version_micro=`echo $gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` +]) + +dnl AM_PATH_GPGME([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS. +dnl +AC_DEFUN([AM_PATH_GPGME], +[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl + tmp=ifelse([$1], ,1:0.4.2,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version) + ok=no + if test "$GPGME_CONFIG" != "no" ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_CFLAGS=`$GPGME_CONFIG --cflags` + GPGME_LIBS=`$GPGME_CONFIG --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPGME_CFLAGS="" + GPGME_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_CFLAGS) + AC_SUBST(GPGME_LIBS) +]) + +dnl AM_PATH_GPGME_PTH([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpgme and define GPGME_PTH_CFLAGS and GPGME_PTH_LIBS. +dnl +AC_DEFUN([AM_PATH_GPGME_PTH], +[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl + tmp=ifelse([$1], ,1:0.4.2,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + AC_MSG_CHECKING(for GPGME Pth - version >= $min_gpgme_version) + ok=no + if test "$GPGME_CONFIG" != "no" ; then + if `$GPGME_CONFIG --thread=pth 2> /dev/null` ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_PTH_CFLAGS=`$GPGME_CONFIG --thread=pth --cflags` + GPGME_PTH_LIBS=`$GPGME_CONFIG --thread=pth --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPGME_PTH_CFLAGS="" + GPGME_PTH_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_PTH_CFLAGS) + AC_SUBST(GPGME_PTH_LIBS) +]) + +dnl AM_PATH_GPGME_PTHREAD([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS +dnl and GPGME_PTHREAD_LIBS. +dnl +AC_DEFUN([AM_PATH_GPGME_PTHREAD], +[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl + tmp=ifelse([$1], ,1:0.4.2,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + AC_MSG_CHECKING(for GPGME pthread - version >= $min_gpgme_version) + ok=no + if test "$GPGME_CONFIG" != "no" ; then + if `$GPGME_CONFIG --thread=pthread 2> /dev/null` ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --thread=pthread --cflags` + GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --thread=pthread --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPGME_PTHREAD_CFLAGS="" + GPGME_PTHREAD_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_PTHREAD_CFLAGS) + AC_SUBST(GPGME_PTHREAD_LIBS) +]) + + +dnl AM_PATH_GPGME_GLIB([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpgme-glib and define GPGME_GLIB_CFLAGS and GPGME_GLIB_LIBS. +dnl +AC_DEFUN([AM_PATH_GPGME_GLIB], +[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl + tmp=ifelse([$1], ,1:0.4.2,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version) + ok=no + if test "$GPGME_CONFIG" != "no" ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_GLIB_CFLAGS=`$GPGME_CONFIG --glib --cflags` + GPGME_GLIB_LIBS=`$GPGME_CONFIG --glib --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPGME_GLIB_CFLAGS="" + GPGME_GLIB_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_GLIB_CFLAGS) + AC_SUBST(GPGME_GLIB_LIBS) +]) + + +# 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])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 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 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# 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/backgrounds-previews/Makefile.am b/backgrounds-previews/Makefile.am new file mode 100644 index 0000000..19ad000 --- /dev/null +++ b/backgrounds-previews/Makefile.am @@ -0,0 +1,15 @@ +backgroundspreviewsdir = $(kde_datadir)/basket/backgrounds/previews +backgroundspreviews_DATA = \ + abstract.png \ + alien-artifact.png \ + basket-title.png \ + green-curves.png \ + light.png \ + painting.png \ + pens.png \ + pins.png \ + rainbow-balls.png \ + rounds-line.png \ + strings.png \ + todo.png \ + working.png diff --git a/backgrounds-previews/abstract.png b/backgrounds-previews/abstract.png new file mode 100644 index 0000000..fb79112 Binary files /dev/null and b/backgrounds-previews/abstract.png differ diff --git a/backgrounds-previews/alien-artifact.png b/backgrounds-previews/alien-artifact.png new file mode 100644 index 0000000..bd2e7da Binary files /dev/null and b/backgrounds-previews/alien-artifact.png differ diff --git a/backgrounds-previews/basket-title.png b/backgrounds-previews/basket-title.png new file mode 100644 index 0000000..d16ecac Binary files /dev/null and b/backgrounds-previews/basket-title.png differ diff --git a/backgrounds-previews/green-curves.png b/backgrounds-previews/green-curves.png new file mode 100644 index 0000000..0eadf91 Binary files /dev/null and b/backgrounds-previews/green-curves.png differ diff --git a/backgrounds-previews/light.png b/backgrounds-previews/light.png new file mode 100644 index 0000000..59fd29a Binary files /dev/null and b/backgrounds-previews/light.png differ diff --git a/backgrounds-previews/painting.png b/backgrounds-previews/painting.png new file mode 100644 index 0000000..a8d2866 Binary files /dev/null and b/backgrounds-previews/painting.png differ diff --git a/backgrounds-previews/pens.png b/backgrounds-previews/pens.png new file mode 100644 index 0000000..5780e5c Binary files /dev/null and b/backgrounds-previews/pens.png differ diff --git a/backgrounds-previews/pins.png b/backgrounds-previews/pins.png new file mode 100644 index 0000000..d3a7c63 Binary files /dev/null and b/backgrounds-previews/pins.png differ diff --git a/backgrounds-previews/rainbow-balls.png b/backgrounds-previews/rainbow-balls.png new file mode 100644 index 0000000..618489a Binary files /dev/null and b/backgrounds-previews/rainbow-balls.png differ diff --git a/backgrounds-previews/rounds-line.png b/backgrounds-previews/rounds-line.png new file mode 100644 index 0000000..8bf2f75 Binary files /dev/null and b/backgrounds-previews/rounds-line.png differ diff --git a/backgrounds-previews/strings.png b/backgrounds-previews/strings.png new file mode 100644 index 0000000..af7b364 Binary files /dev/null and b/backgrounds-previews/strings.png differ diff --git a/backgrounds-previews/todo.png b/backgrounds-previews/todo.png new file mode 100644 index 0000000..ee77919 Binary files /dev/null and b/backgrounds-previews/todo.png differ diff --git a/backgrounds-previews/working.png b/backgrounds-previews/working.png new file mode 100644 index 0000000..2440c28 Binary files /dev/null and b/backgrounds-previews/working.png differ diff --git a/backgrounds/Makefile.am b/backgrounds/Makefile.am new file mode 100644 index 0000000..00c60f2 --- /dev/null +++ b/backgrounds/Makefile.am @@ -0,0 +1,15 @@ +backgroundsdir = $(kde_datadir)/basket/backgrounds +backgrounds_DATA = \ + abstract.png \ + alien-artifact.png alien-artifact.png.config \ + basket-title.png \ + green-curves.png \ + light.png \ + painting.png \ + pens.png \ + pins.png \ + rainbow-balls.png \ + rounds-line.png \ + strings.png \ + todo.png \ + working.png diff --git a/backgrounds/abstract.png b/backgrounds/abstract.png new file mode 100644 index 0000000..ba24576 Binary files /dev/null and b/backgrounds/abstract.png differ diff --git a/backgrounds/alien-artifact.png b/backgrounds/alien-artifact.png new file mode 100644 index 0000000..70fff7d Binary files /dev/null and b/backgrounds/alien-artifact.png differ diff --git a/backgrounds/alien-artifact.png.config b/backgrounds/alien-artifact.png.config new file mode 100644 index 0000000..c992345 --- /dev/null +++ b/backgrounds/alien-artifact.png.config @@ -0,0 +1,2 @@ +[BasKet Background Image Configuration] +tiled = true diff --git a/backgrounds/basket-title.png b/backgrounds/basket-title.png new file mode 100644 index 0000000..a6baea6 Binary files /dev/null and b/backgrounds/basket-title.png differ diff --git a/backgrounds/green-curves.png b/backgrounds/green-curves.png new file mode 100755 index 0000000..27693b3 Binary files /dev/null and b/backgrounds/green-curves.png differ diff --git a/backgrounds/light.png b/backgrounds/light.png new file mode 100644 index 0000000..1ddb42d Binary files /dev/null and b/backgrounds/light.png differ diff --git a/backgrounds/painting.png b/backgrounds/painting.png new file mode 100644 index 0000000..6b1fa99 Binary files /dev/null and b/backgrounds/painting.png differ diff --git a/backgrounds/pens.png b/backgrounds/pens.png new file mode 100644 index 0000000..c95d8f2 Binary files /dev/null and b/backgrounds/pens.png differ diff --git a/backgrounds/pins.png b/backgrounds/pins.png new file mode 100644 index 0000000..d0dc5cf Binary files /dev/null and b/backgrounds/pins.png differ diff --git a/backgrounds/rainbow-balls.png b/backgrounds/rainbow-balls.png new file mode 100644 index 0000000..6d1e77c Binary files /dev/null and b/backgrounds/rainbow-balls.png differ diff --git a/backgrounds/rounds-line.png b/backgrounds/rounds-line.png new file mode 100644 index 0000000..b0a80c6 Binary files /dev/null and b/backgrounds/rounds-line.png differ diff --git a/backgrounds/strings.png b/backgrounds/strings.png new file mode 100644 index 0000000..5fbcebc Binary files /dev/null and b/backgrounds/strings.png differ diff --git a/backgrounds/todo.png b/backgrounds/todo.png new file mode 100644 index 0000000..b2e0ffa Binary files /dev/null and b/backgrounds/todo.png differ diff --git a/backgrounds/working.png b/backgrounds/working.png new file mode 100644 index 0000000..5a6102d Binary files /dev/null and b/backgrounds/working.png differ diff --git a/basket-1.0.3.1/AUTHORS b/basket-1.0.3.1/AUTHORS new file mode 100644 index 0000000..ffb130c --- /dev/null +++ b/basket-1.0.3.1/AUTHORS @@ -0,0 +1 @@ +S�bastien Lao�t diff --git a/basket.kdevelop b/basket.kdevelop new file mode 100644 index 0000000..46452f0 --- /dev/null +++ b/basket.kdevelop @@ -0,0 +1,293 @@ + + + + Sébastien Laoût + slaout@linux62.org + 1.0.3.1 + KDevKDEAutoProject + C++ + + C++ + Code + Qt + KDE + + . + false + Taking care of your ideas. + + kdevfileview + kdevfileselector + + + kdevsubversion + basket + + + + + src/basket + debug + + + /home/seb/Programmation/basket/debug/src/.libs/basket + build + / + --nofork --use-drkonquy --data-folder ~/.kde/share/apps/basket-debug + false + true + + + + + + + + + + /home/seb/Programmation/basket/debug + true + false + false + + + + optimized + GccOptions + GppOptions + G77Options + -O2 -g0 + + + --enable-debug=full --without-arts --prefix=$HOME/kde-debug + debug + kdevgccoptions + kdevgppoptions + kdevpgf77options + -O0 -g3 + + + + + + + + + + + + + + + + + true + 1 + false + + 0 + false + + + + + + + + + + false + false + + + false + false + *.o,*.lo,CVS + + + + + gtk + gnustep + python + php + perl + ada + ada_bugs_gcc + bash_bugs + bash + gnome1 + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + opengl + pascal_bugs_fp + perl_bugs + php_bugs + python_bugs + ruby + ruby_bugs + sdl + stl + sw + wxwindows_bugs + + + html/ + html/ + + + + + + atk + gdk + libgimpbase + libgimpcolor + libgimp + libgimpmath + libgimpmodule + libgimpwidgets + glib + gobject + gtk + pango + gdk-pixbuf + + + + + libtool + -d --nofork --use-drkonquy --data-folder ~/.kde/share/apps/basket-debug + + + + + true + false + false + + + true + true + 10 + + + + + + + + + + + + -f + + + + -dP + -f + -C -d -P + -u3 -p + + + + + Qt + + + true + true + true + true + false + true + true + 100 + 100 + 250 + false + 0 + true + true + false + std=_GLIBCXX_STD;__gnu_cxx=std + true + true + false + false + true + true + true + true + .; + + + + set + m_,_ + value + true + true + + + true + 3 + /usr/share/qt3 + 3 + EmbeddedKDevDesigner + /usr/bin/qmake-qt3 + /usr/bin/designer-qt3 + + + + false + true + Vertical + + + + + .h + .cpp + + + + + + + + + + + false + false + basket-%v.tar.gz + basket + 1.0.3.1 + + + + + + + Taking care of your ideas. + + false + false + false + 0 + false + false + false + false + + + + + + + diff --git a/basket.kdevelop.pcs b/basket.kdevelop.pcs new file mode 100644 index 0000000..7bf1e1f Binary files /dev/null and b/basket.kdevelop.pcs differ diff --git a/basket.spec b/basket.spec new file mode 100644 index 0000000..36628af --- /dev/null +++ b/basket.spec @@ -0,0 +1,53 @@ +%define name basket +%define version 1.0.3.1 +%define release mantic0 + +Summary: Taking care of your ideas. +Name: %{name} +Version: %{version} +Release: %{release} +License: GPL +Vendor: slaout@linux62.org +Url: http://basket.kde.org/ +Packager: packages@mantic.org +Group: Utils +Source: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version} + +%description +Taking care of your ideas. +A note-taking application that makes it easy to write down ideas as you think, and quickly find them back later. Organizing your notes has never been so easy. + +%prep +%setup +if [ "`kde-config --prefix`" ]; then + CONFIGURE_PREFIX="`kde-config --prefix`" +elif [ "${KDEDIR}" ]; then + CONFIGURE_PREFIX="${KDEDIR}" +elif [ -d "/opt/kde" ]; then + CONFIGURE_PREFIX="/opt/kde" +elif [ -d "/opt/kde3" ]; then + CONFIGURE_PREFIX="/opt/kde3" +else + CONFIGURE_PREFIX="/usr" +fi +./configure --prefix="${CONFIGURE_PREFIX}" --enable-final + +%build +%configure +#%make + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +cd $RPM_BUILD_ROOT +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > /var/tmp/file.list.%{name} +find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> /var/tmp/file.list.%{name} +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> /var/tmp/file.list.%{name} + +%clean +rm -rf $RPM_BUILD_ROOT/* +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf /var/tmp/file.list.%{name} + +%files -f /var/tmp/file.list.%{name} diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..0abbc1f --- /dev/null +++ b/config.h.in @@ -0,0 +1,253 @@ +/* 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 libgpgme is available */ +#undef HAVE_LIBGPGME + +/* 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 + +/* Define a safe value for MAXPATHLEN */ +#undef KDEMAXPATHLEN + +/* 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 + +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* + * 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 + + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + + +#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 + + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + + +/* + * 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 b/configure new file mode 100644 index 0000000..59018d7 --- /dev/null +++ b/configure @@ -0,0 +1,35434 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# 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 + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="acinclude.m4" +ac_default_prefix=${KDEDIR:-the kde prefix} +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +target +target_cpu +target_vendor +target_os +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +AMTAR +install_sh +STRIP +INSTALL_STRIP_PROGRAM +AWK +SET_MAKE +am__leading_dot +KDECONFIG +kde_libs_prefix +kde_libs_htmldir +CONF_FILES +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +CPP +CXX +CXXFLAGS +ac_ct_CXX +CXXDEPMODE +am__fastdepCXX_TRUE +am__fastdepCXX_FALSE +WOVERLOADED_VIRTUAL +HAVE_GCC_VISIBILITY +unsermake_enable_pch_TRUE +unsermake_enable_pch_FALSE +USE_EXCEPTIONS +USE_RTTI +CXXCPP +NOOPT_CXXFLAGS +NOOPT_CFLAGS +ENABLE_PERMISSIVE_FLAG +LDFLAGS_AS_NEEDED +LDFLAGS_NEW_DTAGS +KDE_USE_FINAL_TRUE +KDE_USE_FINAL_FALSE +KDE_USE_CLOSURE_TRUE +KDE_USE_CLOSURE_FALSE +KDE_NO_UNDEFINED +KDE_USE_NMCHECK_TRUE +KDE_USE_NMCHECK_FALSE +GREP +EGREP +LN_S +ECHO +AR +RANLIB +F77 +FFLAGS +ac_ct_F77 +LIBTOOL +KDE_PLUGIN +MSGFMT +GMSGFMT +XGETTEXT +LIBUTIL +LIBCOMPAT +LIBCRYPT +LIBRESOLV +LIB_POLL +FRAMEWORK_COREAUDIO +LIBSOCKET +X_EXTRA_LIBS +LIBUCB +LIBDL +include_x11_TRUE +include_x11_FALSE +XMKMF +X_PRE_LIBS +LIB_X11 +LIB_XRENDER +LIBSM +X_INCLUDES +X_LDFLAGS +x_includes +x_libraries +QTE_NORTTI +LIB_XEXT +LIBPTHREAD +USE_THREADS +KDE_MT_LDFLAGS +KDE_MT_LIBS +USER_INCLUDES +USER_LDFLAGS +LIBZ +LIBPNG +LIBJPEG +qt_libraries +qt_includes +QT_INCLUDES +QT_LDFLAGS +PERL +MOC +UIC +UIC_TR +LIB_QT +LIB_QPE +kde_qtver +KDE_EXTRA_RPATH +KDE_RPATH +X_RPATH +kde_libraries +kde_includes +KDE_LDFLAGS +KDE_INCLUDES +all_includes +all_libraries +AUTODIRS +include_ARTS_TRUE +include_ARTS_FALSE +MAKEKDEWIDGETS +KCONFIG_COMPILER +KCFG_DEPENDENCIES +DCOPIDLNG +DCOPIDL +DCOPIDL2CPP +DCOP_DEPENDENCIES +MCOPIDL +ARTSCCONFIG +MEINPROC +KDE_XSL_STYLESHEET +XMLLINT +kde_htmldir +kde_appsdir +kde_icondir +kde_sounddir +kde_datadir +kde_locale +kde_confdir +kde_kcfgdir +kde_mimedir +kde_wallpaperdir +kde_bindir +xdg_appsdir +xdg_menudir +xdg_directorydir +kde_templatesdir +kde_servicesdir +kde_servicetypesdir +kde_moduledir +kdeinitdir +kde_styledir +kde_widgetdir +LIB_ARTSKDE +LIB_KDECORE +LIB_KDEUI +LIB_KIO +LIB_KJS +LIB_SMB +LIB_KAB +LIB_KABC +LIB_KHTML +LIB_KSPELL +LIB_KPARTS +LIB_KDEPRINT +LIB_KUTILS +LIB_KDEPIM +LIB_KIMPROXY +LIB_KNEWSTUFF +LIB_KDNSSD +LIB_KUNITTEST +LIB_KSYCOCA +LIB_KFILE +LIB_KFM +GPGME_CONFIG +GPGME_CFLAGS +GPGME_LIBS +GPG_ERROR_CONFIG +GPG_ERROR_CFLAGS +GPG_ERROR_LIBS +HAVE_LIBGPGME_TRUE +HAVE_LIBGPGME_FALSE +TOPSUBDIRS +LIBOBJS +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +F77 +FFLAGS +XMKMF' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-fast-perl disable fast Makefile generation (needs perl) + --enable-debug=ARG enables debug symbols (yes|no|full) default=no + --disable-debug disables debug output and debug symbols default=no + --enable-strict compiles with strict compiler options (may not + work!) + --disable-warnings disables compilation with -Wall and similar + --enable-profile creates profiling infos default=no + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --enable-pch enables precompiled header support (currently only + KCC or gcc >=3.4+unsermake) default=no + --enable-coverage use gcc coverage testing + --enable-new-ldflags enable the new linker flags + --enable-final build size optimized apps (experimental - needs lots + of memory) + --enable-closure delay template instantiation + --enable-nmcheck enable automatic namespace cleanness check + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=no] + --enable-libsuffix /lib directory suffix (64,32,none=default) + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-embedded link to Qt-embedded, don't use X + --enable-qtopia link to Qt-embedded, link to the Qtopia Environment + --enable-mac link to Qt/Mac (don't use X) + --disable-mt link to non-threaded Qt (deprecated) + --disable-threading disables threading even if libpthread found + --disable-rpath do not use the rpath feature of ld + --disable-path-check don't try to find out, where to install + --disable-largefile omit support for large files + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] include additional configurations [automatic] + --with-extra-includes=DIR + adds non standard include paths + --with-extra-libs=DIR adds non standard library paths + --with-qt-dir=DIR where the root of Qt is installed + --with-qt-includes=DIR where the Qt includes are. + --with-qt-libraries=DIR where the Qt library is installed. + --without-arts build without aRts default=no +$OPTION + --with-gpgme-prefix=PFX prefix where GPGME is installed (optional) + --with-gpg-error-prefix=PFX + prefix where GPG Error is installed (optional) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + XMKMF Path to xmkmf, Makefile generator for X Window System + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in admin "$srcdir"/admin; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +unset CDPATH + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6; } +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 +echo "$as_me: error: invalid value of canonical target" >&2;} + { (exit 1); exit 1; }; };; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm -f conftest.sed + + +am__api_version="1.7" + + + 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 + # Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + 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 + { echo "$as_me:$LINENO: checking for -p flag to install" >&5 +echo $ECHO_N "checking for -p flag to install... $ECHO_C" >&6; } + 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.$$.* + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + fi + + 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 + +{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +# 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". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +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= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } +set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + SET_MAKE= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +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 + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +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 + + +# Define the identity of the package. + PACKAGE=basket + VERSION='1.0.3.1' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# 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. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + + unset CDPATH + + + + 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 + + if test "x$prefix" = "xNONE"; then + + { echo "$as_me:$LINENO: checking for kde-config" >&5 +echo $ECHO_N "checking for kde-config... $ECHO_C" >&6; } + if test -n "$KDECONFIG"; then + kde_cv_path="$KDECONFIG"; + else + kde_cache=`echo kde-config | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z "prepend"; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/kde-config"; then + if test -n "" + then + evalstr="$dir/kde-config 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/kde-config" + break + fi + else + kde_cv_path="$dir/kde-config" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program kde-config was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program kde-config was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + KDECONFIG=$kde_cv_path + + fi + + else + kde_save_PATH="$PATH" + PATH="$exec_prefix/bin:$prefix/bin:$PATH" + + { echo "$as_me:$LINENO: checking for kde-config" >&5 +echo $ECHO_N "checking for kde-config... $ECHO_C" >&6; } + if test -n "$KDECONFIG"; then + kde_cv_path="$KDECONFIG"; + else + kde_cache=`echo kde-config | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z "prepend"; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/kde-config"; then + if test -n "" + then + evalstr="$dir/kde-config 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/kde-config" + break + fi + else + kde_cv_path="$dir/kde-config" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program kde-config was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program kde-config was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + KDECONFIG=$kde_cv_path + + fi + + PATH="$kde_save_PATH" + fi + + kde_libs_prefix=`$KDECONFIG --prefix` + if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then + { { echo "$as_me:$LINENO: 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. + " >&5 +echo "$as_me: 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. + " >&2;} + { (exit 1); exit 1; }; } + fi + kde_libs_htmldir=`$KDECONFIG --install html --expandvars` + kde_libs_suffix=`$KDECONFIG --libsuffix` + + { echo "$as_me:$LINENO: checking where to install" >&5 +echo $ECHO_N "checking where to install... $ECHO_C" >&6; } + if test "x$prefix" = "xNONE"; then + prefix=$kde_libs_prefix + { echo "$as_me:$LINENO: result: $prefix (as returned by kde-config)" >&5 +echo "${ECHO_T}$prefix (as returned by kde-config)" >&6; } + else + given_prefix=$prefix + { echo "$as_me:$LINENO: result: $prefix (as requested)" >&5 +echo "${ECHO_T}$prefix (as requested)" >&6; } + 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,/$,,'` + + + + + + + # Check whether --enable-fast-perl was given. +if test "${enable_fast_perl+set}" = set; then + enableval=$enable_fast_perl; with_fast_perl=$enableval +else + with_fast_perl=yes +fi + + + + 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_config_headers="$ac_config_headers config.h" + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +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. +{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +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 + + +{ echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + + + + # Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then + enableval=$enable_debug; + 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 + +else + kde_use_debug_code="no" + kde_use_debug_define=no + +fi + + + # Check whether --enable-dummyoption was given. +if test "${enable_dummyoption+set}" = set; then + enableval=$enable_dummyoption; +fi + + + # Check whether --enable-strict was given. +if test "${enable_strict+set}" = set; then + enableval=$enable_strict; + if test $enableval = "no"; then + kde_use_strict_options="no" + else + kde_use_strict_options="yes" + fi + +else + kde_use_strict_options="no" +fi + + + # Check whether --enable-warnings was given. +if test "${enable_warnings+set}" = set; then + enableval=$enable_warnings; + if test $enableval = "no"; then + kde_use_warnings="no" + else + kde_use_warnings="yes" + fi + +else + kde_use_warnings="yes" +fi + + + if test "$kde_use_debug_code" != "no"; then + kde_use_warnings=yes + fi + + # Check whether --enable-profile was given. +if test "${enable_profile+set}" = set; then + enableval=$enable_profile; kde_use_profiling=$enableval +else + kde_use_profiling="no" + +fi + + + CFLAGS=" $CFLAGS" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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_CC_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 + : > 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 + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + 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 $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_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CXXFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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_CXX_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 + : > 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 + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + + { echo "$as_me:$LINENO: checking whether $CC is blacklisted" >&5 +echo $ECHO_N "checking whether $CC is blacklisted... $ECHO_C" >&6; } + + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#ifdef __GNUC__ +#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0 +choke me +#endif +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + kde_bad_compiler=no +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_bad_compiler=yes + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + { echo "$as_me:$LINENO: result: $kde_bad_compiler" >&5 +echo "${ECHO_T}$kde_bad_compiler" >&6; } + +if test "$kde_bad_compiler" = "yes"; then + { { echo "$as_me:$LINENO: 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. + +" >&5 +echo "$as_me: 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. + +" >&2;} + { (exit 1); exit 1; }; } +fi + + + + 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 $CXXFLAGS" + fi + fi + +{ echo "$as_me:$LINENO: checking whether $CXX supports -fno-builtin" >&5 +echo $ECHO_N "checking whether $CXX supports -fno-builtin... $ECHO_C" >&6; } +kde_cache=`echo fno-builtin | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-builtin" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="-fno-builtin $CXXFLAGS" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Woverloaded-virtual" >&5 +echo $ECHO_N "checking whether $CXX supports -Woverloaded-virtual... $ECHO_C" >&6; } +kde_cache=`echo Woverloaded-virtual | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Woverloaded-virtual" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + WOVERLOADED_VIRTUAL="-Woverloaded-virtual" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + WOVERLOADED_VRITUAL="" +fi + + + 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 + +{ echo "$as_me:$LINENO: checking whether $CXX supports -pg" >&5 +echo $ECHO_N "checking whether $CXX supports -pg... $ECHO_C" >&6; } +kde_cache=`echo pg | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -pg" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + + CFLAGS="-pg $CFLAGS" + CXXFLAGS="-pg $CXXFLAGS" + +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + 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" + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wmissing-format-attribute" >&5 +echo $ECHO_N "checking whether $CXX supports -Wmissing-format-attribute... $ECHO_C" >&6; } +kde_cache=`echo Wmissing-format-attribute | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wmissing-format-attribute" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CC supports -Wmissing-format-attribute" >&5 +echo $ECHO_N "checking whether $CC supports -Wmissing-format-attribute... $ECHO_C" >&6; } +kde_cache=`echo Wmissing-format-attribute | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cc_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wmissing-format-attribute" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cc_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + ;; + esac + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wundef" >&5 +echo $ECHO_N "checking whether $CXX supports -Wundef... $ECHO_C" >&6; } +kde_cache=`echo Wundef | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wundef" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="-Wundef $CXXFLAGS" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wno-long-long" >&5 +echo $ECHO_N "checking whether $CXX supports -Wno-long-long... $ECHO_C" >&6; } +kde_cache=`echo Wno-long-long | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wno-long-long" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="-Wno-long-long $CXXFLAGS" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wno-non-virtual-dtor" >&5 +echo $ECHO_N "checking whether $CXX supports -Wno-non-virtual-dtor... $ECHO_C" >&6; } +kde_cache=`echo Wno-non-virtual-dtor | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + fi + fi + + if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then + CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS" + fi + + # Check whether --enable-pch was given. +if test "${enable_pch+set}" = set; then + enableval=$enable_pch; kde_use_pch=$enableval +else + kde_use_pch=no +fi + + + HAVE_GCC_VISIBILITY=0 + + + if test "$GXX" = "yes"; then + +{ echo "$as_me:$LINENO: checking whether $CXX supports -fno-exceptions" >&5 +echo $ECHO_N "checking whether $CXX supports -fno-exceptions... $ECHO_C" >&6; } +kde_cache=`echo fno-exceptions | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-exceptions" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS -fno-exceptions" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -fno-check-new" >&5 +echo $ECHO_N "checking whether $CXX supports -fno-check-new... $ECHO_C" >&6; } +kde_cache=`echo fno-check-new | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-check-new" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS -fno-check-new" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -fno-common" >&5 +echo $ECHO_N "checking whether $CXX supports -fno-common... $ECHO_C" >&6; } +kde_cache=`echo fno-common | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fno-common" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS -fno-common" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -fexceptions" >&5 +echo $ECHO_N "checking whether $CXX supports -fexceptions... $ECHO_C" >&6; } +kde_cache=`echo fexceptions | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fexceptions" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + USE_EXCEPTIONS="-fexceptions" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + USE_EXCEPTIONS= +fi + + ENABLE_PERMISSIVE_FLAG="-fpermissive" + + if test "$kde_use_pch" = "yes"; then + { echo "$as_me:$LINENO: checking whether gcc supports precompiling c header files" >&5 +echo $ECHO_N "checking whether gcc supports precompiling c header files... $ECHO_C" >&6; } + echo >conftest.h + if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + kde_gcc_supports_pch=no + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + fi + if test "$kde_gcc_supports_pch" = "yes"; then + { echo "$as_me:$LINENO: checking whether gcc supports precompiling c++ header files" >&5 +echo $ECHO_N "checking whether gcc supports precompiling c++ header files... $ECHO_C" >&6; } + if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + kde_gcc_supports_pch=no + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + fi + fi + rm -f conftest.h conftest.h.gch + fi + fi + + +if test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes"; then + unsermake_enable_pch_TRUE= + unsermake_enable_pch_FALSE='#' +else + unsermake_enable_pch_TRUE='#' + unsermake_enable_pch_FALSE= +fi + + if test "$CXX" = "KCC"; then + + if test "$kde_use_pch" = "yes"; then + +{ echo "$as_me:$LINENO: checking whether $CXX supports --pch" >&5 +echo $ECHO_N "checking whether $CXX supports --pch... $ECHO_C" >&6; } +kde_cache=`echo -pch | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --pch" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --pch" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + fi + +{ echo "$as_me:$LINENO: checking whether $CXX supports --inline_keyword_space_time=6" >&5 +echo $ECHO_N "checking whether $CXX supports --inline_keyword_space_time=6... $ECHO_C" >&6; } +kde_cache=`echo -inline_keyword_space_time=6 | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports --inline_auto_space_time=2" >&5 +echo $ECHO_N "checking whether $CXX supports --inline_auto_space_time=2... $ECHO_C" >&6; } +kde_cache=`echo -inline_auto_space_time=2 | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports --inline_implicit_space_time=2.0" >&5 +echo $ECHO_N "checking whether $CXX supports --inline_implicit_space_time=2.0... $ECHO_C" >&6; } +kde_cache=`echo -inline_implicit_space_time=2.0 | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports --inline_generated_space_time=2.0" >&5 +echo $ECHO_N "checking whether $CXX supports --inline_generated_space_time=2.0... $ECHO_C" >&6; } +kde_cache=`echo -inline_generated_space_time=2.0 | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + +{ echo "$as_me:$LINENO: checking whether $CXX supports --one_per" >&5 +echo $ECHO_N "checking whether $CXX supports --one_per... $ECHO_C" >&6; } +kde_cache=`echo -one_per | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS --one_per" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + CXXFLAGS="$CXXFLAGS --one_per" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + fi + + 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 + { { echo "$as_me:$LINENO: 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" >&5 +echo "$as_me: 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" >&2;} + { (exit 1); exit 1; }; } + fi + fi + ;; + esac + + if test "x$kde_use_qt_emb" != "xyes"; then + __val=$CXX + __forbid=" -fno-rtti -rpath " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) { echo "$as_me:$LINENO: WARNING: found forbidden $i in CXX, removing it" >&5 +echo "$as_me: WARNING: found forbidden $i in CXX, removing it" >&2;} ;; + *) # 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 + CXX=$__new + fi + + __val=$CXXFLAGS + __forbid=" -fno-rtti -rpath " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) { echo "$as_me:$LINENO: WARNING: found forbidden $i in CXXFLAGS, removing it" >&5 +echo "$as_me: WARNING: found forbidden $i in CXXFLAGS, removing it" >&2;} ;; + *) # 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 + CXXFLAGS=$__new + fi + +else + __val=$CXX + __forbid=" -rpath " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) { echo "$as_me:$LINENO: WARNING: found forbidden $i in CXX, removing it" >&5 +echo "$as_me: WARNING: found forbidden $i in CXX, removing it" >&2;} ;; + *) # 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 + CXX=$__new + fi + + __val=$CXXFLAGS + __forbid=" -rpath " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) { echo "$as_me:$LINENO: WARNING: found forbidden $i in CXXFLAGS, removing it" >&5 +echo "$as_me: WARNING: found forbidden $i in CXXFLAGS, removing it" >&2;} ;; + *) # 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 + CXXFLAGS=$__new + fi + +fi + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test "$GCC" = yes; then + NOOPT_CFLAGS=-O0 + fi + +{ echo "$as_me:$LINENO: checking whether $CXX supports -O0" >&5 +echo $ECHO_N "checking whether $CXX supports -O0... $ECHO_C" >&6; } +kde_cache=`echo O0 | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -O0" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + NOOPT_CXXFLAGS=-O0 +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + + # Check whether --enable-coverage was given. +if test "${enable_coverage+set}" = set; then + enableval=$enable_coverage; + 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 + { { echo "$as_me:$LINENO: error: coverage with your compiler is not supported" >&5 +echo "$as_me: error: coverage with your compiler is not supported" >&2;} + { (exit 1); exit 1; }; } + fi + CFLAGS="$CFLAGS $ac_coverage_compiler" + CXXFLAGS="$CXXFLAGS $ac_coverage_compiler" + LDFLAGS="$LDFLAGS $ac_coverage_linker" + +fi + + + + + + + + # Check whether --enable-new_ldflags was given. +if test "${enable_new_ldflags+set}" = set; then + enableval=$enable_new_ldflags; kde_use_new_ldflags=$enableval +else + kde_use_new_ldflags=no +fi + + + LDFLAGS_AS_NEEDED="" + LDFLAGS_NEW_DTAGS="" + if test "x$kde_use_new_ldflags" = "xyes"; then + LDFLAGS_NEW_DTAGS="" + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wl,--enable-new-dtags" >&5 +echo $ECHO_N "checking whether $CXX supports -Wl,--enable-new-dtags... $ECHO_C" >&6; } +kde_cache=`echo Wl,--enable-new-dtags | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wl,--enable-new-dtags" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wl,--as-needed" >&5 +echo $ECHO_N "checking whether $CXX supports -Wl,--as-needed... $ECHO_C" >&6; } +kde_cache=`echo Wl,--as-needed | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wl,--as-needed" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + LDFLAGS_AS_NEEDED="-Wl,--as-needed" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + fi + + + + + # Check whether --enable-final was given. +if test "${enable_final+set}" = set; then + enableval=$enable_final; kde_use_final=$enableval +else + kde_use_final=no +fi + + + 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 + + + + + # Check whether --enable-closure was given. +if test "${enable_closure+set}" = set; then + enableval=$enable_closure; kde_use_closure=$enableval +else + kde_use_closure=no +fi + + + 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) + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wl,--no-undefined" >&5 +echo $ECHO_N "checking whether $CXX supports -Wl,--no-undefined... $ECHO_C" >&6; } +kde_cache=`echo Wl,--no-undefined | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wl,--no-undefined" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + +{ echo "$as_me:$LINENO: checking whether $CXX supports -Wl,--allow-shlib-undefined" >&5 +echo $ECHO_N "checking whether $CXX supports -Wl,--allow-shlib-undefined... $ECHO_C" >&6; } +kde_cache=`echo Wl,--allow-shlib-undefined | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Wl,--allow-shlib-undefined" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + KDE_NO_UNDEFINED="" +fi + +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + KDE_NO_UNDEFINED="" +fi + + ;; + esac + fi + + + + + + # Check whether --enable-nmcheck was given. +if test "${enable_nmcheck+set}" = set; then + enableval=$enable_nmcheck; kde_use_nmcheck=$enableval +else + kde_use_nmcheck=no +fi + + + 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 + + + + + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; 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 +else + enable_shared=yes +fi + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; 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 +else + enable_static=no +fi + + + + + + kdelibsuff="$kde_libs_suffix" + if test -z "$kdelibsuff"; then + kdelibsuff=no + fi + # Check whether --enable-libsuffix was given. +if test "${enable_libsuffix+set}" = set; then + enableval=$enable_libsuffix; kdelibsuff=$enableval +fi + + # TODO: add an auto case that compiles a little C app to check + # where the glibc is + if test "$kdelibsuff" = "no"; then + kdelibsuff= + fi + if test -z "$kdelibsuff"; then + { echo "$as_me:$LINENO: result: not using lib directory suffix" >&5 +echo "${ECHO_T}not using lib directory suffix" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define KDELIBSUFF "" +_ACEOF + + else + if test "$libdir" = '${exec_prefix}/lib'; then + libdir="$libdir${kdelibsuff}" + libdir="$libdir" + fi + +cat >>confdefs.h <<_ACEOF +#define KDELIBSUFF "${kdelibsuff}" +_ACEOF + + { echo "$as_me:$LINENO: result: using lib directory suffix $kdelibsuff" >&5 +echo "${ECHO_T}using lib directory suffix $kdelibsuff" >&6; } + fi + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; 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 +else + enable_fast_install=yes +fi + + +{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # 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 + +fi + +SED=$lt_cv_path_SED +{ echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6; } + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + +{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' + +{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 +fi +{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6; } +NM="$lt_cv_path_NM" + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + +{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + lt_cv_deplibs_check_method=pass_all + ;; + +mingw* | pw32*) + # win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='win32_libid' + ;; + +darwin* | rhapsody*) + # this will be overwritten by pass_all, but leave it in just in case + lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) + lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + case $host_cpu in + alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh* | x86_64* ) + lt_cv_deplibs_check_method=pass_all ;; + # the debian people say, arm and glibc 2.3.1 works for them with pass_all + arm* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } +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 + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 8153 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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" + { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + 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 + ;; + +esac + +need_locks="$enable_libtool_lock" + + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } +else + { echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6; } +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# 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 <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + 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 + +fi + +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 + { echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6; } +else + { echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6; } +fi + +{ echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 +fi +{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +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" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + +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 + { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + 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 +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + 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 +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=yes +enable_win32_dll=no + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$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' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + 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>&5 + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # 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:9890: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:9894: \$? = $ac_status" >&5 + 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 + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-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_prog_compiler_pic='-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_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-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_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-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_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-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_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # 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:10123: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10127: \$? = $ac_status" >&5 + 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 + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=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:10190: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:10194: \$? = $ac_status" >&5 + 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_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$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 + include_expsyms= + # 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'. + exclude_expsyms="_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 + + ld_shlibs=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 + ld_shlibs=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*) + archive_cmds='$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)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=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. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=no + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$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 + archive_cmds='$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... + archive_expsym_cmds='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 + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$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 + ld_shlibs=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 + archive_cmds='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${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 + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$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. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=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 + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$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. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=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 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=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 + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + 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. + always_export_symbols=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. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_cmds="\$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" + archive_expsym_cmds="\$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 + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$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. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${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. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds="\$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*) + archive_cmds='$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)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi4*) + export_dynamic_flag_spec=-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. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=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. + archive_cmds='$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. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.012) + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + allow_undefined_flag='-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 + archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + archive_cmds='$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 + module_cmds='$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 + archive_expsym_cmds='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 + archive_expsym_cmds='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 + module_expsym_cmds='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}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=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*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$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 + archive_cmds='$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 + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + ;; + *) + archive_cmds='$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*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$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*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$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 + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$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' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$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 + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$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 + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$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' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$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' + archive_expsym_cmds='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 + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + archive_expsym_cmds='$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 + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$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 + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=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. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -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 + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$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' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6; } +test "$ld_shlibs" = 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$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds 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. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +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 + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + libsuff= + if test "x$LINUX_64_MODE" = x64; then + # Some platforms are per default 64-bit, so there's no /lib64 + if test -d /lib64; then + libsuff=64 + fi + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var " || \ + test "X$hardcode_automatic"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != 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, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6; } + +if test "$hardcode_action" = 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 + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +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 + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + 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" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + 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 + + +# Report which librarie types wil actually be built +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +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 + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.012) + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + allow_undefined_flag='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + module_cmds='$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 + archive_expsym_cmds='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}' + module_expsym_cmds='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}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $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 + +# 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=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# 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_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# 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_prog_compiler_wl + +# 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_prog_compiler_pic +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_cv_prog_compiler_c_o + +# 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_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# 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_old_archive_cmds +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_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +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_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# 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_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# 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_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# 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=$hardcode_action + +# 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_hardcode_libdir_flag_spec + +# 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_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# 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=$hardcode_automatic + +# 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=$link_all_deplibs + +# 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="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# 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_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + 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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then + withval=$with_tags; tagnames="$withval" +fi + + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + 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 + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + 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_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$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. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# 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 +compiler_CXX=$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_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 &5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_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 + archive_cmds_CXX='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${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 + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + 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. + archive_cmds_CXX='$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 +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=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. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=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 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=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 + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + 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. + always_export_symbols_CXX=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. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_cmds_CXX="\$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" + archive_expsym_cmds_CXX="\$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 + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$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. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${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. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_CXX="\$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 + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=no + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$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... + archive_expsym_cmds_CXX='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 + ld_shlibs_CXX=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + archive_cmds_need_lc_CXX=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.012) + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + allow_undefined_flag='-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 + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$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 + module_cmds_CXX='$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 + archive_expsym_cmds_CXX='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 + archive_expsym_cmds_CXX='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 + module_expsym_cmds_CXX='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}' + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='-all_load $convenience' + link_all_deplibs_CXX=yes + else + ld_shlibs_CXX=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd12*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=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 + ld_shlibs_CXX=no + ;; + aCC) + archive_cmds_CXX='$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 + archive_cmds_CXX='$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 + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=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 + ld_shlibs_CXX=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$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*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$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 + ld_shlibs_CXX=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + archive_cmds_CXX='$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. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$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 + archive_cmds_CXX='$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 + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + 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. + archive_cmds_CXX='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' + archive_expsym_cmds_CXX='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' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + archive_cmds_need_lc_CXX=no + archive_cmds_CXX='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + archive_cmds_CXX='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$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 + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # 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 + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=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. + archive_cmds_CXX='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' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$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' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # 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 + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$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' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # 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 + ld_shlibs_CXX=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. + archive_cmds_CXX='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' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$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' + archive_expsym_cmds_CXX='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' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # 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 + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$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' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # 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 + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + archive_expsym_cmds_CXX='$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' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=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?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=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. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + archive_cmds_CXX='$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. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$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. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$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 + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext|*.$libext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-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_prog_compiler_pic_CXX='-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_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-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_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-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_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--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_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-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_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # 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:14531: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:14535: \$? = $ac_status" >&5 + 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 + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=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:14598: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:14602: \$? = $ac_status" >&5 + 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_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + export_symbols_cmds_CXX='$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 + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = 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$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX 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. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +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 + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + libsuff= + if test "x$LINUX_64_MODE" = x64; then + # Some platforms are per default 64-bit, so there's no /lib64 + if test -d /lib64; then + libsuff=64 + fi + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var CXX" || \ + test "X$hardcode_automatic_CXX"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != 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, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = 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 + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +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 + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + 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" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + 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 + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### 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=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# 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_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# 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_prog_compiler_wl_CXX + +# 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_prog_compiler_pic_CXX +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_cv_prog_compiler_c_o_CXX + +# 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_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# 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_old_archive_cmds_CXX +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_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +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_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# 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_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# 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_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# 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=$hardcode_action_CXX + +# 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_hardcode_libdir_flag_spec_CXX + +# 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_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# 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=$hardcode_automatic_CXX + +# 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=$link_all_deplibs_CXX + +# 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="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# 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_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +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 + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4*) + test "$enable_shared" = yes && enable_static=no + ;; +esac +{ echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6; } + +{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +{ echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6; } + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-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_prog_compiler_pic_F77='-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_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-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_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-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_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-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_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # 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:16822: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16826: \$? = $ac_status" >&5 + 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 + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=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:16889: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16893: \$? = $ac_status" >&5 + 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_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$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 + include_expsyms_F77= + # 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'. + exclude_expsyms_F77="_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 + + ld_shlibs_F77=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 + ld_shlibs_F77=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*) + archive_cmds_F77='$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)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=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. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=no + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$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 + archive_cmds_F77='$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... + archive_expsym_cmds_F77='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 + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$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 + ld_shlibs_F77=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 + archive_cmds_F77='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${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 + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$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. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=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 + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$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. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=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 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=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 + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + 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. + always_export_symbols_F77=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. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_cmds_F77="\$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" + archive_expsym_cmds_F77="\$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 + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$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. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${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. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_F77="\$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*) + archive_cmds_F77='$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)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi4*) + export_dynamic_flag_spec_F77=-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. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=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. + archive_cmds_F77='$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. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_F77=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.012) + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + allow_undefined_flag='-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 + archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + archive_cmds_F77='$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 + module_cmds_F77='$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 + archive_expsym_cmds_F77='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 + archive_expsym_cmds_F77='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 + module_expsym_cmds_F77='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}' + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='-all_load $convenience' + link_all_deplibs_F77=yes + else + ld_shlibs_F77=no + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=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*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds_F77='$CC -shared -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$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 + archive_cmds_F77='$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 + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + ;; + *) + archive_cmds_F77='$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*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$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*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$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 + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$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' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$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 + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$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 + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$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' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$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' + archive_expsym_cmds_F77='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 + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + archive_expsym_cmds_F77='$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 + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$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 + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_F77=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. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -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 + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$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' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6; } +test "$ld_shlibs_F77" = 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$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 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. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +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 + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + libsuff= + if test "x$LINUX_64_MODE" = x64; then + # Some platforms are per default 64-bit, so there's no /lib64 + if test -d /lib64; then + libsuff=64 + fi + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var F77" || \ + test "X$hardcode_automatic_F77"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != 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, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6; } + +if test "$hardcode_action_F77" = 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 + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### 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=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# 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_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# 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_prog_compiler_wl_F77 + +# 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_prog_compiler_pic_F77 +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_cv_prog_compiler_c_o_F77 + +# 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_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# 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_old_archive_cmds_F77 +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_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +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_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# 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_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# 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_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# 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=$hardcode_action_F77 + +# 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_hardcode_libdir_flag_spec_F77 + +# 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_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# 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=$hardcode_automatic_F77 + +# 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=$link_all_deplibs_F77 + +# 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="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# 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_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # 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:18853: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:18857: \$? = $ac_status" >&5 + 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 + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-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_prog_compiler_pic_GCJ='-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_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-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_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-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_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-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_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # 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:19086: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:19090: \$? = $ac_status" >&5 + 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 + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=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:19153: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:19157: \$? = $ac_status" >&5 + 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_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6; } + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$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 + include_expsyms_GCJ= + # 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'. + exclude_expsyms_GCJ="_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 + + ld_shlibs_GCJ=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 + ld_shlibs_GCJ=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*) + archive_cmds_GCJ='$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)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=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. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=no + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$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 + archive_cmds_GCJ='$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... + archive_expsym_cmds_GCJ='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 + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$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 + ld_shlibs_GCJ=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 + archive_cmds_GCJ='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${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 + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$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. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=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 + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$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. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=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 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=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 + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + 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. + always_export_symbols_GCJ=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. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_cmds_GCJ="\$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" + archive_expsym_cmds_GCJ="\$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 + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$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. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + +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 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${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. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_GCJ="\$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*) + archive_cmds_GCJ='$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)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi4*) + export_dynamic_flag_spec_GCJ=-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. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=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. + archive_cmds_GCJ='$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. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_GCJ=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.012) + allow_undefined_flag='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + allow_undefined_flag='-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 + archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + archive_cmds_GCJ='$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 + module_cmds_GCJ='$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 + archive_expsym_cmds_GCJ='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 + archive_expsym_cmds_GCJ='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 + module_expsym_cmds_GCJ='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}' + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='-all_load $convenience' + link_all_deplibs_GCJ=yes + else + ld_shlibs_GCJ=no + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=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*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds_GCJ='$CC -shared -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$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 + archive_cmds_GCJ='$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 + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + ;; + *) + archive_cmds_GCJ='$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*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$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*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$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 + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$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' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$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 + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$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 + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$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' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$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' + archive_expsym_cmds_GCJ='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 + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + archive_expsym_cmds_GCJ='$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 + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$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 + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_GCJ=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. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -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 + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$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' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } +test "$ld_shlibs_GCJ" = 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$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ 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. + { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } + ;; + esac + fi + ;; +esac + +{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } +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 + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + libsuff= + if test "x$LINUX_64_MODE" = x64; then + # Some platforms are per default 64-bit, so there's no /lib64 + if test -d /lib64; then + libsuff=64 + fi + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var GCJ" || \ + test "X$hardcode_automatic_GCJ"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != 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, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6; } + +if test "$hardcode_action_GCJ" = 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 + +striplib= +old_striplib= +{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +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" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + ;; + *) + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ;; + esac +fi + +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 + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + { echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + 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" + + { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } + 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 + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### 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=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# 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_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# 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_prog_compiler_wl_GCJ + +# 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_prog_compiler_pic_GCJ +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_cv_prog_compiler_c_o_GCJ + +# 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_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# 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_old_archive_cmds_GCJ +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_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +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_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# 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_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# 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_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# 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=$hardcode_action_GCJ + +# 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_hardcode_libdir_flag_spec_GCJ + +# 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_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# 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=$hardcode_automatic_GCJ + +# 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=$link_all_deplibs_GCJ + +# 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="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# 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_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### 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=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# 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_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# 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_prog_compiler_wl_RC + +# 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_prog_compiler_pic_RC +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_cv_prog_compiler_c_o_RC + +# 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_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# 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_old_archive_cmds_RC +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_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +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_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# 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_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# 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_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# 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=$hardcode_action_RC + +# 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_hardcode_libdir_flag_spec_RC + +# 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_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# 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=$hardcode_automatic_RC + +# 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=$link_all_deplibs_RC + +# 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="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# 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_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + 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" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# 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' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LIBTOOL_SHELL="/bin/sh ./libtool" +# LIBTOOL="$LIBTOOL --silent" +KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)" + + +# we patch configure quite some so we better keep that consistent for incremental runs +AUTOCONF='$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure' + + + + + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test -n "$MSGFMT"; then + { echo "$as_me:$LINENO: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + + if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then + { echo "$as_me:$LINENO: result: found msgfmt program is not GNU msgfmt; ignore it" >&5 +echo "${ECHO_T}found msgfmt program is not GNU msgfmt; ignore it" >&6; } + GMSGFMT=":" + fi + MSGFMT=$GMSGFMT + + + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi + + + + + +if test -z "3.0.0"; then + # Current default Qt version: 3.3 + kde_qtver=3 + kde_qtsubver=3 +else + kde_qtsubver=`echo "3.0.0" | sed -e 's#[0-9][0-9]*\.\([0-9][0-9]*\).*#\1#'` + # following is the check if subversion isnt found in passed argument + if test "$kde_qtsubver" = "3.0.0"; then + kde_qtsubver=1 + fi + kde_qtver=`echo "3.0.0" | sed -e 's#^\([0-9][0-9]*\)\..*#\1#'` + if test "$kde_qtver" = "1"; then + kde_qtsubver=42 + fi +fi + +if test -z ""; then + if test "$kde_qtver" = "2"; then + if test $kde_qtsubver -gt 0; then + kde_qt_minversion=">= Qt 2.2.2" + else + kde_qt_minversion=">= Qt 2.0.2" + fi + fi + if test "$kde_qtver" = "3"; then + if test $kde_qtsubver -gt 0; then + if test $kde_qtsubver -gt 1; then + if test $kde_qtsubver -gt 2; then + kde_qt_minversion=">= Qt 3.3 and < 4.0" + else + kde_qt_minversion=">= Qt 3.2 and < 4.0" + fi + else + kde_qt_minversion=">= Qt 3.1 (20021021) and < 4.0" + fi + else + kde_qt_minversion=">= Qt 3.0 and < 4.0" + fi + fi + if test "$kde_qtver" = "1"; then + kde_qt_minversion=">= 1.42 and < 2.0" + fi +else + kde_qt_minversion="" +fi + +if test -z ""; then + if test $kde_qtver = 3; then + if test $kde_qtsubver -gt 0; then + kde_qt_verstring="QT_VERSION >= 0x03@VER@00 && QT_VERSION < 0x040000" + qtsubver=`echo "00$kde_qtsubver" | sed -e 's,.*\(..\)$,\1,'` + kde_qt_verstring=`echo $kde_qt_verstring | sed -e "s,@VER@,$qtsubver,"` + else + kde_qt_verstring="QT_VERSION >= 300 && QT_VERSION < 0x040000" + fi + fi + if test $kde_qtver = 2; then + if test $kde_qtsubver -gt 0; then + kde_qt_verstring="QT_VERSION >= 222" + else + kde_qt_verstring="QT_VERSION >= 200" + fi + fi + if test $kde_qtver = 1; then + kde_qt_verstring="QT_VERSION >= 142 && QT_VERSION < 200" + fi +else + kde_qt_verstring="" +fi + +if test $kde_qtver = 4; then + kde_qt_dirs="$QTDIR /usr/lib/qt4 /usr/lib/qt /usr/share/qt4" +fi +if test $kde_qtver = 3; then + kde_qt_dirs="$QTDIR /usr/lib/qt3 /usr/lib/qt /usr/share/qt3" +fi +if test $kde_qtver = 2; then + kde_qt_dirs="$QTDIR /usr/lib/qt2 /usr/lib/qt" +fi +if test $kde_qtver = 1; then + kde_qt_dirs="$QTDIR /usr/lib/qt" +fi + + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`" + + { echo "$as_me:$LINENO: checking if C++ programs can be compiled" >&5 +echo $ECHO_N "checking if C++ programs can be compiled... $ECHO_C" >&6; } + if test "${kde_cv_stl_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +using namespace std; + +int +main () +{ + + string astring="Hallo Welt."; + astring.erase(0, 6); // now astring is "Welt" + return 0; + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + kde_cv_stl_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_stl_works=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi + + + { echo "$as_me:$LINENO: result: $kde_cv_stl_works" >&5 +echo "${ECHO_T}$kde_cv_stl_works" >&6; } + + if test "$kde_cv_stl_works" = "yes"; then + # back compatible + +cat >>confdefs.h <<_ACEOF +#define HAVE_SGI_STL 1 +_ACEOF + + else + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } + fi + + CXXFLAGS="$ac_save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +{ echo "$as_me:$LINENO: checking for strlcat" >&5 +echo $ECHO_N "checking for strlcat... $ECHO_C" >&6; } +if test "${kde_cv_func_strlcat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +save_CXXFLAGS="$CXXFLAGS" +kde_safe_LIBS="$LIBS" +LIBS="$LIBS $X_EXTRA_LIBS" +if test "$GXX" = "yes"; then +CXXFLAGS="$CXXFLAGS -pedantic-errors" +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include + + +int +main () +{ + + char buf[20]; + buf[0]='\0'; + strlcat(buf, "KDE function test", sizeof(buf)); + + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + kde_cv_func_strlcat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_func_strlcat=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CXXFLAGS="$save_CXXFLAGS" +LIBS="$kde_safe_LIBS" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + +{ echo "$as_me:$LINENO: result: $kde_cv_func_strlcat" >&5 +echo "${ECHO_T}$kde_cv_func_strlcat" >&6; } + +{ echo "$as_me:$LINENO: checking if strlcat needs custom prototype" >&5 +echo $ECHO_N "checking if strlcat needs custom prototype... $ECHO_C" >&6; } +if test "${kde_cv_proto_strlcat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "x$kde_cv_func_strlcat" = xyes; then + kde_cv_proto_strlcat=no +else + case "strlcat" in + setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat) + kde_cv_proto_strlcat="yes - in libkdefakes" + ;; + *) + kde_cv_proto_strlcat=unknown + ;; + esac +fi + +if test "x$kde_cv_proto_strlcat" = xunknown; then + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + kde_safe_libs=$LIBS + LIBS="$LIBS $X_EXTRA_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include + + +extern "C" unsigned long strlcat(char*, const char*, unsigned long); + +int +main () +{ + + char buf[20]; + buf[0]='\0'; + strlcat(buf, "KDE function test", sizeof(buf)); + + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + kde_cv_func_strlcat=yes + kde_cv_proto_strlcat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_proto_strlcat="strlcat unavailable" + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$kde_safe_libs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi + +fi + +{ echo "$as_me:$LINENO: result: $kde_cv_proto_strlcat" >&5 +echo "${ECHO_T}$kde_cv_proto_strlcat" >&6; } + +if test "x$kde_cv_func_strlcat" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRLCAT 1 +_ACEOF + + +fi +if test "x$kde_cv_proto_strlcat" = xno; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRLCAT_PROTO 1 +_ACEOF + +fi + + + + + + + +{ echo "$as_me:$LINENO: checking for strlcpy" >&5 +echo $ECHO_N "checking for strlcpy... $ECHO_C" >&6; } +if test "${kde_cv_func_strlcpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +save_CXXFLAGS="$CXXFLAGS" +kde_safe_LIBS="$LIBS" +LIBS="$LIBS $X_EXTRA_LIBS" +if test "$GXX" = "yes"; then +CXXFLAGS="$CXXFLAGS -pedantic-errors" +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include + + +int +main () +{ + + char buf[20]; + strlcpy(buf, "KDE function test", sizeof(buf)); + + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + kde_cv_func_strlcpy=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_func_strlcpy=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CXXFLAGS="$save_CXXFLAGS" +LIBS="$kde_safe_LIBS" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + +{ echo "$as_me:$LINENO: result: $kde_cv_func_strlcpy" >&5 +echo "${ECHO_T}$kde_cv_func_strlcpy" >&6; } + +{ echo "$as_me:$LINENO: checking if strlcpy needs custom prototype" >&5 +echo $ECHO_N "checking if strlcpy needs custom prototype... $ECHO_C" >&6; } +if test "${kde_cv_proto_strlcpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "x$kde_cv_func_strlcpy" = xyes; then + kde_cv_proto_strlcpy=no +else + case "strlcpy" in + setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat) + kde_cv_proto_strlcpy="yes - in libkdefakes" + ;; + *) + kde_cv_proto_strlcpy=unknown + ;; + esac +fi + +if test "x$kde_cv_proto_strlcpy" = xunknown; then + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + kde_safe_libs=$LIBS + LIBS="$LIBS $X_EXTRA_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include + + +extern "C" unsigned long strlcpy(char*, const char*, unsigned long); + +int +main () +{ + + char buf[20]; + strlcpy(buf, "KDE function test", sizeof(buf)); + + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + kde_cv_func_strlcpy=yes + kde_cv_proto_strlcpy=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_proto_strlcpy="strlcpy unavailable" + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$kde_safe_libs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi + +fi + +{ echo "$as_me:$LINENO: result: $kde_cv_proto_strlcpy" >&5 +echo "${ECHO_T}$kde_cv_proto_strlcpy" >&6; } + +if test "x$kde_cv_func_strlcpy" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRLCPY 1 +_ACEOF + + +fi +if test "x$kde_cv_proto_strlcpy" = xno; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRLCPY_PROTO 1 +_ACEOF + +fi + + + + + + + { echo "$as_me:$LINENO: checking for main in -lutil" >&5 +echo $ECHO_N "checking for main in -lutil... $ECHO_C" >&6; } +if test "${ac_cv_lib_util_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lutil $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_util_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_util_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_util_main" >&5 +echo "${ECHO_T}$ac_cv_lib_util_main" >&6; } +if test $ac_cv_lib_util_main = yes; then + LIBUTIL="-lutil" +fi + + { echo "$as_me:$LINENO: checking for main in -lcompat" >&5 +echo $ECHO_N "checking for main in -lcompat... $ECHO_C" >&6; } +if test "${ac_cv_lib_compat_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcompat $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_compat_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_compat_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_compat_main" >&5 +echo "${ECHO_T}$ac_cv_lib_compat_main" >&6; } +if test $ac_cv_lib_compat_main = yes; then + LIBCOMPAT="-lcompat" +fi + + kde_have_crypt= + { echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5 +echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6; } +if test "${ac_cv_lib_crypt_crypt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypt $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char crypt (); +int +main () +{ +return crypt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_crypt_crypt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_crypt_crypt=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5 +echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6; } +if test $ac_cv_lib_crypt_crypt = yes; then + LIBCRYPT="-lcrypt"; kde_have_crypt=yes +else + { echo "$as_me:$LINENO: checking for crypt in -lc" >&5 +echo $ECHO_N "checking for crypt in -lc... $ECHO_C" >&6; } +if test "${ac_cv_lib_c_crypt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char crypt (); +int +main () +{ +return crypt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_c_crypt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_c_crypt=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_c_crypt" >&5 +echo "${ECHO_T}$ac_cv_lib_c_crypt" >&6; } +if test $ac_cv_lib_c_crypt = yes; then + kde_have_crypt=yes +else + + { echo "$as_me:$LINENO: WARNING: you have no crypt in either libcrypt or libc. +You should install libcrypt from another source or configure with PAM +support" >&5 +echo "$as_me: WARNING: you have no crypt in either libcrypt or libc. +You should install libcrypt from another source or configure with PAM +support" >&2;} + kde_have_crypt=no + +fi + +fi + + + if test $kde_have_crypt = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_CRYPT 1 +_ACEOF + + fi + + { echo "$as_me:$LINENO: checking for socklen_t" >&5 +echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; } + if test "${kde_cv_socklen_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + kde_cv_socklen_t=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + #include + +int +main () +{ + + socklen_t len; + getpeername(0,0,&len); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + kde_cv_socklen_t=yes + kde_cv_socklen_t_equiv=socklen_t + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + { echo "$as_me:$LINENO: result: $kde_cv_socklen_t" >&5 +echo "${ECHO_T}$kde_cv_socklen_t" >&6; } + if test $kde_cv_socklen_t = no; then + { echo "$as_me:$LINENO: checking for socklen_t equivalent for socket functions" >&5 +echo $ECHO_N "checking for socklen_t equivalent for socket functions... $ECHO_C" >&6; } + if test "${kde_cv_socklen_t_equiv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_socklen_t_equiv=int + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + for t in int size_t unsigned long "unsigned long"; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + #include + +int +main () +{ + + $t len; + getpeername(0,0,&len); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + kde_cv_socklen_t_equiv="$t" + break + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + { echo "$as_me:$LINENO: result: $kde_cv_socklen_t_equiv" >&5 +echo "${ECHO_T}$kde_cv_socklen_t_equiv" >&6; } + fi + +cat >>confdefs.h <<_ACEOF +#define kde_socklen_t $kde_cv_socklen_t_equiv +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define ksize_t $kde_cv_socklen_t_equiv +_ACEOF + + + { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 +echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dnet_dnet_ntoa=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dnet_dnet_ntoa=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test $ac_cv_lib_dnet_dnet_ntoa = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 +echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi + { echo "$as_me:$LINENO: checking for inet_ntoa" >&5 +echo $ECHO_N "checking for inet_ntoa... $ECHO_C" >&6; } +if test "${ac_cv_func_inet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define inet_ntoa to an innocuous variant, in case declares inet_ntoa. + For example, HP-UX 11i declares gettimeofday. */ +#define inet_ntoa innocuous_inet_ntoa + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char inet_ntoa (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef inet_ntoa + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_ntoa (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_inet_ntoa || defined __stub___inet_ntoa +choke me +#endif + +int +main () +{ +return inet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_inet_ntoa=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_inet_ntoa=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_inet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_func_inet_ntoa" >&6; } + + if test $ac_cv_func_inet_ntoa = no; then + { echo "$as_me:$LINENO: checking for inet_ntoa in -lnsl" >&5 +echo $ECHO_N "checking for inet_ntoa in -lnsl... $ECHO_C" >&6; } +if test "${ac_cv_lib_nsl_inet_ntoa+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_ntoa (); +int +main () +{ +return inet_ntoa (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_nsl_inet_ntoa=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_nsl_inet_ntoa=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_ntoa" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_inet_ntoa" >&6; } +if test $ac_cv_lib_nsl_inet_ntoa = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + fi + { echo "$as_me:$LINENO: checking for connect" >&5 +echo $ECHO_N "checking for connect... $ECHO_C" >&6; } +if test "${ac_cv_func_connect+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define connect to an innocuous variant, in case declares connect. + For example, HP-UX 11i declares gettimeofday. */ +#define connect innocuous_connect + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char connect (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef connect + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_connect || defined __stub___connect +choke me +#endif + +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_connect=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_connect=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 +echo "${ECHO_T}$ac_cv_func_connect" >&6; } + + if test $ac_cv_func_connect = no; then + { echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 +echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_socket_connect=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_socket_connect=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 +echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6; } +if test $ac_cv_lib_socket_connect = yes; then + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + { echo "$as_me:$LINENO: checking for remove" >&5 +echo $ECHO_N "checking for remove... $ECHO_C" >&6; } +if test "${ac_cv_func_remove+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define remove to an innocuous variant, in case declares remove. + For example, HP-UX 11i declares gettimeofday. */ +#define remove innocuous_remove + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char remove (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef remove + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_remove || defined __stub___remove +choke me +#endif + +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_remove=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_remove=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 +echo "${ECHO_T}$ac_cv_func_remove" >&6; } + + if test $ac_cv_func_remove = no; then + { echo "$as_me:$LINENO: checking for remove in -lposix" >&5 +echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_posix_remove=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_posix_remove=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 +echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6; } +if test $ac_cv_lib_posix_remove = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + { echo "$as_me:$LINENO: checking for shmat" >&5 +echo $ECHO_N "checking for shmat... $ECHO_C" >&6; } +if test "${ac_cv_func_shmat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shmat to an innocuous variant, in case declares shmat. + For example, HP-UX 11i declares gettimeofday. */ +#define shmat innocuous_shmat + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shmat (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shmat + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shmat || defined __stub___shmat +choke me +#endif + +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_shmat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shmat=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 +echo "${ECHO_T}$ac_cv_func_shmat" >&6; } +if test $ac_cv_func_shmat = yes; then + : +else + { echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 +echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ipc_shmat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ipc_shmat=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 +echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6; } +if test $ac_cv_lib_ipc_shmat = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + +fi + + + # more headers that need to be explicitly included on darwin + + +for ac_header in sys/types.h stdint.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + # sys/bitypes.h is needed for uint32_t and friends on Tru64 + +for ac_header in sys/bitypes.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + # darwin requires a poll emulation library + { echo "$as_me:$LINENO: checking for poll in -lpoll" >&5 +echo $ECHO_N "checking for poll in -lpoll... $ECHO_C" >&6; } +if test "${ac_cv_lib_poll_poll+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpoll $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char poll (); +int +main () +{ +return poll (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_poll_poll=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_poll_poll=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_poll_poll" >&5 +echo "${ECHO_T}$ac_cv_lib_poll_poll" >&6; } +if test $ac_cv_lib_poll_poll = yes; then + LIB_POLL="-lpoll" +fi + + + # for some image handling on Mac OS X + +for ac_header in Carbon/Carbon.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + # CoreAudio framework + if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then + { echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 +echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } +if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 +echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h usability" >&5 +echo $ECHO_N "checking CoreAudio/CoreAudio.h usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h presence" >&5 +echo $ECHO_N "checking CoreAudio/CoreAudio.h presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 +echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } +if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_CoreAudio_CoreAudio_h=$ac_header_preproc +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 +echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } + +fi +if test $ac_cv_header_CoreAudio_CoreAudio_h = yes; then + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COREAUDIO 1 +_ACEOF + + FRAMEWORK_COREAUDIO="-Xlinker -framework -Xlinker CoreAudio" + +fi + + + + + { echo "$as_me:$LINENO: checking if res_init needs -lresolv" >&5 +echo $ECHO_N "checking if res_init needs -lresolv... $ECHO_C" >&6; } + kde_libs_safe="$LIBS" + LIBS="$LIBS $X_EXTRA_LIBS -lresolv" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include + +int +main () +{ + + res_init(); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + + LIBRESOLV="-lresolv" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define HAVE_RES_INIT 1 +_ACEOF + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$kde_libs_safe + + + +{ echo "$as_me:$LINENO: checking for res_init" >&5 +echo $ECHO_N "checking for res_init... $ECHO_C" >&6; } +if test "${kde_cv_func_res_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +save_CXXFLAGS="$CXXFLAGS" +kde_safe_LIBS="$LIBS" +LIBS="$LIBS $X_EXTRA_LIBS" +if test "$GXX" = "yes"; then +CXXFLAGS="$CXXFLAGS -pedantic-errors" +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include +#include +#include +#include + + +int +main () +{ + +res_init() + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + kde_cv_func_res_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_func_res_init=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CXXFLAGS="$save_CXXFLAGS" +LIBS="$kde_safe_LIBS" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + +{ echo "$as_me:$LINENO: result: $kde_cv_func_res_init" >&5 +echo "${ECHO_T}$kde_cv_func_res_init" >&6; } + +{ echo "$as_me:$LINENO: checking if res_init needs custom prototype" >&5 +echo $ECHO_N "checking if res_init needs custom prototype... $ECHO_C" >&6; } +if test "${kde_cv_proto_res_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "x$kde_cv_func_res_init" = xyes; then + kde_cv_proto_res_init=no +else + case "res_init" in + setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat) + kde_cv_proto_res_init="yes - in libkdefakes" + ;; + *) + kde_cv_proto_res_init=unknown + ;; + esac +fi + +if test "x$kde_cv_proto_res_init" = xunknown; then + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + kde_safe_libs=$LIBS + LIBS="$LIBS $X_EXTRA_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include +#include +#include +#include + + +extern "C" int res_init(void); + +int +main () +{ + +res_init() + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + kde_cv_func_res_init=yes + kde_cv_proto_res_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_proto_res_init="res_init unavailable" + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$kde_safe_libs +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi + +fi + +{ echo "$as_me:$LINENO: result: $kde_cv_proto_res_init" >&5 +echo "${ECHO_T}$kde_cv_proto_res_init" >&6; } + +if test "x$kde_cv_func_res_init" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_RES_INIT 1 +_ACEOF + + +fi +if test "x$kde_cv_proto_res_init" = xno; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_RES_INIT_PROTO 1 +_ACEOF + +fi + + + + + + + + LIBSOCKET="$X_EXTRA_LIBS" + + + { echo "$as_me:$LINENO: checking for killpg in -lucb" >&5 +echo $ECHO_N "checking for killpg in -lucb... $ECHO_C" >&6; } +if test "${ac_cv_lib_ucb_killpg+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lucb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char killpg (); +int +main () +{ +return killpg (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ucb_killpg=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ucb_killpg=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ucb_killpg" >&5 +echo "${ECHO_T}$ac_cv_lib_ucb_killpg" >&6; } +if test $ac_cv_lib_ucb_killpg = yes; then + LIBUCB="-lucb" +fi + + + case $host in *-*-lynxos* ) + { echo "$as_me:$LINENO: checking LynxOS header file wrappers" >&5 +echo $ECHO_N "checking LynxOS header file wrappers... $ECHO_C" >&6; } + CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__" + { echo "$as_me:$LINENO: result: disabled" >&5 +echo "${ECHO_T}disabled" >&6; } + { echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 +echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_bsd_gethostbyname=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_bsd_gethostbyname=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 +echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6; } +if test $ac_cv_lib_bsd_gethostbyname = yes; then + LIBSOCKET="-lbsd" +fi + ;; + esac + + { echo "$as_me:$LINENO: checking for int" >&5 +echo $ECHO_N "checking for int... $ECHO_C" >&6; } +if test "${ac_cv_type_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef int ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_int=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_int=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 +echo "${ECHO_T}$ac_cv_type_int" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of int" >&5 +echo $ECHO_N "checking size of int... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_int=$ac_lo;; +'') if test "$ac_cv_type_int" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_int=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef int ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_int=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_int" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_int=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 +echo "${ECHO_T}$ac_cv_sizeof_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + { echo "$as_me:$LINENO: checking for short" >&5 +echo $ECHO_N "checking for short... $ECHO_C" >&6; } +if test "${ac_cv_type_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef short ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_short=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_short=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 +echo "${ECHO_T}$ac_cv_type_short" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of short" >&5 +echo $ECHO_N "checking size of short... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_short=$ac_lo;; +'') if test "$ac_cv_type_short" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (short) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_short=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef short ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_short=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_short" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (short) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_short=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 +echo "${ECHO_T}$ac_cv_sizeof_short" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + { echo "$as_me:$LINENO: checking for long" >&5 +echo $ECHO_N "checking for long... $ECHO_C" >&6; } +if test "${ac_cv_type_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef long ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_long=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 +echo "${ECHO_T}$ac_cv_type_long" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of long" >&5 +echo $ECHO_N "checking size of long... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') if test "$ac_cv_type_long" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_long=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef long ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_long=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_long" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_long=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +echo "${ECHO_T}$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + { echo "$as_me:$LINENO: checking for char *" >&5 +echo $ECHO_N "checking for char *... $ECHO_C" >&6; } +if test "${ac_cv_type_char_p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef char * ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_char_p=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_char_p=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_char_p" >&5 +echo "${ECHO_T}$ac_cv_type_char_p" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of char *" >&5 +echo $ECHO_N "checking size of char *... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_char_p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_char_p=$ac_lo;; +'') if test "$ac_cv_type_char_p" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char *) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_char_p=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef char * ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_char_p=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_char_p" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char *) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_char_p=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_char_p" >&5 +echo "${ECHO_T}$ac_cv_sizeof_char_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p +_ACEOF + + + +{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } +if test $ac_cv_lib_dl_dlopen = yes; then + +LIBDL="-ldl" +ac_cv_have_dlfcn=yes + +fi + + +{ echo "$as_me:$LINENO: checking for shl_unload in -ldld" >&5 +echo $ECHO_N "checking for shl_unload in -ldld... $ECHO_C" >&6; } +if test "${ac_cv_lib_dld_shl_unload+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_unload (); +int +main () +{ +return shl_unload (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_dld_shl_unload=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_unload=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_unload" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_unload" >&6; } +if test $ac_cv_lib_dld_shl_unload = yes; then + +LIBDL="-ldld" +ac_cv_have_shload=yes + +fi + + + + + + + + { echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef size_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of size_t" >&5 +echo $ECHO_N "checking size of size_t... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_size_t=$ac_lo;; +'') if test "$ac_cv_type_size_t" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (size_t) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_size_t=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef size_t ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_size_t=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_size_t" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (size_t) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_size_t=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5 +echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +_ACEOF + + + { echo "$as_me:$LINENO: checking for unsigned long" >&5 +echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6; } +if test "${ac_cv_type_unsigned_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef unsigned long ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_unsigned_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_unsigned_long=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long" >&5 +echo "${ECHO_T}$ac_cv_type_unsigned_long" >&6; } + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ echo "$as_me:$LINENO: checking size of unsigned long" >&5 +echo $ECHO_N "checking size of unsigned long... $ECHO_C" >&6; } +if test "${ac_cv_sizeof_unsigned_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_unsigned_long=$ac_lo;; +'') if test "$ac_cv_type_unsigned_long" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (unsigned long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_unsigned_long=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + typedef unsigned long ac__type_sizeof_; +static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } +static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (ac__type_sizeof_))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%ld\n", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (ac__type_sizeof_)))) + return 1; + fprintf (f, "%lu\n", i); + } + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_unsigned_long=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +if test "$ac_cv_type_unsigned_long" = yes; then + { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (unsigned long) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } + else + ac_cv_sizeof_unsigned_long=0 + fi +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long" >&5 +echo "${ECHO_T}$ac_cv_sizeof_unsigned_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long +_ACEOF + + + + { echo "$as_me:$LINENO: checking sizeof size_t == sizeof unsigned long" >&5 +echo $ECHO_N "checking sizeof size_t == sizeof unsigned long... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG + choke me + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + { { echo "$as_me:$LINENO: 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! + " >&5 +echo "$as_me: 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! + " >&2;} + { (exit 1); exit 1; }; } + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +# darwin needs this to initialize the environment + +for ac_header in crt_externs.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ echo "$as_me:$LINENO: checking for _NSGetEnviron" >&5 +echo $ECHO_N "checking for _NSGetEnviron... $ECHO_C" >&6; } +if test "${ac_cv_func__NSGetEnviron+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _NSGetEnviron to an innocuous variant, in case declares _NSGetEnviron. + For example, HP-UX 11i declares gettimeofday. */ +#define _NSGetEnviron innocuous__NSGetEnviron + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _NSGetEnviron (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _NSGetEnviron + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _NSGetEnviron (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__NSGetEnviron || defined __stub____NSGetEnviron +choke me +#endif + +int +main () +{ +return _NSGetEnviron (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func__NSGetEnviron=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__NSGetEnviron=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func__NSGetEnviron" >&5 +echo "${ECHO_T}$ac_cv_func__NSGetEnviron" >&6; } +if test $ac_cv_func__NSGetEnviron = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_NSGETENVIRON 1 +_ACEOF + +fi + + + + + + + + + + +for ac_func in vsnprintf snprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + +# Check whether --enable-embedded was given. +if test "${enable_embedded+set}" = set; then + enableval=$enable_embedded; kde_use_qt_emb=$enableval +else + kde_use_qt_emb=no + +fi + + +# Check whether --enable-qtopia was given. +if test "${enable_qtopia+set}" = set; then + enableval=$enable_qtopia; kde_use_qt_emb_palm=$enableval +else + kde_use_qt_emb_palm=no + +fi + + +# Check whether --enable-mac was given. +if test "${enable_mac+set}" = set; then + enableval=$enable_mac; kde_use_qt_mac=$enableval +else + kde_use_qt_mac=no + +fi + + +# used to disable x11-specific stuff on special platforms + + +if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then + include_x11_TRUE= + include_x11_FALSE='#' +else + include_x11_TRUE='#' + include_x11_FALSE= +fi + + +if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then + +{ echo "$as_me:$LINENO: checking for X" >&5 +echo $ECHO_N "checking for X... $ECHO_C" >&6; } + +if test "${kde_cv_have_x+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # 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 + + + + +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. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$x_direct_test_include> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # We can compile using X headers with no special include directory. +ac_x_includes= +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # 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 + +rm -f conftest.err conftest.$ac_ext +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" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +${x_direct_test_function}(1) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + LIBS="$ac_save_LIBS" +# We can link X programs with no special library path. +ac_x_libraries= +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + 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 + 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 + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = NO + +case "$host" in +mips-sgi-irix6*) + ;; +*-*-solaris*) + ;; +*) + rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + + 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 + { { echo "$as_me:$LINENO: error: Can't find X includes. Please check your installation and add the correct paths!" >&5 +echo "$as_me: error: Can't find X includes. Please check your installation and add the correct paths!" >&2;} + { (exit 1); exit 1; }; } +fi + +if test "$kde_x_libraries" = NO; then + { { echo "$as_me:$LINENO: error: Can't find X libraries. Please check your installation and add the correct paths!" >&5 +echo "$as_me: error: Can't find X libraries. Please check your installation and add the correct paths!" >&2;} + { (exit 1); exit 1; }; } +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" + +fi + +eval "$kde_cv_have_x" + +if test "$have_x" != yes; then + { echo "$as_me:$LINENO: result: $have_x" >&5 +echo "${ECHO_T}$have_x" >&6; } + no_x=yes +else + { echo "$as_me:$LINENO: result: libraries $kde_x_libraries, headers $kde_x_includes" >&5 +echo "${ECHO_T}libraries $kde_x_libraries, headers $kde_x_includes" >&6; } +fi + +if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then + X_INCLUDES="" + x_includes="."; 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"; 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. +{ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 +echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ICE_IceConnectionNumber=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ICE_IceConnectionNumber=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then + LIBSM="-lSM -lICE" +fi + +LDFLAGS="$ac_save_LDFLAGS" + +LIB_X11='-lX11 $(LIBSOCKET)' + +{ echo "$as_me:$LINENO: checking for libXext" >&5 +echo $ECHO_N "checking for libXext... $ECHO_C" >&6; } +if test "${kde_cv_have_libXext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +kde_ldflags_safe="$LDFLAGS" +kde_libs_safe="$LIBS" + +LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS" +LIBS="-lXext -lX11 $LIBSOCKET" + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef STDC_HEADERS +# include +#endif + +int +main () +{ + +printf("hello Xext\n"); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + kde_cv_have_libXext=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + kde_cv_have_libXext=no + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +LDFLAGS=$kde_ldflags_safe +LIBS=$kde_libs_safe + +fi + + +{ echo "$as_me:$LINENO: result: $kde_cv_have_libXext" >&5 +echo "${ECHO_T}$kde_cv_have_libXext" >&6; } + +if test "$kde_cv_have_libXext" = "no"; then + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } +fi + +LIB_XEXT="-lXext" +QTE_NORTTI="" + +elif test "$kde_use_qt_emb" = "yes"; then + 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 + 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 + + + + + + + + + + + + + + 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'` + { echo "$as_me:$LINENO: checking for pthread_create in $PTHREAD_LIBS" >&5 +echo $ECHO_N "checking for pthread_create in $PTHREAD_LIBS... $ECHO_C" >&6; } + + kde_save_LDFLAGS="$LDFLAGS" + kde_save_LIBS="$LIBS" + LDFLAGS="$LDFLAGS $all_libraries" + case $host_os in + aix*) LDFLAGS="-brtl $LDFLAGS" + test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS" + ;; + esac + as_ac_Lib=`echo "ac_cv_lib_$PTHREAD_LIBS''_pthread_create" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for pthread_create in -l$PTHREAD_LIBS" >&5 +echo $ECHO_N "checking for pthread_create in -l$PTHREAD_LIBS... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$PTHREAD_LIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + LIBPTHREAD="$PTHREAD_LIBS_save" +fi + + LDFLAGS="$kde_save_LDFLAGS" + LIBS="$kde_save_LIBS" + + PTHREAD_LIBS="$PTHREAD_LIBS_save" + fi + fi + + if test -z "$LIBPTHREAD"; then + { echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 +echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } +if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_pthread_pthread_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_pthread_pthread_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } +if test $ac_cv_lib_pthread_pthread_create = yes; then + LIBPTHREAD="-lpthread" +fi + + fi + + if test -z "$LIBPTHREAD" ; then + { echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 +echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } + kde_safe_libs=$LIBS + LIBS="$LIBS -lpthread" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +(void)pthread_create(0,0,0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + LIBPTHREAD="-lpthread" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$kde_safe_libs + fi + + if test "x$LIBPTHREAD" = "xPTHREAD" ; then + LIBPTHREAD="" + fi + + + + + USE_THREADS="" + if test -z "$LIBPTHREAD"; then + +{ echo "$as_me:$LINENO: checking whether $CXX supports -pthread" >&5 +echo $ECHO_N "checking whether $CXX supports -pthread... $ECHO_C" >&6; } +kde_cache=`echo pthread | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -pthread" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + USE_THREADS="-D_THREAD_SAFE -pthread" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + fi + + + + case $host_os in + solaris*) + +{ echo "$as_me:$LINENO: checking whether $CXX supports -mt" >&5 +echo $ECHO_N "checking whether $CXX supports -mt... $ECHO_C" >&6; } +kde_cache=`echo mt | sed 'y% .=/+-,%____p__%'` +if { as_var=kde_cv_prog_cxx_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -mt" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_prog_cxx_$kde_cache=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + USE_THREADS="-mt" +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + +fi + + 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 + + + + +{ echo "$as_me:$LINENO: checking for extra includes" >&5 +echo $ECHO_N "checking for extra includes... $ECHO_C" >&6; } + +# Check whether --with-extra-includes was given. +if test "${with_extra_includes+set}" = set; then + withval=$with_extra_includes; kde_use_extra_includes="$withval" +else + kde_use_extra_includes=NONE + +fi + +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 + + +{ echo "$as_me:$LINENO: result: $kde_use_extra_includes" >&5 +echo "${ECHO_T}$kde_use_extra_includes" >&6; } + +kde_extra_libs= +{ echo "$as_me:$LINENO: checking for extra libs" >&5 +echo $ECHO_N "checking for extra libs... $ECHO_C" >&6; } + +# Check whether --with-extra-libs was given. +if test "${with_extra_libs+set}" = set; then + withval=$with_extra_libs; kde_use_extra_libs=$withval +else + kde_use_extra_libs=NONE + +fi + +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 + + + +{ echo "$as_me:$LINENO: result: $kde_use_extra_libs" >&5 +echo "${ECHO_T}$kde_use_extra_libs" >&6; } + + + + +{ echo "$as_me:$LINENO: checking for libz" >&5 +echo $ECHO_N "checking for libz... $ECHO_C" >&6; } +if test "${ac_cv_lib_z+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +kde_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET" +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include + +int +main () +{ + + 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); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "ac_cv_lib_z='-lz'" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "ac_cv_lib_z=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" + +fi +if test ! "$ac_cv_lib_z" = no; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_LIBZ 1 +_ACEOF + + LIBZ="$ac_cv_lib_z" + { echo "$as_me:$LINENO: result: $ac_cv_lib_z" >&5 +echo "${ECHO_T}$ac_cv_lib_z" >&6; } +else + { { echo "$as_me:$LINENO: 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" >&5 +echo "$as_me: 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" >&2;} + { (exit 1); exit 1; }; } + LIBZ="" +fi + + + + + +{ echo "$as_me:$LINENO: checking for libpng" >&5 +echo $ECHO_N "checking for libpng... $ECHO_C" >&6; } +if test "${ac_cv_lib_png+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +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" + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + +int +main () +{ + + png_structp png_ptr = png_create_read_struct( /* image ptr */ + PNG_LIBPNG_VER_STRING, 0, 0, 0 ); + return( png_ptr != 0 ); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "ac_cv_lib_png='-lpng $LIBZ -lm'" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "ac_cv_lib_png=no" + +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" + +fi +if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPNG 1 +_ACEOF + + LIBPNG="$ac_cv_lib_png" + + { echo "$as_me:$LINENO: result: $ac_cv_lib_png" >&5 +echo "${ECHO_T}$ac_cv_lib_png" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + LIBPNG="" + +fi + + + +{ echo "$as_me:$LINENO: checking for libjpeg6b" >&5 +echo $ECHO_N "checking for libjpeg6b... $ECHO_C" >&6; } +if test "${ac_cv_lib_jpeg_6b+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg6b -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any gcc2 internal prototype to avoid an error. */ +struct jpeg_decompress_struct; +typedef struct jpeg_decompress_struct * j_decompress_ptr; +typedef int size_t; +#ifdef __cplusplus +extern "C" { +#endif + void jpeg_CreateDecompress(j_decompress_ptr cinfo, + int version, size_t structsize); +#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. */ + +int +main () +{ +jpeg_CreateDecompress(0L, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "ac_cv_lib_jpeg_6b=-ljpeg6b" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "ac_cv_lib_jpeg_6b=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" + +fi + + +if eval "test ! \"`echo $ac_cv_lib_jpeg_6b`\" = no"; then + LIBJPEG="$ac_cv_lib_jpeg_6b" + { echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_6b" >&5 +echo "${ECHO_T}$ac_cv_lib_jpeg_6b" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + +{ echo "$as_me:$LINENO: checking for libjpeg" >&5 +echo $ECHO_N "checking for libjpeg... $ECHO_C" >&6; } +if test "${ac_cv_lib_jpeg_normal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any gcc2 internal prototype to avoid an error. */ +struct jpeg_decompress_struct; +typedef struct jpeg_decompress_struct * j_decompress_ptr; +typedef int size_t; +#ifdef __cplusplus +extern "C" { +#endif + void jpeg_CreateDecompress(j_decompress_ptr cinfo, + int version, size_t structsize); +#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. */ + +int +main () +{ +jpeg_CreateDecompress(0L, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "ac_cv_lib_jpeg_normal=-ljpeg" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "ac_cv_lib_jpeg_normal=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" + +fi + + +if eval "test ! \"`echo $ac_cv_lib_jpeg_normal`\" = no"; then + LIBJPEG="$ac_cv_lib_jpeg_normal" + { echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_normal" >&5 +echo "${ECHO_T}$ac_cv_lib_jpeg_normal" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + + LIBJPEG= + + +fi + + + +fi + + + +jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes" + +jpeg_incdir=NO +for i in $jpeg_incdirs; +do + for j in jpeglib.h; + do + echo "configure: 29727: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + jpeg_incdir=$i + break 2 + fi + done +done + +test "x$jpeg_incdir" = xNO && jpeg_incdir= + +if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_LIBJPEG 1 +_ACEOF + +else + if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then + { echo "$as_me:$LINENO: WARNING: +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. +" >&5 +echo "$as_me: WARNING: +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. +" >&2;} + else + { echo "$as_me:$LINENO: WARNING: libjpeg not found. disable JPEG support." >&5 +echo "$as_me: WARNING: libjpeg not found. disable JPEG support." >&2;} + fi + jpeg_incdir= + LIBJPEG= +fi + + + + + + + + { echo "$as_me:$LINENO: checking for perl" >&5 +echo $ECHO_N "checking for perl... $ECHO_C" >&6; } + if test -n "$PERL"; then + kde_cv_path="$PERL"; + else + kde_cache=`echo perl | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$bindir $exec_prefix/bin $prefix/bin $dirs" + else dirs="$dirs $bindir $exec_prefix/bin $prefix/bin" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/perl"; then + if test -n "" + then + evalstr="$dir/perl 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/perl" + break + fi + else + kde_cv_path="$dir/perl" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: No Perl found in your $PATH. +We need perl to generate some code." >&5 +echo "$as_me: error: No Perl found in your $PATH. +We need perl to generate some code." >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + PERL=$kde_cv_path + + fi + + + + + + + + + + +# Check whether --enable-mt was given. +if test "${enable_mt+set}" = set; then + enableval=$enable_mt; kde_use_qt_mt=$enableval +else + + if test $kde_qtver = 3; then + kde_use_qt_mt=yes + else + kde_use_qt_mt=no + fi + + +fi + + +USING_QT_MT="" + + +KDE_MT_LDFLAGS= +KDE_MT_LIBS= +if test "x$kde_use_qt_mt" = "xyes"; then + + + + 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 + # Check whether --enable-threading was given. +if test "${enable_threading+set}" = set; then + enableval=$enable_threading; kde_use_threading=$enableval +else + kde_use_threading=$kde_check_threading_default +fi + + if test "x$kde_use_threading" = "xyes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + fi + + 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 + + + +kde_qt_was_given=yes + +if test -z "$LIBQT_GLOB"; then + if test "x$kde_use_qt_emb" = "xyes"; then + LIBQT_GLOB="libqte.*" + else + LIBQT_GLOB="libqt.*" + fi +fi + +if test -z "$LIBQT"; then + if test "x$kde_use_qt_emb" = "xyes"; then + qtlib="qte" + else + qtlib="qt" + fi + + kde_int_qt="-l$qtlib" +else + kde_int_qt="$LIBQT" + kde_lib_qt_set=yes +fi + +if test -z "$LIBQPE"; then + 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 + + +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 + + + + LIBQT="$LIBQT $LIBPNG $LIBJPEG" +fi + +if test $kde_qtver = 3; then + + LIBQT="$LIBQT $LIBDL" +fi + +{ echo "$as_me:$LINENO: checking for Qt" >&5 +echo $ECHO_N "checking for Qt... $ECHO_C" >&6; } + +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="" + +# Check whether --with-qt-dir was given. +if test "${with_qt_dir+set}" = set; then + withval=$with_qt_dir; ac_qt_includes="$withval"/include + ac_qt_libraries="$withval"/lib${kdelibsuff} + ac_qt_bindir="$withval"/bin + +fi + + + +# Check whether --with-qt-includes was given. +if test "${with_qt_includes+set}" = set; then + withval=$with_qt_includes; + ac_qt_includes="$withval" + +fi + + +kde_qt_libs_given=no + + +# Check whether --with-qt-libraries was given. +if test "${with_qt_libraries+set}" = set; then + withval=$with_qt_libraries; ac_qt_libraries="$withval" + kde_qt_libs_given=yes + +fi + + +if test "${ac_cv_have_qt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + #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 + + +qt_incdir=NO +for i in $qt_incdirs; +do + for j in $kde_qt_header; + do + echo "configure: 30030: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + qt_incdir=$i + break 2 + fi + done +done + +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" >&5 ; 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_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + +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" + + + +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 <&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest; then + rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_qt_libraries="NO" +fi +rm -f conftest* +CXXFLAGS="$ac_cxxflags_safe" +LDFLAGS="$ac_ldflags_safe" +LIBS="$ac_libs_safe" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +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 + + { { echo "$as_me:$LINENO: 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" >&5 +echo "$as_me: 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" >&2;} + { (exit 1); exit 1; }; } +else + have_qt="yes" +fi + +fi + + +eval "$ac_cv_have_qt" + +if test "$have_qt" != yes; then + { echo "$as_me:$LINENO: result: $have_qt" >&5 +echo "${ECHO_T}$have_qt" >&6; }; +else + ac_cv_have_qt="have_qt=yes \ + ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries" + { echo "$as_me:$LINENO: result: libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT" >&5 +echo "${ECHO_T}libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT" >&6; } + + qt_libraries="$ac_qt_libraries" + qt_includes="$ac_qt_includes" +fi + +if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then + + +{ echo "$as_me:$LINENO: checking if Qt compiles without flags" >&5 +echo $ECHO_N "checking if Qt compiles without flags... $ECHO_C" >&6; } +if test "${kde_cv_qt_direct+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH +ac_LIBRARY_PATH="$LIBRARY_PATH" +ac_cxxflags_safe="$CXXFLAGS" +ac_ldflags_safe="$LDFLAGS" +ac_libs_safe="$LIBS" + +CXXFLAGS="$CXXFLAGS -I$qt_includes" +LDFLAGS="$LDFLAGS $X_LDFLAGS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$LIBQT -lXext -lX11 $LIBSOCKET" +else +LIBS="$LIBQT $LIBSOCKET" +fi +LD_LIBRARY_PATH= +export LD_LIBRARY_PATH +LIBRARY_PATH= +export LIBRARY_PATH + + + +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 <&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest; then + kde_cv_qt_direct="yes" +else + kde_cv_qt_direct="no" + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi + + +if test "$kde_cv_qt_direct" = "yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + qt_libraries= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + +fi + +fi + + + + +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" + + + + + + 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 + + + { echo "$as_me:$LINENO: checking for moc" >&5 +echo $ECHO_N "checking for moc... $ECHO_C" >&6; } + if test -n "$MOC"; then + kde_cv_path="$MOC"; + else + kde_cache=`echo moc | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$qt_bindirs $dirs" + else dirs="$dirs $qt_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/moc"; then + if test -n "" + then + evalstr="$dir/moc 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/moc" + break + fi + else + kde_cv_path="$dir/moc" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: 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. +" >&5 +echo "$as_me: 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. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + MOC=$kde_cv_path + + fi + + if test -z "$UIC_NOT_NEEDED"; then + + { echo "$as_me:$LINENO: checking for uic" >&5 +echo $ECHO_N "checking for uic... $ECHO_C" >&6; } + if test -n "$UIC_PATH"; then + kde_cv_path="$UIC_PATH"; + else + kde_cache=`echo uic | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$qt_bindirs $dirs" + else dirs="$dirs $qt_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/uic"; then + if test -n "" + then + evalstr="$dir/uic 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/uic" + break + fi + else + kde_cv_path="$dir/uic" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + UIC_PATH="" + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + UIC_PATH=$kde_cv_path + + fi + + if test -z "$UIC_PATH" ; then + + { echo "$as_me:$LINENO: WARNING: 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. +" >&5 +echo "$as_me: WARNING: 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. +" >&2;} + + exit 1 + else + UIC=$UIC_PATH + + if test $kde_qtver = 3; then + + { echo "$as_me:$LINENO: checking whether uic supports -L " >&5 +echo $ECHO_N "checking whether uic supports -L ... $ECHO_C" >&6; } + kde_cache=`echo L | sed 'y% .=/+-%____p_%'` + if { as_var=kde_cv_prog_uic_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.ui < +EOT + ac_uic_testrun="$UIC_PATH -L /nonexistent conftest.ui >/dev/null" + if { (eval echo "$as_me:$LINENO: \"$ac_uic_testrun\"") >&5 + (eval $ac_uic_testrun) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + eval "kde_cv_prog_uic_$kde_cache=yes" + else + eval "kde_cv_prog_uic_$kde_cache=no" + fi + rm -f conftest* + +fi + + + if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + ac_uic_supports_libpath=yes + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + ac_uic_supports_libpath=no + fi + + + { echo "$as_me:$LINENO: checking whether uic supports -nounload " >&5 +echo $ECHO_N "checking whether uic supports -nounload ... $ECHO_C" >&6; } + kde_cache=`echo nounload | sed 'y% .=/+-%____p_%'` + if { as_var=kde_cv_prog_uic_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.ui < +EOT + ac_uic_testrun="$UIC_PATH -nounload conftest.ui >/dev/null" + if { (eval echo "$as_me:$LINENO: \"$ac_uic_testrun\"") >&5 + (eval $ac_uic_testrun) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + eval "kde_cv_prog_uic_$kde_cache=yes" + else + eval "kde_cv_prog_uic_$kde_cache=no" + fi + rm -f conftest* + +fi + + + if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + : + ac_uic_supports_nounload=yes + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + : + ac_uic_supports_nounload=no + fi + + + 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 + + + + + UIC_TR="i18n" + if test $kde_qtver = 3; then + UIC_TR="tr2i18n" + fi + + + + + +if test -n "$LIBJPEG"; then +{ echo "$as_me:$LINENO: checking if Qt needs $LIBJPEG" >&5 +echo $ECHO_N "checking if Qt needs $LIBJPEG... $ECHO_C" >&6; } +if test "${kde_cv_qt_jpeg+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +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" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ + + int argc; + char** argv; + QApplication app(argc, argv); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "kde_cv_qt_jpeg=no" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "kde_cv_qt_jpeg=yes" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +CXXFLAGS="$ac_save_CXXFLAGS" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi + +fi + + +if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + LIBJPEG_QT='$(LIBJPEG)' +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + LIBJPEG_QT= +fi + + + +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 + + + + + + + + + + + + + +{ echo "$as_me:$LINENO: checking for rpath" >&5 +echo $ECHO_N "checking for rpath... $ECHO_C" >&6; } +# Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval=$enable_rpath; USE_RPATH=$enableval +else + USE_RPATH=yes +fi + + +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 + 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 + + + +{ echo "$as_me:$LINENO: result: $USE_RPATH" >&5 +echo "${ECHO_T}$USE_RPATH" >&6; } + +{ echo "$as_me:$LINENO: checking for KDE" >&5 +echo $ECHO_N "checking for KDE... $ECHO_C" >&6; } + +if test "${prefix}" != NONE; then + kde_includes=${includedir} + +savex=$exec_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +tmp=$includedir +while ac_kde_includes=`eval echo "$tmp"`; test "x$ac_kde_includes" != "x$tmp"; do tmp=$ac_kde_includes; done +exec_prefix=$savex + + + kde_libraries=${libdir} + +savex=$exec_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +tmp=$libdir +while ac_kde_libraries=`eval echo "$tmp"`; test "x$ac_kde_libraries" != "x$tmp"; do tmp=$ac_kde_libraries; done +exec_prefix=$savex + + +else + ac_kde_includes= + ac_kde_libraries= + kde_libraries="" + kde_includes="" +fi + +if test "${ac_cv_have_kde+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + #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 ""; 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" + +kde_incdir=NO +for i in $kde_incdirs; +do + for j in $kde_check_header; + do + echo "configure: 30861: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + kde_incdir=$i + break 2 + fi + done +done + +ac_kde_includes="$kde_incdir" + +if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then + { { echo "$as_me:$LINENO: error: +in the prefix, you've chosen, are no KDE headers installed. This will fail. +So, check this please and use another prefix!" >&5 +echo "$as_me: error: +in the prefix, you've chosen, are no KDE headers installed. This will fail. +So, check this please and use another prefix!" >&2;} + { (exit 1); exit 1; }; } +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" + +kde_libdir=NO +for i in $kde_libdirs; +do + for j in $kde_check_lib; + do + echo "configure: 30891: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + kde_libdir=$i + break 2 + fi + done +done + +ac_kde_libraries="$kde_libdir" + +kde_widgetdir=NO + +kde_widgetdir=NO +for i in $kde_libdirs; +do + for j in "kde3/plugins/designer/kdewidgets.la"; + do + echo "configure: 30909: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + kde_widgetdir=$i + break 2 + fi + done +done + + +if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then +{ { echo "$as_me:$LINENO: error: +in the prefix, you've chosen, are no KDE libraries installed. This will fail. +So, check this please and use another prefix!" >&5 +echo "$as_me: error: +in the prefix, you've chosen, are no KDE libraries installed. This will fail. +So, check this please and use another prefix!" >&2;} + { (exit 1); exit 1; }; } +fi + +if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then +{ { echo "$as_me:$LINENO: error: +I can't find the designer plugins. These are required and should have been installed +by kdelibs" >&5 +echo "$as_me: error: +I can't find the designer plugins. These are required and should have been installed +by kdelibs" >&2;} + { (exit 1); exit 1; }; } +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 + ac_cv_have_kde="have_kde=no" + +fi + +fi + +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" + { echo "$as_me:$LINENO: result: will be installed in $ac_kde_prefix" >&5 +echo "${ECHO_T}will be installed in $ac_kde_prefix" >&6; } + else + ac_kde_exec_prefix="$exec_prefix" + { echo "$as_me:$LINENO: result: will be installed in $ac_kde_prefix and $ac_kde_exec_prefix" >&5 +echo "${ECHO_T}will be installed in $ac_kde_prefix and $ac_kde_exec_prefix" >&6; } + 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" + { echo "$as_me:$LINENO: result: libraries $ac_kde_libraries, headers $ac_kde_includes" >&5 +echo "${ECHO_T}libraries $ac_kde_libraries, headers $ac_kde_includes" >&6; } + + kde_libraries="$ac_kde_libraries" + kde_includes="$ac_kde_includes" +fi + + + +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 + + + + + + +all_libraries="$all_libraries $USER_LDFLAGS" +all_includes="$all_includes $USER_INCLUDES" + + + +if test -z ""; then + + + +if test x$ac_uic_supports_libpath = xyes; then + +{ echo "$as_me:$LINENO: checking if UIC has KDE plugins available" >&5 +echo $ECHO_N "checking if UIC has KDE plugins available... $ECHO_C" >&6; } +if test "${kde_cv_uic_plugins+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +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 { (eval echo "$as_me:$LINENO: \"$kde_line\"") >&5 + (eval $kde_line) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 + +fi + + +{ echo "$as_me:$LINENO: result: $kde_cv_uic_plugins" >&5 +echo "${ECHO_T}$kde_cv_uic_plugins" >&6; } +if test "$kde_cv_uic_plugins" != yes; then + { { echo "$as_me:$LINENO: 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. +" >&5 +echo "$as_me: 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. +" >&2;} + { (exit 1); exit 1; }; } +fi +fi + +fi + +ac_kde_libraries="$kde_libdir" + + + + + + # Check whether --enable-path-check was given. +if test "${enable_path_check+set}" = set; then + enableval=$enable_path_check; + if test "$enableval" = "no"; + then ac_use_path_checking="default" + else ac_use_path_checking="" + fi + +else + + if test "$kde_qtver" = 1; + then ac_use_path_checking="" + else ac_use_path_checking="default" + fi + + +fi + + + + + +{ echo "$as_me:$LINENO: checking for KDE paths" >&5 +echo $ECHO_N "checking for KDE paths... $ECHO_C" >&6; } +kde_result="" +kde_cached_paths=yes +if test "${kde_cv_all_paths+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + +if test "$ac_use_path_checking" = "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_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=defaults" + + +else + + if test $kde_qtver = 1; then + { echo "$as_me:$LINENO: result: compiling" >&5 +echo "${ECHO_T}compiling" >&6; } + + + { echo "$as_me:$LINENO: checking for KDE headers installed" >&5 +echo $ECHO_N "checking for KDE headers installed... $ECHO_C" >&6; } + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } + fi + CPPFLAGS=$ac_save_CPPFLAGS + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + 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 + +{ echo "$as_me:$LINENO: checking for KDE libraries installed" >&5 +echo $ECHO_N "checking for KDE libraries installed... $ECHO_C" >&6; } +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } +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_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=$kde_result" + + + + else + { { echo "$as_me:$LINENO: error: path checking not yet supported for KDE 2" >&5 +echo "$as_me: error: path checking not yet supported for KDE 2" >&2;} + { (exit 1); exit 1; }; } + fi + +fi + + kde_cached_paths=no + +fi + +eval "$kde_cv_all_paths" + 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 + +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= + +if test "$ac_use_path_checking" = "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_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=defaults" + + +else + + if test $kde_qtver = 1; then + { echo "$as_me:$LINENO: result: compiling" >&5 +echo "${ECHO_T}compiling" >&6; } + + + { echo "$as_me:$LINENO: checking for KDE headers installed" >&5 +echo $ECHO_N "checking for KDE headers installed... $ECHO_C" >&6; } + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + +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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } + fi + CPPFLAGS=$ac_save_CPPFLAGS + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + 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 + +{ echo "$as_me:$LINENO: checking for KDE libraries installed" >&5 +echo $ECHO_N "checking for KDE libraries installed... $ECHO_C" >&6; } +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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { { echo "$as_me:$LINENO: 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." >&5 +echo "$as_me: 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." >&2;} + { (exit 1); exit 1; }; } +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_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=$kde_result" + + + + else + { { echo "$as_me:$LINENO: error: path checking not yet supported for KDE 2" >&5 +echo "$as_me: error: path checking not yet supported for KDE 2" >&2;} + { (exit 1); exit 1; }; } + fi + +fi + + eval "$kde_cv_all_paths" + 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 + + kde_result="$kde_result (cache overridden)" +fi +if test "$kde_have_all_paths" = "no"; then + { { echo "$as_me:$LINENO: 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!) +" >&5 +echo "$as_me: 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!) +" >&2;} + { (exit 1); exit 1; }; } +else + rm -f conftest* + { echo "$as_me:$LINENO: result: $kde_result" >&5 +echo "${ECHO_T}$kde_result" >&6; } +fi + +bindir=$kde_bindir + + + +# Check whether --with-arts was given. +if test "${with_arts+set}" = set; then + withval=$with_arts; build_arts=$withval +else + build_arts=yes + +fi + + + +if test "$build_arts" '!=' "no"; then + include_ARTS_TRUE= + include_ARTS_FALSE='#' +else + include_ARTS_TRUE='#' + include_ARTS_FALSE= +fi + + if test "$build_arts" = "no"; then + +cat >>confdefs.h <<\_ACEOF +#define WITHOUT_ARTS 1 +_ACEOF + + fi + + + 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 + + kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs" + + { echo "$as_me:$LINENO: checking for dcopidl" >&5 +echo $ECHO_N "checking for dcopidl... $ECHO_C" >&6; } + if test -n "$DCOPIDL"; then + kde_cv_path="$DCOPIDL"; + else + kde_cache=`echo dcopidl | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/dcopidl"; then + if test -n "" + then + evalstr="$dir/dcopidl 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/dcopidl" + break + fi + else + kde_cv_path="$dir/dcopidl" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program dcopidl was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program dcopidl was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + DCOPIDL=$kde_cv_path + + fi + + + { echo "$as_me:$LINENO: checking for dcopidl2cpp" >&5 +echo $ECHO_N "checking for dcopidl2cpp... $ECHO_C" >&6; } + if test -n "$DCOPIDL2CPP"; then + kde_cv_path="$DCOPIDL2CPP"; + else + kde_cache=`echo dcopidl2cpp | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/dcopidl2cpp"; then + if test -n "" + then + evalstr="$dir/dcopidl2cpp 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/dcopidl2cpp" + break + fi + else + kde_cv_path="$dir/dcopidl2cpp" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program dcopidl2cpp was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program dcopidl2cpp was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + DCOPIDL2CPP=$kde_cv_path + + fi + + if test "$build_arts" '!=' "no"; then + + { echo "$as_me:$LINENO: checking for mcopidl" >&5 +echo $ECHO_N "checking for mcopidl... $ECHO_C" >&6; } + if test -n "$MCOPIDL"; then + kde_cv_path="$MCOPIDL"; + else + kde_cache=`echo mcopidl | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/mcopidl"; then + if test -n "" + then + evalstr="$dir/mcopidl 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/mcopidl" + break + fi + else + kde_cv_path="$dir/mcopidl" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program mcopidl was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +" >&5 +echo "$as_me: error: The important program mcopidl was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + MCOPIDL=$kde_cv_path + + fi + + + { echo "$as_me:$LINENO: checking for artsc-config" >&5 +echo $ECHO_N "checking for artsc-config... $ECHO_C" >&6; } + if test -n "$ARTSCCONFIG"; then + kde_cv_path="$ARTSCCONFIG"; + else + kde_cache=`echo artsc-config | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/artsc-config"; then + if test -n "" + then + evalstr="$dir/artsc-config 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/artsc-config" + break + fi + else + kde_cv_path="$dir/artsc-config" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program artsc-config was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +" >&5 +echo "$as_me: error: The important program artsc-config was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + ARTSCCONFIG=$kde_cv_path + + fi + + fi + + { echo "$as_me:$LINENO: checking for meinproc" >&5 +echo $ECHO_N "checking for meinproc... $ECHO_C" >&6; } + if test -n "$MEINPROC"; then + kde_cv_path="$MEINPROC"; + else + kde_cache=`echo meinproc | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/meinproc"; then + if test -n "" + then + evalstr="$dir/meinproc 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/meinproc" + break + fi + else + kde_cv_path="$dir/meinproc" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + MEINPROC=$kde_cv_path + + fi + + + 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 -o `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then + kde33ornewer= + fi + fi + fi + + if test -n "$kde32ornewer"; then + + { echo "$as_me:$LINENO: checking for kconfig_compiler" >&5 +echo $ECHO_N "checking for kconfig_compiler... $ECHO_C" >&6; } + if test -n "$KCONFIG_COMPILER"; then + kde_cv_path="$KCONFIG_COMPILER"; + else + kde_cache=`echo kconfig_compiler | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/kconfig_compiler"; then + if test -n "" + then + evalstr="$dir/kconfig_compiler 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/kconfig_compiler" + break + fi + else + kde_cv_path="$dir/kconfig_compiler" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program kconfig_compiler was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program kconfig_compiler was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + KCONFIG_COMPILER=$kde_cv_path + + fi + + + { echo "$as_me:$LINENO: checking for dcopidlng" >&5 +echo $ECHO_N "checking for dcopidlng... $ECHO_C" >&6; } + if test -n "$DCOPIDLNG"; then + kde_cv_path="$DCOPIDLNG"; + else + kde_cache=`echo dcopidlng | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/dcopidlng"; then + if test -n "" + then + evalstr="$dir/dcopidlng 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/dcopidlng" + break + fi + else + kde_cv_path="$dir/dcopidlng" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program dcopidlng was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program dcopidlng was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + DCOPIDLNG=$kde_cv_path + + fi + + fi + if test -n "$kde33ornewer"; then + + { echo "$as_me:$LINENO: checking for makekdewidgets" >&5 +echo $ECHO_N "checking for makekdewidgets... $ECHO_C" >&6; } + if test -n "$MAKEKDEWIDGETS"; then + kde_cv_path="$MAKEKDEWIDGETS"; + else + kde_cache=`echo makekdewidgets | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="$kde_default_bindirs $dirs" + else dirs="$dirs $kde_default_bindirs" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/makekdewidgets"; then + if test -n "" + then + evalstr="$dir/makekdewidgets 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/makekdewidgets" + break + fi + else + kde_cv_path="$dir/makekdewidgets" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + + { { echo "$as_me:$LINENO: error: The important program makekdewidgets was not found! +Please check whether you installed KDE correctly. +" >&5 +echo "$as_me: error: The important program makekdewidgets was not found! +Please check whether you installed KDE correctly. +" >&2;} + { (exit 1); exit 1; }; } + + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + MAKEKDEWIDGETS=$kde_cv_path + + fi + + + fi + + { echo "$as_me:$LINENO: checking for xmllint" >&5 +echo $ECHO_N "checking for xmllint... $ECHO_C" >&6; } + if test -n "$XMLLINT"; then + kde_cv_path="$XMLLINT"; + else + kde_cache=`echo xmllint | sed 'y%./+-%__p_%'` + + if { as_var=kde_cv_path_$kde_cache; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z ""; then dirs="${prefix}/bin ${exec_prefix}/bin $dirs" + else dirs="$dirs ${prefix}/bin ${exec_prefix}/bin" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/xmllint"; then + if test -n "" + then + evalstr="$dir/xmllint 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/xmllint" + break + fi + else + kde_cv_path="$dir/xmllint" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + +fi + + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + { echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6; } + XMLLINT="" + else + { echo "$as_me:$LINENO: result: $kde_cv_path" >&5 +echo "${ECHO_T}$kde_cv_path" >&6; } + XMLLINT=$kde_cv_path + + fi + + + 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" + +KDE_XSL_STYLESHEET=NO +for i in $kde_sharedirs; +do + for j in apps/ksgmltools2/customization/kde-chunk.xsl; + do + echo "configure: 32425: $i/$j" >&5 + if test -r "$i/$j"; then + echo "taking that" >&5 + KDE_XSL_STYLESHEET=$i + break 2 + fi + done +done + + 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)' + + + + fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +kdeinitdir='$(kde_moduledir)' + + + +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 + + + + + + +if test $build_arts = "yes"; then + LIB_ARTSKDE="-lartskde" + +fi + +if test $kde_qtver = 3; then + LIB_KDECORE="-lkdecore" + + LIB_KDEUI="-lkdeui" + + LIB_KIO="-lkio" + + LIB_KJS="-lkjs" + + LIB_SMB="-lsmb" + + LIB_KAB="-lkab" + + LIB_KABC="-lkabc" + + LIB_KHTML="-lkhtml" + + LIB_KSPELL="-lkspell" + + LIB_KPARTS="-lkparts" + + LIB_KDEPRINT="-lkdeprint" + + LIB_KUTILS="-lkutils" + + LIB_KDEPIM="-lkdepim" + + LIB_KIMPROXY="-lkimproxy" + + LIB_KNEWSTUFF="-lknewstuff" + + LIB_KDNSSD="-lkdnssd" + + LIB_KUNITTEST="-lkunittest" + +# these are for backward compatibility + LIB_KSYCOCA="-lkio" + + LIB_KFILE="-lkio" + +elif test $kde_qtver = 2; then + LIB_KDECORE="-lkdecore" + + LIB_KDEUI="-lkdeui" + + LIB_KIO="-lkio" + + LIB_KSYCOCA="-lksycoca" + + LIB_SMB="-lsmb" + + LIB_KFILE="-lkfile" + + LIB_KAB="-lkab" + + LIB_KHTML="-lkhtml" + + LIB_KSPELL="-lkspell" + + LIB_KPARTS="-lkparts" + + LIB_KDEPRINT="-lkdeprint" + +else + LIB_KDECORE="-lkdecore -lXext $(LIB_QT)" + + LIB_KDEUI="-lkdeui $(LIB_KDECORE)" + + LIB_KFM="-lkfm $(LIB_KDECORE)" + + LIB_KFILE="-lkfile $(LIB_KFM) $(LIB_KDEUI)" + + LIB_KAB="-lkab $(LIB_KIMGIO) $(LIB_KDECORE)" + +fi + + + +#MIN_CONFIG(3.0.0) + +{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # See if sys/param.h defines the BYTE_ORDER macro. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ + && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) + bogus endian macros +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # It does not; compile a test program. +if test "$cross_compiling" = yes; then + # try to guess the endianness by grepping values into an object file + ac_cv_c_bigendian=unknown + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; +void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } +short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; +short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; +void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +int +main () +{ + _ascii (); _ebcdic (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then + ac_cv_c_bigendian=yes +fi +if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } +case $ac_cv_c_bigendian in + yes) + +cat >>confdefs.h <<\_ACEOF +#define WORDS_BIGENDIAN 1 +_ACEOF + ;; + no) + ;; + *) + { { echo "$as_me:$LINENO: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +echo "$as_me: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; +esac + + +{ echo "$as_me:$LINENO: checking for MAXPATHLEN" >&5 +echo $ECHO_N "checking for MAXPATHLEN... $ECHO_C" >&6; } +if test "${ac_cv_maxpathlen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +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 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest.out; then + ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out` +else + ac_cv_maxpathlen=1024 +fi + +rm conftest.* + + +fi + +{ echo "$as_me:$LINENO: result: $ac_cv_maxpathlen" >&5 +echo "${ECHO_T}$ac_cv_maxpathlen" >&6; } + +cat >>confdefs.h <<_ACEOF +#define KDEMAXPATHLEN $ac_cv_maxpathlen +_ACEOF + + + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 +echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_largefile_CC=' -n32'; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_file_offset_bits=no; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_file_offset_bits=64; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 +echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -f conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 +echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_large_files=no; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_sys_large_files=1; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 +echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -f conftest* + fi +fi + +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 + + + + +OPTION=" --with-encryption=yes/no compile with encryption support (gpgme)" + + + + +# Check whether --with-gpgme-prefix was given. +if test "${with_gpgme_prefix+set}" = set; then + withval=$with_gpgme_prefix; gpgme_config_prefix="$withval" +else + gpgme_config_prefix="" +fi + + if test "x$gpgme_config_prefix" != x ; then + GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config" + fi + # Extract the first word of "gpgme-config", so it can be a program name with args. +set dummy gpgme-config; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_GPGME_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GPGME_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_GPGME_CONFIG="$GPGME_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GPGME_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GPGME_CONFIG" && ac_cv_path_GPGME_CONFIG="no" + ;; +esac +fi +GPGME_CONFIG=$ac_cv_path_GPGME_CONFIG +if test -n "$GPGME_CONFIG"; then + { echo "$as_me:$LINENO: result: $GPGME_CONFIG" >&5 +echo "${ECHO_T}$GPGME_CONFIG" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + + if test "$GPGME_CONFIG" != "no" ; then + gpgme_version=`$GPGME_CONFIG --version` + fi + gpgme_version_major=`echo $gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'` + gpgme_version_minor=`echo $gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'` + gpgme_version_micro=`echo $gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'` + + + + + + +# Check whether --with-encryption was given. +if test "${with_encryption+set}" = set; then + withval=$with_encryption; + if test "$withval" = "no"; then + ac_gpg= + basket_warning_gpgme=yes + elif test "$withval" = "yes"; then + ac_gpg=yes + else + ac_gpg=yes + fi + +else + ac_gpg=yes +fi + + + if test "$ac_gpg" != ""; then + tmp=1.0.0 + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + { echo "$as_me:$LINENO: checking for GPGME - version >= $min_gpgme_version" >&5 +echo $ECHO_N "checking for GPGME - version >= $min_gpgme_version... $ECHO_C" >&6; } + ok=no + if test "$GPGME_CONFIG" != "no" ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_CFLAGS=`$GPGME_CONFIG --cflags` + GPGME_LIBS=`$GPGME_CONFIG --libs` + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + ac_libgpgme=yes + else + GPGME_CFLAGS="" + GPGME_LIBS="" + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ac_libgpgme=no + fi + + + + +# Check whether --with-gpg-error-prefix was given. +if test "${with_gpg_error_prefix+set}" = set; then + withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval" +else + gpg_error_config_prefix="" +fi + + if test x$gpg_error_config_prefix != x ; then + if test x${GPG_ERROR_CONFIG+set} != xset ; then + GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config + fi + fi + + # Extract the first word of "gpg-error-config", so it can be a program name with args. +set dummy gpg-error-config; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_GPG_ERROR_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GPG_ERROR_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GPG_ERROR_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GPG_ERROR_CONFIG" && ac_cv_path_GPG_ERROR_CONFIG="no" + ;; +esac +fi +GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG +if test -n "$GPG_ERROR_CONFIG"; then + { echo "$as_me:$LINENO: result: $GPG_ERROR_CONFIG" >&5 +echo "${ECHO_T}$GPG_ERROR_CONFIG" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + min_gpg_error_version=1.0 + { echo "$as_me:$LINENO: checking for GPG Error - version >= $min_gpg_error_version" >&5 +echo $ECHO_N "checking for GPG Error - version >= $min_gpg_error_version... $ECHO_C" >&6; } + ok=no + if test "$GPG_ERROR_CONFIG" != "no" ; then + req_major=`echo $min_gpg_error_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'` + req_minor=`echo $min_gpg_error_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'` + gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version` + major=`echo $gpg_error_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` + minor=`echo $gpg_error_config_version | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'` + if test "$major" -gt "$req_major"; then + ok=yes + else + if test "$major" -eq "$req_major"; then + if test "$minor" -ge "$req_minor"; then + ok=yes + fi + fi + fi + fi + if test $ok = yes; then + GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags` + GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs` + { echo "$as_me:$LINENO: result: yes ($gpg_error_config_version)" >&5 +echo "${ECHO_T}yes ($gpg_error_config_version)" >&6; } + ac_libgpgerror=yes + else + GPG_ERROR_CFLAGS="" + GPG_ERROR_LIBS="" + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + ac_libgpgerror=no + fi + + + + + if test "$ac_libgpgme" != "no" -a "$ac_libgpgerror" != "no"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBGPGME 1 +_ACEOF + + ac_have_gpgme="yes" + + else + : + basket_warning_gpgme=yes + fi + fi + + +if test "$ac_have_gpgme" = "yes"; then + HAVE_LIBGPGME_TRUE= + HAVE_LIBGPGME_FALSE='#' +else + HAVE_LIBGPGME_TRUE='#' + HAVE_LIBGPGME_FALSE= +fi + + + + + + kde_safe_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $all_includes" + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + + + if test "${ac_cv_header_kontact_core_h+set}" = set; then + { echo "$as_me:$LINENO: checking for kontact/core.h" >&5 +echo $ECHO_N "checking for kontact/core.h... $ECHO_C" >&6; } +if test "${ac_cv_header_kontact_core_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_kontact_core_h" >&5 +echo "${ECHO_T}$ac_cv_header_kontact_core_h" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking kontact/core.h usability" >&5 +echo $ECHO_N "checking kontact/core.h usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking kontact/core.h presence" >&5 +echo $ECHO_N "checking kontact/core.h presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: kontact/core.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: kontact/core.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: kontact/core.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: kontact/core.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: kontact/core.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: kontact/core.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: kontact/core.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: kontact/core.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: kontact/core.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: kontact/core.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: kontact/core.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for kontact/core.h" >&5 +echo $ECHO_N "checking for kontact/core.h... $ECHO_C" >&6; } +if test "${ac_cv_header_kontact_core_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_kontact_core_h=$ac_header_preproc +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_kontact_core_h" >&5 +echo "${ECHO_T}$ac_cv_header_kontact_core_h" >&6; } + +fi +if test $ac_cv_header_kontact_core_h = yes; then + KONTACT_SUBDIR="yes" +else + KONTACT_SUBDIR="no" +fi + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + CPPFLAGS=$kde_safe_cppflags + + +if test "$KONTACT_SUBDIR" = "no"; then + basket_warning_kontact=yes + DO_NOT_COMPILE="$DO_NOT_COMPILE kontact_plugin" +fi + + + +DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin" +TOPSUBDIRS="" + +if test ! -s $srcdir/subdirs; then + 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 + { echo "$as_me:$LINENO: checking if $i should be compiled" >&5 +echo $ECHO_N "checking if $i should be compiled... $ECHO_C" >&6; } + 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 + { echo "$as_me:$LINENO: result: $install_it" >&5 +echo "${ECHO_T}$install_it" >&6; } + 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_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files backgrounds/Makefile" + +ac_config_files="$ac_config_files backgrounds-previews/Makefile" + +ac_config_files="$ac_config_files doc/Makefile" + +ac_config_files="$ac_config_files doc/en/Makefile" + +ac_config_files="$ac_config_files file-integration/Makefile" + +ac_config_files="$ac_config_files images/Makefile" + +ac_config_files="$ac_config_files kontact_plugin/Makefile" + +ac_config_files="$ac_config_files po/Makefile" + +ac_config_files="$ac_config_files src/Makefile" + +ac_config_files="$ac_config_files tags/Makefile" + +ac_config_files="$ac_config_files welcome/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${unsermake_enable_pch_TRUE}" && test -z "${unsermake_enable_pch_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"unsermake_enable_pch\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"unsermake_enable_pch\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${include_x11_TRUE}" && test -z "${include_x11_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"include_x11\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"include_x11\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${include_ARTS_TRUE}" && test -z "${include_ARTS_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"include_ARTS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"include_ARTS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_LIBGPGME_TRUE}" && test -z "${HAVE_LIBGPGME_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_LIBGPGME\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_LIBGPGME\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "backgrounds/Makefile") CONFIG_FILES="$CONFIG_FILES backgrounds/Makefile" ;; + "backgrounds-previews/Makefile") CONFIG_FILES="$CONFIG_FILES backgrounds-previews/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "doc/en/Makefile") CONFIG_FILES="$CONFIG_FILES doc/en/Makefile" ;; + "file-integration/Makefile") CONFIG_FILES="$CONFIG_FILES file-integration/Makefile" ;; + "images/Makefile") CONFIG_FILES="$CONFIG_FILES images/Makefile" ;; + "kontact_plugin/Makefile") CONFIG_FILES="$CONFIG_FILES kontact_plugin/Makefile" ;; + "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "tags/Makefile") CONFIG_FILES="$CONFIG_FILES tags/Makefile" ;; + "welcome/Makefile") CONFIG_FILES="$CONFIG_FILES welcome/Makefile" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +target!$target$ac_delim +target_cpu!$target_cpu$ac_delim +target_vendor!$target_vendor$ac_delim +target_os!$target_os$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +CYGPATH_W!$CYGPATH_W$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +ACLOCAL!$ACLOCAL$ac_delim +AUTOCONF!$AUTOCONF$ac_delim +AUTOMAKE!$AUTOMAKE$ac_delim +AUTOHEADER!$AUTOHEADER$ac_delim +MAKEINFO!$MAKEINFO$ac_delim +AMTAR!$AMTAR$ac_delim +install_sh!$install_sh$ac_delim +STRIP!$STRIP$ac_delim +INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim +AWK!$AWK$ac_delim +SET_MAKE!$SET_MAKE$ac_delim +am__leading_dot!$am__leading_dot$ac_delim +KDECONFIG!$KDECONFIG$ac_delim +kde_libs_prefix!$kde_libs_prefix$ac_delim +kde_libs_htmldir!$kde_libs_htmldir$ac_delim +CONF_FILES!$CONF_FILES$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +DEPDIR!$DEPDIR$ac_delim +am__include!$am__include$ac_delim +am__quote!$am__quote$ac_delim +AMDEP_TRUE!$AMDEP_TRUE$ac_delim +AMDEP_FALSE!$AMDEP_FALSE$ac_delim +AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim +CCDEPMODE!$CCDEPMODE$ac_delim +am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim +am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim +CPP!$CPP$ac_delim +CXX!$CXX$ac_delim +CXXFLAGS!$CXXFLAGS$ac_delim +ac_ct_CXX!$ac_ct_CXX$ac_delim +CXXDEPMODE!$CXXDEPMODE$ac_delim +am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim +am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim +WOVERLOADED_VIRTUAL!$WOVERLOADED_VIRTUAL$ac_delim +HAVE_GCC_VISIBILITY!$HAVE_GCC_VISIBILITY$ac_delim +unsermake_enable_pch_TRUE!$unsermake_enable_pch_TRUE$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +unsermake_enable_pch_FALSE!$unsermake_enable_pch_FALSE$ac_delim +USE_EXCEPTIONS!$USE_EXCEPTIONS$ac_delim +USE_RTTI!$USE_RTTI$ac_delim +CXXCPP!$CXXCPP$ac_delim +NOOPT_CXXFLAGS!$NOOPT_CXXFLAGS$ac_delim +NOOPT_CFLAGS!$NOOPT_CFLAGS$ac_delim +ENABLE_PERMISSIVE_FLAG!$ENABLE_PERMISSIVE_FLAG$ac_delim +LDFLAGS_AS_NEEDED!$LDFLAGS_AS_NEEDED$ac_delim +LDFLAGS_NEW_DTAGS!$LDFLAGS_NEW_DTAGS$ac_delim +KDE_USE_FINAL_TRUE!$KDE_USE_FINAL_TRUE$ac_delim +KDE_USE_FINAL_FALSE!$KDE_USE_FINAL_FALSE$ac_delim +KDE_USE_CLOSURE_TRUE!$KDE_USE_CLOSURE_TRUE$ac_delim +KDE_USE_CLOSURE_FALSE!$KDE_USE_CLOSURE_FALSE$ac_delim +KDE_NO_UNDEFINED!$KDE_NO_UNDEFINED$ac_delim +KDE_USE_NMCHECK_TRUE!$KDE_USE_NMCHECK_TRUE$ac_delim +KDE_USE_NMCHECK_FALSE!$KDE_USE_NMCHECK_FALSE$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +LN_S!$LN_S$ac_delim +ECHO!$ECHO$ac_delim +AR!$AR$ac_delim +RANLIB!$RANLIB$ac_delim +F77!$F77$ac_delim +FFLAGS!$FFLAGS$ac_delim +ac_ct_F77!$ac_ct_F77$ac_delim +LIBTOOL!$LIBTOOL$ac_delim +KDE_PLUGIN!$KDE_PLUGIN$ac_delim +MSGFMT!$MSGFMT$ac_delim +GMSGFMT!$GMSGFMT$ac_delim +XGETTEXT!$XGETTEXT$ac_delim +LIBUTIL!$LIBUTIL$ac_delim +LIBCOMPAT!$LIBCOMPAT$ac_delim +LIBCRYPT!$LIBCRYPT$ac_delim +LIBRESOLV!$LIBRESOLV$ac_delim +LIB_POLL!$LIB_POLL$ac_delim +FRAMEWORK_COREAUDIO!$FRAMEWORK_COREAUDIO$ac_delim +LIBSOCKET!$LIBSOCKET$ac_delim +X_EXTRA_LIBS!$X_EXTRA_LIBS$ac_delim +LIBUCB!$LIBUCB$ac_delim +LIBDL!$LIBDL$ac_delim +include_x11_TRUE!$include_x11_TRUE$ac_delim +include_x11_FALSE!$include_x11_FALSE$ac_delim +XMKMF!$XMKMF$ac_delim +X_PRE_LIBS!$X_PRE_LIBS$ac_delim +LIB_X11!$LIB_X11$ac_delim +LIB_XRENDER!$LIB_XRENDER$ac_delim +LIBSM!$LIBSM$ac_delim +X_INCLUDES!$X_INCLUDES$ac_delim +X_LDFLAGS!$X_LDFLAGS$ac_delim +x_includes!$x_includes$ac_delim +x_libraries!$x_libraries$ac_delim +QTE_NORTTI!$QTE_NORTTI$ac_delim +LIB_XEXT!$LIB_XEXT$ac_delim +LIBPTHREAD!$LIBPTHREAD$ac_delim +USE_THREADS!$USE_THREADS$ac_delim +KDE_MT_LDFLAGS!$KDE_MT_LDFLAGS$ac_delim +KDE_MT_LIBS!$KDE_MT_LIBS$ac_delim +USER_INCLUDES!$USER_INCLUDES$ac_delim +USER_LDFLAGS!$USER_LDFLAGS$ac_delim +LIBZ!$LIBZ$ac_delim +LIBPNG!$LIBPNG$ac_delim +LIBJPEG!$LIBJPEG$ac_delim +qt_libraries!$qt_libraries$ac_delim +qt_includes!$qt_includes$ac_delim +QT_INCLUDES!$QT_INCLUDES$ac_delim +QT_LDFLAGS!$QT_LDFLAGS$ac_delim +PERL!$PERL$ac_delim +MOC!$MOC$ac_delim +UIC!$UIC$ac_delim +UIC_TR!$UIC_TR$ac_delim +LIB_QT!$LIB_QT$ac_delim +LIB_QPE!$LIB_QPE$ac_delim +kde_qtver!$kde_qtver$ac_delim +KDE_EXTRA_RPATH!$KDE_EXTRA_RPATH$ac_delim +KDE_RPATH!$KDE_RPATH$ac_delim +X_RPATH!$X_RPATH$ac_delim +kde_libraries!$kde_libraries$ac_delim +kde_includes!$kde_includes$ac_delim +KDE_LDFLAGS!$KDE_LDFLAGS$ac_delim +KDE_INCLUDES!$KDE_INCLUDES$ac_delim +all_includes!$all_includes$ac_delim +all_libraries!$all_libraries$ac_delim +AUTODIRS!$AUTODIRS$ac_delim +include_ARTS_TRUE!$include_ARTS_TRUE$ac_delim +include_ARTS_FALSE!$include_ARTS_FALSE$ac_delim +MAKEKDEWIDGETS!$MAKEKDEWIDGETS$ac_delim +KCONFIG_COMPILER!$KCONFIG_COMPILER$ac_delim +KCFG_DEPENDENCIES!$KCFG_DEPENDENCIES$ac_delim +DCOPIDLNG!$DCOPIDLNG$ac_delim +DCOPIDL!$DCOPIDL$ac_delim +DCOPIDL2CPP!$DCOPIDL2CPP$ac_delim +DCOP_DEPENDENCIES!$DCOP_DEPENDENCIES$ac_delim +MCOPIDL!$MCOPIDL$ac_delim +ARTSCCONFIG!$ARTSCCONFIG$ac_delim +MEINPROC!$MEINPROC$ac_delim +KDE_XSL_STYLESHEET!$KDE_XSL_STYLESHEET$ac_delim +XMLLINT!$XMLLINT$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +kde_htmldir!$kde_htmldir$ac_delim +kde_appsdir!$kde_appsdir$ac_delim +kde_icondir!$kde_icondir$ac_delim +kde_sounddir!$kde_sounddir$ac_delim +kde_datadir!$kde_datadir$ac_delim +kde_locale!$kde_locale$ac_delim +kde_confdir!$kde_confdir$ac_delim +kde_kcfgdir!$kde_kcfgdir$ac_delim +kde_mimedir!$kde_mimedir$ac_delim +kde_wallpaperdir!$kde_wallpaperdir$ac_delim +kde_bindir!$kde_bindir$ac_delim +xdg_appsdir!$xdg_appsdir$ac_delim +xdg_menudir!$xdg_menudir$ac_delim +xdg_directorydir!$xdg_directorydir$ac_delim +kde_templatesdir!$kde_templatesdir$ac_delim +kde_servicesdir!$kde_servicesdir$ac_delim +kde_servicetypesdir!$kde_servicetypesdir$ac_delim +kde_moduledir!$kde_moduledir$ac_delim +kdeinitdir!$kdeinitdir$ac_delim +kde_styledir!$kde_styledir$ac_delim +kde_widgetdir!$kde_widgetdir$ac_delim +LIB_ARTSKDE!$LIB_ARTSKDE$ac_delim +LIB_KDECORE!$LIB_KDECORE$ac_delim +LIB_KDEUI!$LIB_KDEUI$ac_delim +LIB_KIO!$LIB_KIO$ac_delim +LIB_KJS!$LIB_KJS$ac_delim +LIB_SMB!$LIB_SMB$ac_delim +LIB_KAB!$LIB_KAB$ac_delim +LIB_KABC!$LIB_KABC$ac_delim +LIB_KHTML!$LIB_KHTML$ac_delim +LIB_KSPELL!$LIB_KSPELL$ac_delim +LIB_KPARTS!$LIB_KPARTS$ac_delim +LIB_KDEPRINT!$LIB_KDEPRINT$ac_delim +LIB_KUTILS!$LIB_KUTILS$ac_delim +LIB_KDEPIM!$LIB_KDEPIM$ac_delim +LIB_KIMPROXY!$LIB_KIMPROXY$ac_delim +LIB_KNEWSTUFF!$LIB_KNEWSTUFF$ac_delim +LIB_KDNSSD!$LIB_KDNSSD$ac_delim +LIB_KUNITTEST!$LIB_KUNITTEST$ac_delim +LIB_KSYCOCA!$LIB_KSYCOCA$ac_delim +LIB_KFILE!$LIB_KFILE$ac_delim +LIB_KFM!$LIB_KFM$ac_delim +GPGME_CONFIG!$GPGME_CONFIG$ac_delim +GPGME_CFLAGS!$GPGME_CFLAGS$ac_delim +GPGME_LIBS!$GPGME_LIBS$ac_delim +GPG_ERROR_CONFIG!$GPG_ERROR_CONFIG$ac_delim +GPG_ERROR_CFLAGS!$GPG_ERROR_CFLAGS$ac_delim +GPG_ERROR_LIBS!$GPG_ERROR_LIBS$ac_delim +HAVE_LIBGPGME_TRUE!$HAVE_LIBGPGME_TRUE$ac_delim +HAVE_LIBGPGME_FALSE!$HAVE_LIBGPGME_FALSE$ac_delim +TOPSUBDIRS!$TOPSUBDIRS$ac_delim +LIBOBJS!$LIBOBJS$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 53; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| . 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 +echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || 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" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # 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 -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //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_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +if test "x$with_fast_perl" = "xyes"; then + perl -i.bak $ac_aux_dir/conf.change.pl $CONFIG_STATUS \ + || mv $CONFIG_STATUS.bak $CONFIG_STATUS + rm -f $CONFIG_STATUS.bak +fi +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +# configure.in.bot +# This file is used for printing important messages at the end of configure + +echo "" + +if test x$basket_warning_gpgme = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires gpgme version 1.0 and" + echo " = libgpg-error version 1.0." + echo " = BasKet Note Pads will still be built, but there is no encryption." + echo " =" + echo " = Packages you need to install if you want encryption:" + echo " = Suse: gpgme-devel" + echo " = Kubuntu: libgpgme11-dev" + echo " = Fedora Core: gpgme-devel" + echo " = Mandriva: libgpgme11-devel" + echo " = Gentoo: app-crypt/gpgme" + echo " =" +fi + +if test x$basket_warning_kontact = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires kdepim." + echo " = BasKet Note Pads will still be built, but there is no" + echo " = Kontact integration." + echo " =" + echo " = Packages you need to install if you want Kontact integration:" + echo " = Suse: kdepim3-devel" + echo " = Kubuntu: kdepim-dev" + echo " = Fedora Core: kdepim-devel" + echo " = Mandriva: libkdepim2-common-devel & libkdepim2-kontact-devel" + echo " = Gentoo: kde-base/kontact" + echo " =" +fi +# 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.files b/configure.files new file mode 100644 index 0000000..97d9bce --- /dev/null +++ b/configure.files @@ -0,0 +1,3 @@ +./admin/configure.in.min +configure.in.in +configure.in.bot diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..1208fd9 --- /dev/null +++ b/configure.in @@ -0,0 +1,217 @@ +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(basket, '1.0.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.0.0) +AC_PATH_KDE +dnl ======================================================= +dnl FILE: configure.in.in +dnl ======================================================= + +#MIN_CONFIG(3.0.0) + +dnl PACKAGE set before +AC_C_BIGENDIAN +AC_CHECK_KDEMAXPATHLEN + +KDE_CHECK_LARGEFILE + +dnl ----------------------------------------------------------------- +dnl AC_LIB_GPGME([ACTION-IF-TRUE], [ACTION-IF-FALSE]) +dnl ----------------------------------------------------------------- + +OPTION=" --with-encryption=yes/no compile with encryption support (gpgme)" + +AC_DEFUN([AC_ENCRYPTION], [ + AH_TEMPLATE([HAVE_LIBGPGME], [Define if libgpgme is available]) + + AC_ARG_WITH(encryption, [$OPTION], [ + if test "$withval" = "no"; then + ac_gpg= + $2 + elif test "$withval" = "yes"; then + ac_gpg=yes + else + ac_gpg=yes + fi + ],[ac_gpg=yes]) + + if test "$ac_gpg" != ""; then + AM_PATH_GPGME(1.0.0, ac_libgpgme=yes, ac_libgpgme=no) + AM_PATH_GPG_ERROR(1.0, ac_libgpgerror=yes, ac_libgpgerror=no) + + if test "$ac_libgpgme" != "no" -a "$ac_libgpgerror" != "no"; then + AC_DEFINE([HAVE_LIBGPGME]) + ac_have_gpgme="yes" + $1 + else + : + $2 + fi + fi + AM_CONDITIONAL(HAVE_LIBGPGME, test "$ac_have_gpgme" = "yes") +]) + +AC_ENCRYPTION([], [basket_warning_gpgme=yes]) + +KDE_CHECK_HEADER(kontact/core.h, [KONTACT_SUBDIR="yes"], [KONTACT_SUBDIR="no"]) + +if test "$KONTACT_SUBDIR" = "no"; then + basket_warning_kontact=yes + DO_NOT_COMPILE="$DO_NOT_COMPILE kontact_plugin" +fi + +KDE_CREATE_SUBDIRSLIST +AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ backgrounds/Makefile ]) +AC_CONFIG_FILES([ backgrounds-previews/Makefile ]) +AC_CONFIG_FILES([ doc/Makefile ]) +AC_CONFIG_FILES([ doc/en/Makefile ]) +AC_CONFIG_FILES([ file-integration/Makefile ]) +AC_CONFIG_FILES([ images/Makefile ]) +AC_CONFIG_FILES([ kontact_plugin/Makefile ]) +AC_CONFIG_FILES([ po/Makefile ]) +AC_CONFIG_FILES([ src/Makefile ]) +AC_CONFIG_FILES([ tags/Makefile ]) +AC_CONFIG_FILES([ welcome/Makefile ]) +AC_OUTPUT +# configure.in.bot +# This file is used for printing important messages at the end of configure + +echo "" + +if test x$basket_warning_gpgme = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires gpgme version 1.0 and" + echo " = libgpg-error version 1.0." + echo " = BasKet Note Pads will still be built, but there is no encryption." + echo " =" + echo " = Packages you need to install if you want encryption:" + echo " = Suse: gpgme-devel" + echo " = Kubuntu: libgpgme11-dev" + echo " = Fedora Core: gpgme-devel" + echo " = Mandriva: libgpgme11-devel" + echo " = Gentoo: app-crypt/gpgme" + echo " =" +fi + +if test x$basket_warning_kontact = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires kdepim." + echo " = BasKet Note Pads will still be built, but there is no" + echo " = Kontact integration." + echo " =" + echo " = Packages you need to install if you want Kontact integration:" + echo " = Suse: kdepim3-devel" + echo " = Kubuntu: kdepim-dev" + echo " = Fedora Core: kdepim-devel" + echo " = Mandriva: libkdepim2-common-devel & libkdepim2-kontact-devel" + echo " = Gentoo: kde-base/kontact" + echo " =" +fi +# 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.bot b/configure.in.bot new file mode 100644 index 0000000..4c5b7a9 --- /dev/null +++ b/configure.in.bot @@ -0,0 +1,40 @@ +# configure.in.bot +# This file is used for printing important messages at the end of configure + +echo "" + +if test x$basket_warning_gpgme = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires gpgme version 1.0 and" + echo " = libgpg-error version 1.0." + echo " = BasKet Note Pads will still be built, but there is no encryption." + echo " =" + echo " = Packages you need to install if you want encryption:" + echo " = Suse: gpgme-devel" + echo " = Kubuntu: libgpgme11-dev" + echo " = Fedora Core: gpgme-devel" + echo " = Mandriva: libgpgme11-devel" + echo " = Gentoo: app-crypt/gpgme" + echo " =" +fi + +if test x$basket_warning_kontact = xyes; then + echo " ====================================" + echo " === BasKet Note Pads - WARNING ===================================" + echo " ====================================" + echo " =" + echo " = BasKet Note Pads requires kdepim." + echo " = BasKet Note Pads will still be built, but there is no" + echo " = Kontact integration." + echo " =" + echo " = Packages you need to install if you want Kontact integration:" + echo " = Suse: kdepim3-devel" + echo " = Kubuntu: kdepim-dev" + echo " = Fedora Core: kdepim-devel" + echo " = Mandriva: libkdepim2-common-devel & libkdepim2-kontact-devel" + echo " = Gentoo: kde-base/kontact" + echo " =" +fi diff --git a/configure.in.in b/configure.in.in new file mode 100644 index 0000000..022726b --- /dev/null +++ b/configure.in.in @@ -0,0 +1,53 @@ +#MIN_CONFIG(3.0.0) + +AM_INIT_AUTOMAKE(basket, '1.0.3.1') +AC_C_BIGENDIAN +AC_CHECK_KDEMAXPATHLEN + +KDE_CHECK_LARGEFILE + +dnl ----------------------------------------------------------------- +dnl AC_LIB_GPGME([ACTION-IF-TRUE], [ACTION-IF-FALSE]) +dnl ----------------------------------------------------------------- + +OPTION=" --with-encryption=yes/no compile with encryption support (gpgme)" + +AC_DEFUN([AC_ENCRYPTION], [ + AH_TEMPLATE([HAVE_LIBGPGME], [Define if libgpgme is available]) + + AC_ARG_WITH(encryption, [$OPTION], [ + if test "$withval" = "no"; then + ac_gpg= + $2 + elif test "$withval" = "yes"; then + ac_gpg=yes + else + ac_gpg=yes + fi + ],[ac_gpg=yes]) + + if test "$ac_gpg" != ""; then + AM_PATH_GPGME(1.0.0, ac_libgpgme=yes, ac_libgpgme=no) + AM_PATH_GPG_ERROR(1.0, ac_libgpgerror=yes, ac_libgpgerror=no) + + if test "$ac_libgpgme" != "no" -a "$ac_libgpgerror" != "no"; then + AC_DEFINE([HAVE_LIBGPGME]) + ac_have_gpgme="yes" + $1 + else + : + $2 + fi + fi + AM_CONDITIONAL(HAVE_LIBGPGME, test "$ac_have_gpgme" = "yes") +]) + +AC_ENCRYPTION([], [basket_warning_gpgme=yes]) + +KDE_CHECK_HEADER(kontact/core.h, [KONTACT_SUBDIR="yes"], [KONTACT_SUBDIR="no"]) + +if test "$KONTACT_SUBDIR" = "no"; then + basket_warning_kontact=yes + DO_NOT_COMPILE="$DO_NOT_COMPILE kontact_plugin" +fi + diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..57a0b81 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,6 @@ +# the SUBDIRS is filled automatically by am_edit. If files are +# in this directory they are installed into the english dir + +KDE_LANG = en +KDE_DOCS = basket +SUBDIRS = $(AUTODIRS) diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am new file mode 100644 index 0000000..6a0bb94 --- /dev/null +++ b/doc/en/Makefile.am @@ -0,0 +1,2 @@ +KDE_DOCS = basket +KDE_LANG = en diff --git a/doc/en/index.docbook b/doc/en/index.docbook new file mode 100644 index 0000000..177e6a2 --- /dev/null +++ b/doc/en/index.docbook @@ -0,0 +1,99 @@ + + + BasKet"> + + +]> + + + + + + The BasKet Handbook + + + Sébastien + Laoût +
slaout@linux62.org
+
+
+ 01/18/2005 + 1.0.3.1 + + Taking care of your ideas. + + + KDE + BasKet + +
+ + + Introduction + &basket; is mainly an all-purpose notes taker, but a particular one: + + + + Installation + + + How to obtain &basket; + + + + + Requirements + + + + + Compilation and Installation + + Compiling BasKet is very easy. The following should do it: + + % ./configure + % make + % make install + + + + That should do it! Should you run into any problems, + please report them to the author + + + + + Using BasKet + + + + + Questions, Answers, and Tips + + + Frequently asked questions + + + Question 1 + + + The answer + + + + + +
+ diff --git a/file-integration/Makefile.am b/file-integration/Makefile.am new file mode 100644 index 0000000..f525b54 --- /dev/null +++ b/file-integration/Makefile.am @@ -0,0 +1,23 @@ +# MIME Types Information: +applicationmimedir = $(kde_mimedir)/application +applicationmime_DATA = x-basket-archive.desktop x-basket-template.desktop + +# Magic MIME Types Discovery: +magicdir = $(kde_confdir)/magic +magic_DATA = basket.magic + +# Thumbnail Creator: +INCLUDES = $(all_includes) +kde_module_LTLIBRARIES = basketthumbcreator.la +basketthumbcreator_la_SOURCES = basketthumbcreator.cpp +basketthumbcreator_la_LIBADD = $(LIB_KIO) +basketthumbcreator_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kde_services_DATA = basketthumbcreator.desktop + +# Icons: +KDE_ICON = AUTO +#kde_icon_KDEICON = \ +# cr128-mimetype-baskets.png cr16-mimetype-baskets.png cr22-mimetype-baskets.png \ +# cr32-mimetype-baskets.png cr48-mimetype-baskets.png cr64-mimetype-baskets.png \ +# cr128-mimetype-baskett.png cr16-mimetype-baskett.png cr22-mimetype-baskett.png \ +# cr32-mimetype-baskett.png cr48-mimetype-baskett.png cr64-mimetype-baskett.png diff --git a/file-integration/basket.magic b/file-integration/basket.magic new file mode 100644 index 0000000..bad0e39 --- /dev/null +++ b/file-integration/basket.magic @@ -0,0 +1,2 @@ +0 string BasKetNP:archive\n application/x-basket-archive +0 string BasKetNP:template\n application/x-basket-template diff --git a/file-integration/basketthumbcreator.cpp b/file-integration/basketthumbcreator.cpp new file mode 100644 index 0000000..afad656 --- /dev/null +++ b/file-integration/basketthumbcreator.cpp @@ -0,0 +1,117 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "basketthumbcreator.h" + +bool BasketThumbCreator::create(const QString &path, int /*width*/, int /*height*/, QImage &image) +{ + // Create the temporar folder: + KTempDir tempDir; + tempDir.setAutoDelete(true); + QString tempFolder = tempDir.name(); + QDir dir; + dir.mkdir(tempFolder); + const Q_ULONG BUFFER_SIZE = 1024; + + QFile file(path); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::Latin1); + QString line = stream.readLine(); + if (line != "BasKetNP:archive" && line != "BasKetNP:template") { + file.close(); + return false; + } + while (!stream.atEnd()) { + // Get Key/Value Pair From the Line to Read: + line = stream.readLine(); + int index = line.find(':'); + QString key; + QString value; + if (index >= 0) { + key = line.left(index); + value = line.right(line.length() - index - 1); + } else { + key = line; + value = ""; + } + if (key == "preview*") { + bool ok; + ulong size = value.toULong(&ok); + if (!ok) { + file.close(); + return false; + } + // Get the preview file: + QFile previewFile(tempFolder + "preview.png"); + if (previewFile.open(IO_WriteOnly)) { + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + while ((sizeRead = file.readBlock(buffer, QMIN(BUFFER_SIZE, size))) > 0) { + previewFile.writeBlock(buffer, sizeRead); + size -= sizeRead; + } + previewFile.close(); + delete buffer; + image = QImage(tempFolder + "preview.png"); + file.close(); + return true; + } + } else if (key.endsWith("*")) { + // We do not know what it is, but we should read the embedded-file in order to discard it: + bool ok; + ulong size = value.toULong(&ok); + if (!ok) { + file.close(); + return false; + } + // Get the archive file: + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + while ((sizeRead = file.readBlock(buffer, QMIN(BUFFER_SIZE, size))) > 0) { + size -= sizeRead; + } + delete buffer; + } + } + file.close(); + } + return false; +} + +ThumbCreator::Flags BasketThumbCreator::flags() const +{ + return (Flags) (DrawFrame | BlendIcon); +} + +extern "C" +{ + ThumbCreator *new_creator() + { + return new BasketThumbCreator(); + } +}; diff --git a/file-integration/basketthumbcreator.desktop b/file-integration/basketthumbcreator.desktop new file mode 100644 index 0000000..612e6cb --- /dev/null +++ b/file-integration/basketthumbcreator.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=Basket Archives & Templates +Name[de]=Korbarchiv und Korbvorlagen +Name[es]=Archivo de cestas y plantillas +Name[fr]=Archive de paniers et modèles +Name[it]=Archivi e modelli di canestri +Name[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨ãƒ†ãƒ³ãƒ—レート +Name[nb]=Kurvarkiv og kurvmaler +Name[nn]=Korgarkiv og korgmalar +Name[pt]=Arquivos e modelos de cestos +Name[ru]=Шаблоны и контейнеры Basket +Name[tr]=Basket ArÅŸivleri & Åžablonları +ServiceTypes=ThumbCreator +MimeTypes=application/x-basket-archive,application/x-basket-template +CacheThumbnail=true +X-KDE-Library=basketthumbcreator diff --git a/file-integration/basketthumbcreator.h b/file-integration/basketthumbcreator.h new file mode 100644 index 0000000..8a10cab --- /dev/null +++ b/file-integration/basketthumbcreator.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include + +class BasketThumbCreator : public ThumbCreator +{ + bool create(const QString &path, int width, int height, QImage &image); + Flags flags() const; +}; diff --git a/file-integration/cr128-mime-baskets.png b/file-integration/cr128-mime-baskets.png new file mode 100644 index 0000000..39df80a Binary files /dev/null and b/file-integration/cr128-mime-baskets.png differ diff --git a/file-integration/cr128-mime-baskett.png b/file-integration/cr128-mime-baskett.png new file mode 100644 index 0000000..80e6143 Binary files /dev/null and b/file-integration/cr128-mime-baskett.png differ diff --git a/file-integration/cr16-mime-baskets.png b/file-integration/cr16-mime-baskets.png new file mode 100644 index 0000000..222e4dc Binary files /dev/null and b/file-integration/cr16-mime-baskets.png differ diff --git a/file-integration/cr16-mime-baskett.png b/file-integration/cr16-mime-baskett.png new file mode 100644 index 0000000..053f39a Binary files /dev/null and b/file-integration/cr16-mime-baskett.png differ diff --git a/file-integration/cr22-mime-baskets.png b/file-integration/cr22-mime-baskets.png new file mode 100644 index 0000000..2f82d4e Binary files /dev/null and b/file-integration/cr22-mime-baskets.png differ diff --git a/file-integration/cr22-mime-baskett.png b/file-integration/cr22-mime-baskett.png new file mode 100644 index 0000000..50502c4 Binary files /dev/null and b/file-integration/cr22-mime-baskett.png differ diff --git a/file-integration/cr32-mime-baskets.png b/file-integration/cr32-mime-baskets.png new file mode 100644 index 0000000..06baf90 Binary files /dev/null and b/file-integration/cr32-mime-baskets.png differ diff --git a/file-integration/cr32-mime-baskett.png b/file-integration/cr32-mime-baskett.png new file mode 100644 index 0000000..ff1d499 Binary files /dev/null and b/file-integration/cr32-mime-baskett.png differ diff --git a/file-integration/cr48-mime-baskets.png b/file-integration/cr48-mime-baskets.png new file mode 100644 index 0000000..44bcac5 Binary files /dev/null and b/file-integration/cr48-mime-baskets.png differ diff --git a/file-integration/cr48-mime-baskett.png b/file-integration/cr48-mime-baskett.png new file mode 100644 index 0000000..bec312b Binary files /dev/null and b/file-integration/cr48-mime-baskett.png differ diff --git a/file-integration/cr64-mime-baskets.png b/file-integration/cr64-mime-baskets.png new file mode 100644 index 0000000..7110777 Binary files /dev/null and b/file-integration/cr64-mime-baskets.png differ diff --git a/file-integration/cr64-mime-baskett.png b/file-integration/cr64-mime-baskett.png new file mode 100644 index 0000000..7ec455b Binary files /dev/null and b/file-integration/cr64-mime-baskett.png differ diff --git a/file-integration/x-basket-archive.desktop b/file-integration/x-basket-archive.desktop new file mode 100644 index 0000000..7c2992d --- /dev/null +++ b/file-integration/x-basket-archive.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Encoding=UTF-8 +MimeType=application/x-basket-archive +Type=MimeType +Comment=Basket Archive +Comment[de]=Korbarchiv +Comment[es]=Archivo de cestas +Comment[fr]=Archive de paniers +Comment[it]=Archivio di canestri +Comment[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ– +Comment[nb]=Kurvarkiv +Comment[nn]=Korgarkiv +Comment[pt]=Ficheiro de cestos +Comment[ru]=Контейнер Basket +Comment[tr]=Basket ArÅŸivi +Icon=baskets +Patterns=*.baskets diff --git a/file-integration/x-basket-template.desktop b/file-integration/x-basket-template.desktop new file mode 100644 index 0000000..413d231 --- /dev/null +++ b/file-integration/x-basket-template.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Encoding=UTF-8 +MimeType=application/x-basket-template +Type=MimeType +Comment=Basket Template +Comment[de]=Korbvorlage +Comment[es]=Plantilla de cesta +Comment[fr]=Modèle de panier +Comment[it]=Modello di canestri +Comment[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆãƒ†ãƒ³ãƒ—レート +Comment[nb]=Kurvmal +Comment[nn]=Korgmal +Comment[pt]=Modelo de cesto +Comment[ru]=Шаблон корзины +Comment[tr]=Basket Åžabolonu +Icon=baskett +Patterns=*.baskett diff --git a/images/Makefile.am b/images/Makefile.am new file mode 100644 index 0000000..c03cb7a --- /dev/null +++ b/images/Makefile.am @@ -0,0 +1,4 @@ +imagesdir = $(kde_datadir)/basket/images +images_DATA = insertion_help.png \ + tag_export_help.png \ + tag_export_on_every_lines_help.png diff --git a/images/insertion_help.png b/images/insertion_help.png new file mode 100644 index 0000000..3591b50 Binary files /dev/null and b/images/insertion_help.png differ diff --git a/images/tag_export_help.png b/images/tag_export_help.png new file mode 100644 index 0000000..50eee68 Binary files /dev/null and b/images/tag_export_help.png differ diff --git a/images/tag_export_on_every_lines_help.png b/images/tag_export_on_every_lines_help.png new file mode 100644 index 0000000..9a183aa Binary files /dev/null and b/images/tag_export_on_every_lines_help.png differ diff --git a/installer b/installer new file mode 100755 index 0000000..14626a4 --- /dev/null +++ b/installer @@ -0,0 +1,233 @@ +#!/bin/bash + +function error +{ + echo "" + echo " ======================================================================== " + echo " (( An Error has Been Encountered ))" + echo " ======================================================================== " + echo "" + echo "" + echo " In the most cases, some libraries are missing or cannot be found." + echo " Think to install the *-dev or *-devel packages of your distribution." + echo " For example, if libmng cannot be found," + echo " please check if libmng AND libmng-devel packages are installed on your system." + echo " See the reported errors to know which librarie need to be installed." + echo "" + echo $'\a' # Beep to avert user of the error + exit 1 +} + +##echo " (( An error has been encountered ))" +##echo " ((654321 987654321 987654321 98765432 23456789 123456789 123456789 123456))" +##echo" ((654321 987654321 987654321 98765432 23456789 123456789 123456789 123456))" + +clear +echo "" +echo " ======================================================================== " +echo " (( BasKet Note Pads Quick Installer ))" +echo " ======================================================================== " +echo "" +echo "" +echo " Welcome to the BasKet Note Pads installer assistant." +echo " It will configure, build and install BasKet Note Pads." +echo "" +echo "" +echo " What do you want to do?" +echo "" +echo " 1/ Install BasKet Note Pads system wide (you will need the root password)" +echo " 2/ Install BasKet Note Pads in your user folder" +#echo " 3/ Uninstall BasKet Note Pads (you should not: it is so fantastic ;-) )" +echo "" + +echo -n "Your choice (default is 1): " +read -n 1 WHAT_TO_DO +echo "" + +if [ "_$WHAT_TO_DO" == "_2" ]; then + SYS_WIDE=0 + WHAT_TO_DO=2 # To transform it from string to int +else +# if [ $WHAT_TO_DO == 3 ]; then +# SYS_WIDE=1 +# else # [ WHAT_TO_DO == 1 ] or default + SYS_WIDE=1 + WHAT_TO_DO=1 # If user entered another number than those he should +# fi +fi + +if [ $SYS_WIDE == 0 ]; then + prefix=`kde-config --localprefix --expandvars` +else + prefix=`kde-config --prefix --expandvars` +fi + +# Uninstall of BasKet: +if [ $WHAT_TO_DO == 3 ]; then + # Search installed basket: + prefix=`kde-config --localprefix --expandvars` # First loacally + if [ -f $prefix/bin/basket ]; then + SYS_WIDE=0 + else + prefix=`kde-config --prefix --expandvars` # And then system wide + if [ -f $prefix/bin/basket ]; then + SYS_WIDE=1 + else + echo "BasKet Note Pads does not seem to be installed." + exit 1 + fi + fi + # TODO: Also definitively remove your baskets? + # At this stage, SYS_WIDE and prefix are set and uninstall can begin: + if [ $SYS_WIDE == 1 ]; then + su + make uninstall || ./configure --prefix=$prefix && make uninstall + logout + else + make uninstall || ./configure --prefix=$prefix && make uninstall + fi + exit 0 +fi + +appVersion=$(cat basket.spec | grep "%define version " | cut -d " " -f 3) +isDevel=$(echo "$appVersion" | grep -i -E "(alpha|beta|pre|rc|svn)") + +clear +echo "" +echo " ======================================================================== " +echo " (( BasKet Note Pads Quick Installer ))" +echo " ======================================================================== " +echo "" +echo "" +echo "" +echo "" +echo " If you do not know what they are, you can ignore errors or warnings." +echo "" +echo " The process can take several minutes." +echo " A beep will notify you when it will be done." +echo " Press ENTER to start." +echo "" +echo "" + +read -s -n 1 # read 1 character without echo, ended by ENTER + +if [ ! -e configure ]; then + clear + echo "" + echo " ======================================================================== " + echo " (( Preparation from SVN ))" + echo " ======================================================================== " + echo "" + echo "" + + echo "make -f Makefile.cvs" + make -f Makefile.cvs || error +fi + +clear +echo "" +echo " ======================================================================== " +echo " (( Step 1 / 3 : Configuration ))" +echo " ======================================================================== " +echo "" +echo "" + +if [ "_$isDevel" == "_" ]; then + echo "./configure --prefix=$prefix" + ./configure --prefix=$prefix || error +else + echo "./configure --enable-debug=full --prefix=$prefix" + ./configure --enable-debug=full --prefix=$prefix || error +fi + +clear +echo "" +echo " ======================================================================== " +echo " (( Step 2 / 3 : Compilation ))" +echo " ======================================================================== " +echo "" +echo "" + +echo "make" +make || error + +clear +echo "" +echo " ======================================================================== " +echo " (( Step 3 / 3 : Installation ))" +echo " ======================================================================== " +echo "" +echo "" +echo " The application has successfuly been compiled." +echo "" +echo "" + +echo $'\a' # Beep to avert user the configuration/compilation is ended and he must act to enter the password + +if [ "_$SYS_WIDE" == "_n" ]; then + # First make the bin folder to not copy basket file to bin file if bin/ doesn't exist + mkdir $prefix/bin + make install +else + echo " Please now enter the root password in order to install " + echo " BasKet Note Pads on the system." + echo "" + sudo make install || exit 1 + echo "" + echo "" +fi + +clear +echo "" +echo " ======================================================================== " +echo " (( End of BasKet Note Pads Installation ))" +echo " ======================================================================== " +echo "" +echo "" +echo " Do you want to run BasKet Note Pads now?" +echo " If an older version is currently running it will be exited before." +echo "" +echo " Notice that you willn't have to exit BasKet : it will be restored each time" +echo " you log in to KDE." +echo "" +echo "" + +echo -n "Start or restart BasKet Note Pads? [y/n] (default is y): " +read -n 1 RESTART +if [ "_$RESTART" != "_" ]; then # If pressed Enter, a new line was already print + echo "" +fi + +if [ "_$RESTART" != "_n" ]; then + # Get the pid of the process basket, if currently running + pid=`ps aux | awk '$11 == "basket" { print $2 }'` + if [ "_$pid" == "_" ]; then + dummy=0 + else + kill -s SIGTERM $pid + fi + + if [ "_$SYS_WIDE" == "_n" ]; then + echo "$prefix/bin/basket" + $prefix/bin/basket + else + echo "basket" + basket + fi +fi + +clear +echo "" +echo " ======================================================================== " +echo " (( Congratulation: BasKet Note Pads is now Installed onto your System ))" +echo " ======================================================================== " +echo "" +echo "" +echo " In the future, if you want to uninstall BasKet Note Pads, you will have to" +if [ "_$SYS_WIDE" == "_n" ]; then + echo " enter the command make uninstall in this folder." +else + echo " enter the command su -c 'make uninstall' in this folder." +fi +echo "" +echo "" diff --git a/kontact_plugin/Makefile.am b/kontact_plugin/Makefile.am new file mode 100644 index 0000000..1a63eea --- /dev/null +++ b/kontact_plugin/Makefile.am @@ -0,0 +1,18 @@ +INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src -I$(top_srcdir) $(all_includes) + +kde_module_LTLIBRARIES = libkontact_basket.la +libkontact_basket_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) +libkontact_basket_la_LIBADD = -lkpinterfaces -lDCOP -lqt-mt -lkdecore -lkdeui + +noinst_HEADERS = basket_plugin.h uniqueapphandler.h +libkontact_basket_la_SOURCES = basket_plugin.cpp uniqueapphandler.cpp basketdcopiface.stub + +METASOURCES = AUTO + +basketdcopiface_DIR = $(top_srcdir)/src + +servicedir = $(kde_servicesdir)/kontact +service_DATA = basket.desktop basket_v4.desktop + +basketsetdlgdir = $(kde_datadir)/kontact/ksettingsdialog +basketsetdlg_DATA = kontact_basketplugin.setdlg diff --git a/kontact_plugin/basket.desktop b/kontact_plugin/basket.desktop new file mode 100644 index 0000000..67cb657 --- /dev/null +++ b/kontact_plugin/basket.desktop @@ -0,0 +1,42 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Icon=basket +ServiceTypes=Kontact/Plugin,KPluginInfo + +X-KDE-Library=libkontact_basket +X-KDE-KontactPluginVersion=5 +X-KDE-KontactPartLibraryName=libbasketpart +X-KDE-KontactPartExecutableName=basket +X-KDE-KontactPartLoadOnStart=true +X-KDE-KontactPluginHasSummary=false + +X-KDE-PluginInfo-Website=http://basket.kde.org/ +X-KDE-PluginInfo-Name=kontact_basketplugin +X-KDE-PluginInfo-Version=1.0.3.1 +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +Comment=BasKet Note Pads plugin for Kontact +Comment[de]=Plugin BasKet Notizblätter für Kontact +Comment[es]=Complemento de los blocs de notas BasKet para Kontact +Comment[fr]=Module Blocs notes BasKet pour Kontact +Comment[it]=Plugin Blocco appunti BasKet per Kontact +Comment[ja]=BasKet メモパッド㮠Kontact çµ±åˆãƒ—ラグイン +Comment[nb]=Kurvnotat-tillegg for Kontakt +Comment[nn]=Korgnotat-tillegg for Kontakt +Comment[pt]=Plugin do Bloco de Notas BasKet para o Kontact +Comment[ru]=Модуль Ðльбом заметок Basket Ð´Ð»Ñ Kontact +Comment[tr]=Kontact için Basket Not Tutucu Eklentisi + +Name=Baskets +Name[de]=Körbe +Name[es]=Cestas +Name[fr]=Paniers +Name[it]=Canestri +Name[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆ +Name[nb]=Kurver +Name[nn]=Korger +Name[pt]=Cestos +Name[ru]=Корзины +Name[tr]=Sepetler diff --git a/kontact_plugin/basket_plugin.cpp b/kontact_plugin/basket_plugin.cpp new file mode 100644 index 0000000..ea92b33 --- /dev/null +++ b/kontact_plugin/basket_plugin.cpp @@ -0,0 +1,107 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "basketdcopiface_stub.h" +#include "basket_plugin.h" +#include "basket_options.h" +#include "basket_part.h" + +typedef KGenericFactory BasketPluginFactory; +K_EXPORT_COMPONENT_FACTORY( libkontact_basket, + BasketPluginFactory( "kontact_basketplugin" ) ) + +BasketPlugin::BasketPlugin( Kontact::Core *core, const char *, const QStringList& ) + : Kontact::Plugin( core, core, "basket" ) +{ + setInstance( BasketPluginFactory::instance() ); + insertNewAction(new KAction( i18n("&New Basket..."), "basket", CTRL+SHIFT+Key_B, + this, SLOT(newBasket()), actionCollection(), "basket_new" )); + + m_uniqueAppWatcher = new Kontact::UniqueAppWatcher( + new Kontact::UniqueAppHandlerFactory(), this); +} + +BasketPlugin::~BasketPlugin() +{ +} + +KParts::ReadOnlyPart* BasketPlugin::createPart() +{ + BasketPart* part = static_cast(loadPart()); + if(!part) + return 0; + + m_stub = new BasketDcopInterface_stub(dcopClient(), "basket", "BasketIface"); + connect(part, SIGNAL(showPart()), this, SLOT(showPart())); + return part; +} + +void BasketPlugin::newBasket() +{ + (void) part(); // ensure part is loaded + Q_ASSERT(m_stub); + if (m_stub) { + kdDebug() << k_funcinfo << endl; + m_stub->newBasket(); + } +} + +void BasketPlugin::showPart() +{ + core()->selectPlugin(this); +} + +#if 0 +bool BasketPlugin::createDCOPInterface( const QString& serviceType ) +{ + kdDebug() << k_funcinfo << serviceType << endl; + return false; +} +#endif +bool BasketPlugin::isRunningStandalone() +{ + return m_uniqueAppWatcher->isRunningStandalone(); +} + +void BasketUniqueAppHandler::loadCommandLineOptions() +{ + KCmdLineArgs::addCmdLineOptions(basket_options); +} + +int BasketUniqueAppHandler::newInstance() +{ + (void)plugin()->part(); + DCOPRef kmail("basket", "BasketIface"); + DCOPReply reply = kmail.call("handleCommandLine", false); + if (reply.isValid()) { + bool handled = reply; + if ( !handled ) + return Kontact::UniqueAppHandler::newInstance(); + } + return 0; +} + +#include "basket_plugin.moc" diff --git a/kontact_plugin/basket_plugin.h b/kontact_plugin/basket_plugin.h new file mode 100644 index 0000000..f49cef1 --- /dev/null +++ b/kontact_plugin/basket_plugin.h @@ -0,0 +1,63 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#ifndef BASKET_PLUGIN_H +#define BASKET_PLUGIN_H + +#include +#include +#include +#include "uniqueapphandler.h" +#include "basketdcopiface_stub.h" + +class KAboutData; + +class BasketUniqueAppHandler : public Kontact::UniqueAppHandler +{ + public: + BasketUniqueAppHandler( Kontact::Plugin* plugin ) : Kontact::UniqueAppHandler( plugin ) {} + virtual void loadCommandLineOptions(); + virtual int newInstance(); +}; + +class BasketPlugin : public Kontact::Plugin +{ + Q_OBJECT + + public: + BasketPlugin( Kontact::Core *core, const char *name, + const QStringList & ); + ~BasketPlugin(); + + int weight() const { return 700; } + virtual bool isRunningStandalone(); + //virtual bool createDCOPInterface( const QString& serviceType ); + + public slots: + void newBasket(); + void showPart(); + + protected: + KParts::ReadOnlyPart *createPart(); + BasketDcopInterface_stub *m_stub; + Kontact::UniqueAppWatcher *m_uniqueAppWatcher; +}; + +#endif diff --git a/kontact_plugin/basket_v4.desktop b/kontact_plugin/basket_v4.desktop new file mode 100644 index 0000000..84954a5 --- /dev/null +++ b/kontact_plugin/basket_v4.desktop @@ -0,0 +1,43 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Icon=basket +ServiceTypes=Kontact/Plugin,KPluginInfo + +X-KDE-Library=libkontact_basket +X-KDE-KontactPluginVersion=4 +X-KDE-KontactPartLibraryName=libbasketpart +X-KDE-KontactPartExecutableName=basket +X-KDE-KontactPartLoadOnStart=true +X-KDE-KontactPluginHasSummary=false + +X-KDE-PluginInfo-Website=http://basket.kde.org/ +X-KDE-PluginInfo-Name=kontact_basketplugin +X-KDE-PluginInfo-Version=1.0.3.1 +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +Comment=BasKet Note Pads plugin for Kontact +Comment[de]=Plugin BasKet Notizblätter für Kontact +Comment[es]=Complemento de los blocs de notas BasKet para Kontact +Comment[fr]=Module Blocs notes BasKet pour Kontact +Comment[it]=Plugin Blocco appunti BasKet per Kontact +Comment[ja]=BasKet メモパッド㮠Kontact çµ±åˆãƒ—ラグイン +Comment[nb]=Kurvnotat-tillegg for Kontakt +Comment[nn]=Korgnotat-tillegg for Kontakt +Comment[pt]=Plugin do Bloco de Notas BasKet para o Kontact +Comment[ru]=Модуль Ðльбом заметок Basket Ð´Ð»Ñ Kontact +Comment[tr]=Kontact için Basket Not Tutucu Eklentisi + +Name=Baskets +Name[de]=Körbe +Name[es]=Cestas +Name[fr]=Paniers +Name[it]=Canestri +Name[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆ +Name[nb]=Kurver +Name[nn]=Korger +Name[pt]=Cestos +Name[ru]=Корзины +Name[tr]=Sepetler + diff --git a/kontact_plugin/basketdcopiface_stub.cpp b/kontact_plugin/basketdcopiface_stub.cpp new file mode 100644 index 0000000..eff3122 --- /dev/null +++ b/kontact_plugin/basketdcopiface_stub.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** DCOP Stub Implementation created by dcopidl2cpp from basketdcopiface.kidl +** +** WARNING! All changes made in this file will be lost! +** +*****************************************************************************/ + +#include "basketdcopiface_stub.h" +#include + +#include + + +BasketDcopInterface_stub::BasketDcopInterface_stub( const QCString& app, const QCString& obj ) + : DCOPStub( app, obj ) +{ +} + +BasketDcopInterface_stub::BasketDcopInterface_stub( DCOPClient* client, const QCString& app, const QCString& obj ) + : DCOPStub( client, app, obj ) +{ +} + +BasketDcopInterface_stub::BasketDcopInterface_stub( const DCOPRef& ref ) + : DCOPStub( ref ) +{ +} + +void BasketDcopInterface_stub::newBasket() +{ + if ( !dcopClient() ) { + setStatus( CallFailed ); + return; + } + QByteArray data; + dcopClient()->send( app(), obj(), "newBasket()", data ); + setStatus( CallSucceeded ); +} + +void BasketDcopInterface_stub::handleCommandLine() +{ + if ( !dcopClient() ) { + setStatus( CallFailed ); + return; + } + QByteArray data, replyData; + QCString replyType; + if ( dcopClient()->call( app(), obj(), "handleCommandLine()", data, replyType, replyData ) ) { + setStatus( CallSucceeded ); + } else { + callFailed(); + } +} + + diff --git a/kontact_plugin/kontact_basketplugin.setdlg b/kontact_plugin/kontact_basketplugin.setdlg new file mode 100644 index 0000000..b6f9b29 --- /dev/null +++ b/kontact_plugin/kontact_basketplugin.setdlg @@ -0,0 +1,24 @@ +[Basket] +Name=Baskets +Name[de]=Körbe +Name[es]=Cestas +Name[fr]=Paniers +Name[it]=Canestri +Name[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆ +Name[nb]=Kurver +Name[nn]=Korger +Name[es]=Cestas +Name[pt]=Cestos +Name[ru]=Корзины +Comment=BasKet Note Pads component +Comment[de]=Komponente BasKet Notizblätter +Comment[es]=Componente para las notas de basket +Comment[fr]=Composant Blocs notes BasKet +Comment[it]=Componente Blocco appunti BasKet +Comment[ja]=BasKet メモパッドコンãƒãƒ¼ãƒãƒ³ãƒˆ +Comment[nb]=Kurvnotat-komponent +Comment[nn]=Korgnotat-komponent +Comment[es]=Componente para las notas de basket +Comment[pt]=Componente do Bloco de Notas BasKet +Comment[ru]=Модуль Ðльбом заметок Basket Ð´Ð»Ñ Kontact +Icon=basket diff --git a/kontact_plugin/uniqueapphandler.cpp b/kontact_plugin/uniqueapphandler.cpp new file mode 100644 index 0000000..29dc888 --- /dev/null +++ b/kontact_plugin/uniqueapphandler.cpp @@ -0,0 +1,171 @@ +/* + This file is part of KDE Kontact. + + Copyright (c) 2003 David Faure + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "uniqueapphandler.h" +#include +#include +#include +#include +#include +#include +#include + +/* + Test plan for the various cases of interaction between standalone apps and kontact: + + 1) start kontact, select "Mail". + 1a) type "korganizer" -> it switches to korganizer + 1b) type "kmail" -> it switches to kmail + 1c) type "kaddressbook" -> it switches to kaddressbook + 1d) type "kmail foo@kde.org" -> it opens a kmail composer, without switching + 1e) type "knode" -> it switches to knode + 1f) type "kaddressbook --new-contact" -> it opens a kaddressbook contact window + 1g) type "knode news://foobar/group" -> it pops up "can't resolve hostname" + + 2) close kontact. Launch kmail. Launch kontact again. + 2a) click "Mail" icon -> kontact doesn't load a part, but activates the kmail window + 2b) type "kmail foo@kde.org" -> standalone kmail opens composer. + 2c) close kmail, click "Mail" icon -> kontact loads the kmail part. + 2d) type "kmail" -> kontact is brought to front + + 3) close kontact. Launch korganizer, then kontact. + 3a) both Todo and Calendar activate the running korganizer. + 3b) type "korganizer" -> standalone korganizer is brought to front + 3c) close korganizer, click Calendar or Todo -> kontact loads part. + 3d) type "korganizer" -> kontact is brought to front + + 4) close kontact. Launch kaddressbook, then kontact. + 4a) "Contacts" icon activate the running kaddressbook. + 4b) type "kaddressbook" -> standalone kaddressbook is brought to front + 4c) close kaddressbook, type "kaddressbook -a foo@kde.org" -> kontact loads part and opens editor + 4d) type "kaddressbook" -> kontact is brought to front + + 5) close kontact. Launch knode, then kontact. + 5a) "News" icon activate the running knode. + 5b) type "knode" -> standalone knode is brought to front + 5c) close knode, type "knode news://foobar/group" -> kontact loads knode and pops up msgbox + 5d) type "knode" -> kontact is brought to front + +*/ + +using namespace Kontact; + +int UniqueAppHandler::newInstance() +{ + // This bit is duplicated from KUniqueApplication::newInstance() + if ( kapp->mainWidget() ) { + kapp->mainWidget()->show(); + KWin::forceActiveWindow( kapp->mainWidget()->winId() ); + KStartupInfo::appStarted(); + } + + // Then ensure the part appears in kontact + mPlugin->core()->selectPlugin( mPlugin ); + return 0; +} + +bool UniqueAppHandler::process( const QCString &fun, const QByteArray &data, + QCString& replyType, QByteArray &replyData ) +{ + if ( fun == "newInstance()" ) { + replyType = "int"; + + KCmdLineArgs::reset(); // forget options defined by other "applications" + loadCommandLineOptions(); + + // This bit is duplicated from KUniqueApplication::processDelayed() + QDataStream ds( data, IO_ReadOnly ); + KCmdLineArgs::loadAppArgs( ds ); + if ( !ds.atEnd() ) { // backwards compatibility + QCString asn_id; + ds >> asn_id; + kapp->setStartupId( asn_id ); + } + + QDataStream _replyStream( replyData, IO_WriteOnly ); + _replyStream << newInstance( ); + } else if ( fun == "load()" ) { + replyType = "bool"; + (void)mPlugin->part(); // load the part without bringing it to front + + QDataStream _replyStream( replyData, IO_WriteOnly ); + _replyStream << true; + } else { + return DCOPObject::process( fun, data, replyType, replyData ); + } + return true; +} + +QCStringList UniqueAppHandler::interfaces() +{ + QCStringList ifaces = DCOPObject::interfaces(); + ifaces += "Kontact::UniqueAppHandler"; + return ifaces; +} + +QCStringList UniqueAppHandler::functions() +{ + QCStringList funcs = DCOPObject::functions(); + funcs << "int newInstance()"; + funcs << "bool load()"; + return funcs; +} + +UniqueAppWatcher::UniqueAppWatcher( UniqueAppHandlerFactoryBase* factory, Plugin* plugin ) + : QObject( plugin ), mFactory( factory ), mPlugin( plugin ) +{ + // The app is running standalone if 1) that name is known to DCOP + mRunningStandalone = kapp->dcopClient()->isApplicationRegistered( plugin->name() ); + + // and 2) it's not registered by kontact (e.g. in another plugin) + if ( mRunningStandalone && kapp->dcopClient()->findLocalClient( plugin->name() ) ) + mRunningStandalone = false; + + if ( mRunningStandalone ) { + kapp->dcopClient()->setNotifications( true ); + connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ), + this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); + } else { + mFactory->createHandler( mPlugin ); + } +} + +UniqueAppWatcher::~UniqueAppWatcher() +{ + if ( mRunningStandalone ) + kapp->dcopClient()->setNotifications( false ); + + delete mFactory; +} + +void UniqueAppWatcher::unregisteredFromDCOP( const QCString& appId ) +{ + if ( appId == mPlugin->name() && mRunningStandalone ) { + disconnect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ), + this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); + kdDebug(5601) << k_funcinfo << appId << endl; + mFactory->createHandler( mPlugin ); + kapp->dcopClient()->setNotifications( false ); + mRunningStandalone = false; + } +} + +#include "uniqueapphandler.moc" diff --git a/kontact_plugin/uniqueapphandler.h b/kontact_plugin/uniqueapphandler.h new file mode 100644 index 0000000..e954eb7 --- /dev/null +++ b/kontact_plugin/uniqueapphandler.h @@ -0,0 +1,120 @@ +/* + This file is part of KDE Kontact. + + Copyright (c) 2003 David Faure + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef KONTACT_UNIQUEAPPHANDLER_H +#define KONTACT_UNIQUEAPPHANDLER_H + +#include +#include +#include + +namespace Kontact +{ + +/** + * DCOP Object that has the name of the standalone application (e.g. "kmail") + * and implements newInstance() so that running the separate application does + * the right thing when kontact is running. + * By default this means simply bringing the main window to the front, + * but newInstance can be reimplemented. + */ +class KDE_EXPORT UniqueAppHandler : public DCOPObject +{ + K_DCOP + + public: + UniqueAppHandler( Plugin* plugin ) : DCOPObject( plugin->name() ), mPlugin( plugin ) {} + + /// This must be reimplemented so that app-specific command line options can be parsed + virtual void loadCommandLineOptions() = 0; + + /// We can't use k_dcop and dcopidl here, because the data passed + /// to newInstance can't be expressed in terms of normal data types. + virtual int newInstance(); + + Plugin* plugin() const { return mPlugin; } + + private: + Plugin* mPlugin; +}; + +/// Base class for UniqueAppHandler +class UniqueAppHandlerFactoryBase +{ + public: + virtual UniqueAppHandler* createHandler( Plugin* ) = 0; +}; + +/** + * Used by UniqueAppWatcher below, to create the above UniqueAppHandler object + * when necessary. + * The template argument is the UniqueAppHandler-derived class. + * This allows to remove the need to subclass UniqueAppWatcher. + */ +template class UniqueAppHandlerFactory : public UniqueAppHandlerFactoryBase +{ + public: + virtual UniqueAppHandler* createHandler( Plugin* plugin ) { + (void)plugin->dcopClient(); // ensure that we take over the DCOP name + return new T( plugin ); + } +}; + + +/** + * If the standalone application is running by itself, we need to watch + * for when the user closes it, and activate the uniqueapphandler then. + * This prevents, on purpose, that the standalone app can be restarted. + * Kontact takes over from there. + * + */ +class KDE_EXPORT UniqueAppWatcher : public QObject +{ + Q_OBJECT + + public: + /** + * Create an instance of UniqueAppWatcher, which does everything necessary + * for the "unique application" behavior: create the UniqueAppHandler as soon + * as possible, i.e. either right now or when the standalone app is closed. + * + * @param factory templatized factory to create the handler. Example: + * ... Note that the watcher takes ownership of the factory. + * @param plugin is the plugin application + */ + UniqueAppWatcher( UniqueAppHandlerFactoryBase* factory, Plugin* plugin ); + + virtual ~UniqueAppWatcher(); + + bool isRunningStandalone() const { return mRunningStandalone; } + + protected slots: + void unregisteredFromDCOP( const QCString& appId ); + + private: + bool mRunningStandalone; + UniqueAppHandlerFactoryBase* mFactory; + Plugin* mPlugin; +}; + +} // namespace + +#endif /* KONTACT_UNIQUEAPPHANDLER_H */ diff --git a/links.sh b/links.sh new file mode 100755 index 0000000..e72d5d1 --- /dev/null +++ b/links.sh @@ -0,0 +1,223 @@ +#!/bin/bash + +TARGET=`pwd` +if [ -e $TARGET'/debug' ]; then + BUILD=$TARGET'/debug' +else + BUILD=$TARGET +fi +LINKS=`echo ~`'/kde-debug' +HOME=`echo ~` + +dest_files=( + "$LINKS/share/apps/basket/backgrounds/abstract.png" + "$LINKS/share/apps/basket/backgrounds/alien-artifact.png" + "$LINKS/share/apps/basket/backgrounds/alien-artifact.png.config" + "$LINKS/share/apps/basket/backgrounds/basket-title.png" + "$LINKS/share/apps/basket/backgrounds/green-curves.png" + "$LINKS/share/apps/basket/backgrounds/light.png" + "$LINKS/share/apps/basket/backgrounds/painting.png" + "$LINKS/share/apps/basket/backgrounds/pens.png" + "$LINKS/share/apps/basket/backgrounds/pins.png" + "$LINKS/share/apps/basket/backgrounds/rainbow-balls.png" + "$LINKS/share/apps/basket/backgrounds/rounds-line.png" + "$LINKS/share/apps/basket/backgrounds/todo.png" + "$LINKS/share/apps/basket/backgrounds/working.png" + "$LINKS/share/apps/basket/backgrounds/previews/abstract.png" + "$LINKS/share/apps/basket/backgrounds/previews/alien-artifact.png" + "$LINKS/share/apps/basket/backgrounds/previews/basket-title.png" + "$LINKS/share/apps/basket/backgrounds/previews/green-curves.png" + "$LINKS/share/apps/basket/backgrounds/previews/light.png" + "$LINKS/share/apps/basket/backgrounds/previews/painting.png" + "$LINKS/share/apps/basket/backgrounds/previews/pens.png" + "$LINKS/share/apps/basket/backgrounds/previews/pins.png" + "$LINKS/share/apps/basket/backgrounds/previews/rainbow-balls.png" + "$LINKS/share/apps/basket/backgrounds/previews/rounds-line.png" + "$LINKS/share/apps/basket/backgrounds/previews/todo.png" + "$LINKS/share/apps/basket/backgrounds/previews/working.png" + "$LINKS/share/apps/basket/images/insertion_help.png" + "$LINKS/share/apps/basket/images/tag_export_help.png" + "$LINKS/share/apps/basket/basket_part.rc" + "$LINKS/share/apps/basket/basketui.rc" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_priority_high.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_important.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_for_later.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_preference_excelent.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_priority_medium.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_progress_000.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_progress_100.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_preference_bad.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_preference_good.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_checkbox.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_progress_050.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_fun.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_progress_025.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_checkbox_checked.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_progress_075.png" + "$LINKS/share/apps/basket/icons/crystalsvg/16x16/actions/tag_priority_low.png" + "$LINKS/share/apps/kontact/ksettingsdialog/kontact_basketplugin.setdlg" + "$LINKS/share/services/kontact/basket.desktop" + "$LINKS/share/services/basket_config_general.desktop" + "$LINKS/share/services/basket_config_baskets.desktop" + "$LINKS/share/services/basket_config_new_notes.desktop" + "$LINKS/share/services/basket_config_notes_appearance.desktop" + "$LINKS/share/services/basket_config_apps.desktop" + "$LINKS/share/services/basket_part.desktop" + "$LINKS/share/applnk/Utilities/basket.desktop" + "$LINKS/lib/kde3/libkontact_basket.so" + "$LINKS/lib/kde3/libkontact_basket.la" + "$LINKS/lib/kde3/kcm_basket.so" + "$LINKS/lib/kde3/kcm_basket.la" + "$LINKS/lib/kde3/libbasketpart.so" + "$LINKS/lib/kde3/libbasketpart.la" + "$LINKS/lib/libbasketcommon.so" + "$LINKS/lib/libbasketcommon.la" + "$LINKS/bin/basket" + "$LINKS/share/icons/crystalsvg/16x16/actions/likeback_dislike.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/likeback_like.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/likeback_configure.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_priority_high.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_important.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_for_later.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_preference_excelent.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_priority_medium.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_progress_000.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_progress_100.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_preference_bad.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_preference_good.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_checkbox.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_progress_050.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_fun.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_progress_025.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_checkbox_checked.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_progress_075.png" + "$LINKS/share/icons/crystalsvg/16x16/actions/tag_priority_low.png" + "$LINKS/share/icons/crystalsvg/16x16/apps/basket.png" + "$LINKS/share/icons/crystalsvg/128x128/apps/basket.png" + "$LINKS/share/icons/crystalsvg/64x64/apps/basket.png" + "$LINKS/share/icons/crystalsvg/48x48/apps/basket.png" + "$LINKS/share/icons/crystalsvg/22x22/apps/basket.png" + "$LINKS/share/icons/crystalsvg/32x32/apps/basket.png" + "$LINKS/share/icons/crystalsvg/scalable/apps/basket.svg" +) + +source_files=( + "$TARGET/backgrounds/abstract.png" + "$TARGET/backgrounds/alien-artifact.png" + "$TARGET/backgrounds/alien-artifact.png.config" + "$TARGET/backgrounds/basket-title.png" + "$TARGET/backgrounds/green-curves.png" + "$TARGET/backgrounds/light.png" + "$TARGET/backgrounds/painting.png" + "$TARGET/backgrounds/pens.png" + "$TARGET/backgrounds/pins.png" + "$TARGET/backgrounds/rainbow-balls.png" + "$TARGET/backgrounds/rounds-line.png" + "$TARGET/backgrounds/todo.png" + "$TARGET/backgrounds/working.png" + "$TARGET/backgrounds-previews/abstract.png" + "$TARGET/backgrounds-previews/alien-artifact.png" + "$TARGET/backgrounds-previews/basket-title.png" + "$TARGET/backgrounds-previews/green-curves.png" + "$TARGET/backgrounds-previews/light.png" + "$TARGET/backgrounds-previews/painting.png" + "$TARGET/backgrounds-previews/pens.png" + "$TARGET/backgrounds-previews/pins.png" + "$TARGET/backgrounds-previews/rainbow-balls.png" + "$TARGET/backgrounds-previews/rounds-line.png" + "$TARGET/backgrounds-previews/todo.png" + "$TARGET/backgrounds-previews/working.png" + "$TARGET/images/insertion_help.png" + "$TARGET/images/tag_export_help.png" + "$TARGET/src/basket_part.rc" + "$TARGET/src/basketui.rc" + "$TARGET/tags/cr16-action-tag_priority_high.png" + "$TARGET/tags/cr16-action-tag_important.png" + "$TARGET/tags/cr16-action-tag_for_later.png" + "$TARGET/tags/cr16-action-tag_preference_excelent.png" + "$TARGET/tags/cr16-action-tag_priority_medium.png" + "$TARGET/tags/cr16-action-tag_progress_000.png" + "$TARGET/tags/cr16-action-tag_progress_100.png" + "$TARGET/tags/cr16-action-tag_preference_bad.png" + "$TARGET/tags/cr16-action-tag_preference_good.png" + "$TARGET/tags/cr16-action-tag_checkbox.png" + "$TARGET/tags/cr16-action-tag_progress_050.png" + "$TARGET/tags/cr16-action-tag_fun.png" + "$TARGET/tags/cr16-action-tag_progress_025.png" + "$TARGET/tags/cr16-action-tag_checkbox_checked.png" + "$TARGET/tags/cr16-action-tag_progress_075.png" + "$TARGET/tags/cr16-action-tag_priority_low.png" + "$TARGET/kontact_plugin/kontact_basketplugin.setdlg" + "$TARGET/kontact_plugin/basket.desktop" + "$TARGET/src/basket_config_general.desktop" + "$TARGET/src/basket_config_baskets.desktop" + "$TARGET/src/basket_config_new_notes.desktop" + "$TARGET/src/basket_config_notes_appearance.desktop" + "$TARGET/src/basket_config_apps.desktop" + "$TARGET/src/basket_part.desktop" + "$TARGET/src/basket.desktop" + "$BUILD/kontact_plugin/.libs/libkontact_basket.so" + "$BUILD/kontact_plugin/.libs/libkontact_basket.la" + "$BUILD/src/.libs/kcm_basket.so" + "$BUILD/src/.libs/kcm_basket.la" + "$BUILD/src/.libs/libbasketpart.so" + "$BUILD/src/.libs/libbasketpart.la" + "$BUILD/src/.libs/libbasketcommon.so" + "$BUILD/src/.libs/libbasketcommon.la" + "$BUILD/src/.libs/basket" + "$TARGET/src/cr16-action-likeback_dislike.png" + "$TARGET/src/cr16-action-likeback_like.png" + "$TARGET/src/cr16-action-likeback_configure.png" + "$TARGET/tags/cr16-action-tag_priority_high.png" + "$TARGET/tags/cr16-action-tag_important.png" + "$TARGET/tags/cr16-action-tag_for_later.png" + "$TARGET/tags/cr16-action-tag_preference_excelent.png" + "$TARGET/tags/cr16-action-tag_priority_medium.png" + "$TARGET/tags/cr16-action-tag_progress_000.png" + "$TARGET/tags/cr16-action-tag_progress_100.png" + "$TARGET/tags/cr16-action-tag_preference_bad.png" + "$TARGET/tags/cr16-action-tag_preference_good.png" + "$TARGET/tags/cr16-action-tag_checkbox.png" + "$TARGET/tags/cr16-action-tag_progress_050.png" + "$TARGET/tags/cr16-action-tag_fun.png" + "$TARGET/tags/cr16-action-tag_progress_025.png" + "$TARGET/tags/cr16-action-tag_checkbox_checked.png" + "$TARGET/tags/cr16-action-tag_progress_075.png" + "$TARGET/tags/cr16-action-tag_priority_low.png" + "$TARGET/src/cr16-app-basket.png" + "$TARGET/src/cr128-app-basket.png" + "$TARGET/src/cr64-app-basket.png" + "$TARGET/src/cr48-app-basket.png" + "$TARGET/src/cr22-app-/basket.png" + "$TARGET/src/cr32-app-/basket.png" + "$TARGET/src/crsc-app-basket.svg" +) + +function makedir() +{ + if [ ! -d $1 ]; then + echo "Making dir: $1" + mkdir -p $1 + fi +} + +function softlink() +{ + if [ -L $2 ]; then + rm $2 + fi + makedir `dirname $2` + echo "Linking: $2->$1" + ln -s $1 $2 +} + +index=0 +element_count=${#source_files[@]} + +while [ "$index" -lt "$element_count" ]; do + softlink "${source_files[$index]}" "${dest_files[$index]}" + let "index = $index + 1" +done + +softlink "$LINKS/lib" "$LINKS/lib64" + diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 0000000..96f447e --- /dev/null +++ b/po/Makefile.am @@ -0,0 +1,2 @@ +POFILES = AUTO +noinst_HEADERS = basket.pot fr.po nl.po de.po nn.po zh_TW.po zh_CN.po pl_PL.po es.po pt.po diff --git a/po/basket.pot b/po/basket.pot new file mode 100644 index 0000000..f3262d8 --- /dev/null +++ b/po/basket.pot @@ -0,0 +1,3176 @@ +# SOME DESCRIPTIVE TITLE. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\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: ENCODING\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#: aboutdata.cpp:27 +msgid "" +"

Taking care of your ideas.

A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

" +msgstr "" + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
%1" +msgstr "" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "" + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "" + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "" + +#: backup.cpp:72 +msgid "" +"

You can move the folder where %1 store your baskets to:

  • Store " +"your baskets in a visible place in your home folder, like ~/Notes or " +"~/Baskets, so you can manually backup them when you want.
  • Store your " +"baskets on a server to share them between two computers.
    In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
    Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are " +"desynced.

Please remember that you should not change the content " +"of that folder manually (eg. adding a file in a basket folder will not add " +"that file to the basket).

" +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "" + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "" + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file " +"%1." +msgstr "" + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +msgid "Restart" +msgstr "" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2818 +msgid "Added" +msgstr "" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "" + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "" + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
this version of %1." +msgstr "" + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
locking duration in " +"the application settings." +msgstr "" + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "" + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "" + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "" + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "" + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "" + +#: basketproperties.cpp:134 +msgid "" +"

Easily Remember your Shortcuts:
With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

Local " +"vs Global:
The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

Show vs Switch:
The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

" +msgstr "" + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "" + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" + +#: basketstatusbar.cpp:148 +msgid "

This basket is locked.
Click to unlock it.

" +msgstr "" + +#: basketstatusbar.cpp:153 +msgid "

This basket is unlocked.
Click to lock it.

" +msgstr "" + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "" + +#: bnpview.cpp:265 +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "" + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "" + +#: bnpview.cpp:273 +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "" + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "" + +#: bnpview.cpp:355 +msgid "" +"

Basket Tree

Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "" + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "" + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "" + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "" + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "" + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "" + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "" + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "" + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "" + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "" + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "" + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "" + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "" + +#: bnpview.cpp:527 +msgid "&New" +msgstr "" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "" + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "" + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "" + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "" + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "" + +#: bnpview.cpp:1484 +msgid "" +"

The file basketui.rc seems to not exist or is too old.
%1 cannot " +"run without it and will stop.

Please check your installation of " +"%2.

If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

" +msgstr "" + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "" + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
Do you want to remove " +"them too?
" +msgstr "" + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "" + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "" + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "" + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "" + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "" + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "" + +#: formatimporter.cpp:132 +msgid "" +"

Folder mirroring is not possible anymore (see basket.kde.org for more " +"information).

The folder %1 has been copied for the basket " +"needs. You can either delete this folder or delete the basket, or use both. " +"But remember that modifying one will not modify the other anymore as they " +"are now separate entities.

" +msgstr "" + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "" + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "" + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "" + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "" + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "" + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "" + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "" + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the " +"broken-object icon in the top-right corner of the window, describe it and " +"click Send." +msgstr "" + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the " +"broken-object icon below the window title-bar, briefly describe the " +"mis-behaviour and click Send." +msgstr "" + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "" + +#: likeback.cpp:469 +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "" + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "" + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "" + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" + +#: likeback.cpp:839 +msgid "

Error while trying to send the report.

Please retry later.

" +msgstr "" + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "" + +#: likeback.cpp:843 +msgid "" +"

Your comment has been sent successfully. It will help improve the " +"application.

Thanks for your time.

" +msgstr "" + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "" + +#: linklabel.cpp:600 +msgid "None" +msgstr "" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "" + +#: linklabel.cpp:607 +msgid "" +"

This is normal because there are several type of notes.
This setting " +"only applies to file and local link notes.
The images you see are image " +"notes, not file notes.
File notes are generic documents, whereas image " +"notes are pictures you can draw in.

When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
For instance, " +"when dropping image or text files, image and text notes are created for " +"them.
For type of files %2 does not understand, they are shown as generic " +"file notes with just an icon or file preview and a filename.

If you do " +"not want the application to create notes depending on the content of the " +"files you drop, go to the \"General\" page and uncheck \"Image or " +"animation\" in the \"View Content of Added Files for the Following Types\" " +"group.

" +msgstr "" + +#: linklabel.cpp:623 +msgid "Example" +msgstr "" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "" + +#: mainwindow.cpp:310 +msgid "

Do you really want to quit %1?

" +msgstr "" + +#: mainwindow.cpp:312 +msgid "" +"

Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

" +msgstr "" + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "" + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "" + +#: newbasketdialog.cpp:217 +msgid "" +"

Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

  • Grouping baskets by themes or " +"topics;
  • Grouping baskets in folders for different " +"projects;
  • Making sections with sub-baskets representing chapters or " +"pages;
  • Making a group of baskets to export together (to eg. email " +"them to people).
" +msgstr "" + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "" + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "" + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "" + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "" + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "" + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "" + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "" + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "" + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "" + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "" + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "" + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "" + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "" + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "" + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "" + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "" + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "" + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "" + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "" + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "" + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "" + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "" + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "" + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "" + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "" + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "" + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "" + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "" + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "" + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "" + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "" + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "" + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "" + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "" + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "" + +#: notefactory.cpp:445 +msgid "" +"

%1 doesn't support the data you've dropped.
It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

" +msgstr "" + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "" + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "" + +#: settings.cpp:367 +msgid "On left" +msgstr "" + +#: settings.cpp:368 +msgid "On right" +msgstr "" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "" + +#: settings.cpp:557 +msgid "" +"

When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

" +msgstr "" + +#: settings.cpp:559 +msgid "" +"

Place your mouse between notes, where you want to add a new one.
Click " +"on the left of the insertion-line middle-mark to insert a " +"note.
Click on the right to group a note, with the one " +"below or above, depending on where your mouse is.

" +msgstr "" + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "" + +#: settings.cpp:603 +msgid " minutes" +msgstr "" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "" + +#: settings.cpp:693 +msgid "At current note" +msgstr "" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "" + +#: settings.cpp:718 +msgid "&by" +msgstr "" + +#: settings.cpp:721 +msgid "pixels" +msgstr "" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "" + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "" + +#: settings.cpp:800 +msgid "&Files" +msgstr "" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "" + +#: settings.cpp:873 +msgid "" +"

If checked, the application defined below will be used when opening that " +"type of note.

Otherwise, the application you've configured in " +"Konqueror will be used.

" +msgstr "" + +#: settings.cpp:882 +msgid "" +"

Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

" +msgstr "" + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "" + +#: settings.cpp:904 +msgid "" +"

When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, " +"XFCE...).

  • Open the KDE Control Center (if it is not available, " +"try to type \"kcontrol\" in a command line terminal);
  • Go to the " +"\"KDE Components\" and then \"Components Selector\" section;
  • Choose " +"\"Web Browser\", check \"In the following browser:\" and enter the name of " +"your Web browser (like \"firefox\" or \"epiphany\").

Now, when " +"you click any link that start with \"http://...\", it will be opened " +"in your Web browser (eg. Mozilla Firefox or Epiphany or...).

For more " +"fine-grained configuration (like opening only Web pages in your Web " +"browser), read the second help link.

" +msgstr "" + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "" + +#: settings.cpp:923 +msgid "" +"

Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

  • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line " +"terminal);
  • Go to the \"KDE Components\" and then \"File " +"Associations\" section;
  • In the tree, expand \"text\" and click " +"\"html\";
  • In the applications list, add your Web browser as the " +"first entry;
  • Do the same for the type \"application -> " +"xhtml+xml\".
" +msgstr "" + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and " +"re-import the file.
" +msgstr "" + +#: systemtray.cpp:140 +msgid "" +"

Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

" +msgstr "" + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "" + +#: tag.cpp:544 +msgid "To Do" +msgstr "" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "" + +#: tag.cpp:544 +msgid "Done" +msgstr "" + +#: tag.cpp:545 +msgid "Progress" +msgstr "" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "" + +#: tag.cpp:599 +msgid "Priority" +msgstr "" + +#: tag.cpp:599 +msgid "Low" +msgstr "" + +#: tag.cpp:599 +msgid "Medium" +msgstr "" + +#: tag.cpp:600 +msgid "High" +msgstr "" + +#: tag.cpp:600 +msgid "Preference" +msgstr "" + +#: tag.cpp:600 +msgid "Bad" +msgstr "" + +#: tag.cpp:601 +msgid "Good" +msgstr "" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "" + +#: tag.cpp:667 +msgid "Important" +msgstr "" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "" + +#: tag.cpp:668 +msgid "Idea" +msgstr "" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "" + +#: tag.cpp:668 +msgid "Title" +msgstr "" + +#: tag.cpp:669 +msgid "Code" +msgstr "" + +#: tag.cpp:669 +msgid "Work" +msgstr "" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "" + +#: tag.cpp:687 +msgid "Personal" +msgstr "" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "" + +#: tag.cpp:687 +msgid "Funny" +msgstr "" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" + +#: tagsedit.cpp:901 +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "" + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..9f101a5 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,3611 @@ +# translation of cs.po to Czech +# +# Radomir Fojtik , 2006. +msgid "" +msgstr "" +"Project-Id-Version: cs\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2006-07-29 12:57+0200\n" +"Last-Translator: Radomir Fojtik \n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Radomir Fojtik" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "radfoj@seznam.cz" + +#: aboutdata.cpp:27 +msgid "" +"

Taking care of your ideas.

A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

" +msgstr "" + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "BasKet Note Pads" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autor, maintainer" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Šifrování košíků, integrace s Kontactem, Knowit import" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Ikona" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +#, fuzzy +msgid "Basket Archive Error" +msgstr "Chyba ukládání" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" + +#: backup.cpp:56 +#, fuzzy +msgid "Backup & Restore" +msgstr "&Obnovit" + +#: backup.cpp:65 +#, fuzzy +msgid "Save Folder" +msgstr "Uložit do souboru" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
%1" +msgstr "" + +#: backup.cpp:69 +#, fuzzy +msgid "&Move to Another Folder..." +msgstr "&Uložit do souboru..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "" + +#: backup.cpp:71 +#, fuzzy +msgid "Why to do that?" +msgstr "Co to znamená?" + +#: backup.cpp:72 +msgid "" +"

You can move the folder where %1 store your baskets to:

  • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
  • Store your " +"baskets on a server to share them between two computers.
    In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
    Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

" +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +#, fuzzy +msgid "All Files" +msgstr "&Soubory" + +#: backup.cpp:179 backup.cpp:200 +#, fuzzy +msgid "Backup Baskets" +msgstr "Košíky" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "" + +#: backup.cpp:200 +#, fuzzy +msgid "Backing up baskets. Please wait..." +msgstr "&Exportovat do HTML..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" + +#: backup.cpp:254 +#, fuzzy +msgid "Restoring %1. Please wait..." +msgstr "&Exportovat do HTML..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" + +#: backup.cpp:257 +#, fuzzy +msgid "Restore Baskets" +msgstr "Odstranit košík" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +#, fuzzy +msgid "Restore Error" +msgstr "&Obnovit" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +#, fuzzy +msgid "Restart" +msgstr "&Obnovit" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Nová poznámka neodpovídá filtru a je skrytá." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Nová poznámka neodpovídá filtru a je skrytá." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "NÄ›které nové poznámky neodpovídají filtru a jsou skryty." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Nové poznámky neodpovídají filtru a jsou skryty." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Skupina" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Vložit" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "UpuÅ¡tÄ›no do košíku %1" + +#: basket.cpp:2338 +#, fuzzy +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Tato zpráva by se nemÄ›la zobrazit. Pokud je tomu tak, je tento program " +"chybný! Prosím reportujte bug vývojáři." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Vložit poznámku\n" +"KliknÄ›te pravým myšítkem pro více možností" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Změňte velikost tÄ›chto sloupců" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Změňte velikost této skupiny" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Změňte velikost této poznámky" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Vyberte nebo pÅ™esuňte tuto poznámku" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Vyberte nebo pÅ™esuňte tuto skupinu" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "PÅ™iÅ™aÄ nebo zruÅ¡ znaÄku pro tuto poznámku" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "PÅ™iÅ™azené znaÄky : %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Rozbalit tuto skupinu" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Sbalit tuto skupinu" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Seskupit poznámku spoznámkou níže\n" +"KliknÄ›te pravým myšítkem pro více možností" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Seskupit poznámku spoznámkou výše\n" +"KliknÄ›te pravým myšítkem pro více možností" + +#: basket.cpp:2818 +msgid "Added" +msgstr "PÅ™idáno" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Poslední zmÄ›na" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "KliknÄ›te napravo pro seskupení místo vložení" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "KliknÄ›te nalevo pro vložení místo seskupení" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Odemknout" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Heslem chránÄ›ný košík." + +#: basket.cpp:3033 +#, fuzzy +msgid "Press Unlock to access it." +msgstr "ZmáÄknÄ›te Odemknout pro zobrazení." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
this version of %1." +msgstr "Šifrování není podporováno
touto verzí %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
locking duration in " +"the application settings." +msgstr "" + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "NaÄítám..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&PÅ™izpůsobit..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrovat touto znaÄkou" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrovat tímto &stavem" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "ZnaÄky" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Opravdu chcete smazat tuto poznámku?\n" +"Opravdu chcete smazat tyto %n poznámky?\n" +"Opravdu chcete smazat tÄ›chto %n poznámek?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +" Smazat poznámku\n" +"Smazat poznámky\n" +"Smazat poznámky" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Poznámka zkopírována do schránky.\n" +"Poznámky zkopírovány do schránky.\n" +"Poznámky zkopírovány do schránky." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Poznámka vyjmuta do schránky.\n" +"Poznámky vyjmuty do schránky.\n" +"Poznámky vyjmuty do schránky." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +" Zkopírována poznámka do výbÄ›ru.\n" +"Zkopírovány poznámky do výbÄ›ru.\n" +"Zkopírovány poznámky do výbÄ›ru." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Nelze otevřít tuto poznámku." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Nejste oprávnÄ›ni otevřít tento soubor." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Uložit do souboru" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Zadejte prosím heslo pro následující soukromý klíÄ:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Zadejte prosím heslo pro košík %1" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Zvolte prosím heslo pro košík %1" + +#: basket.cpp:5328 +#, fuzzy +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "NedostateÄné místo na disku pro uložení dat košíku" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Å patné práva souboru košíku" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Prosím odstraňte soubory na disku %1, aby aplikace bezpeÄnÄ› uložila " +"Vámi provedené zmÄ›ny." + +#: basket.cpp:5334 +#, fuzzy +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Práva k souboru jsou Å¡patná pro %1. Prosím zkontrolujte, zda máte " +"právo zápisu." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Chyba ukládání" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Promiňte, ale vytvoÅ™ení adresáře pro tento košíš se nezdaÅ™ilo." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "VytvoÅ™ení košíku se nezdaÅ™ilo" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Promiňte, ale kopírování Å¡ablony pro tento nový košík se nezdaÅ™ilo." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Promiňte, ale pÅ™izpůsobení Å¡ablony pro tento nový košík se nezdaÅ™ilo." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Vlastnosti košíku" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Jméno" + +#: basketproperties.cpp:76 +#, fuzzy +msgid "Background &image:" +msgstr "&Obrázek na pozadí:" + +#: basketproperties.cpp:77 +#, fuzzy +msgid "&Background color:" +msgstr "&Barva pozadí:" + +#: basketproperties.cpp:78 +#, fuzzy +msgid "&Text color:" +msgstr "Barva &textu:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Žádná)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Uspořádání" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Slo&upce:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&VolnÄ›" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&MyÅ¡lenková mapa" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Klávesové zkratky" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Získej nÄ›kolik tipů..." + +#: basketproperties.cpp:134 +#, fuzzy +msgid "" +"

Easily Remember your Shortcuts:
With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

Local " +"vs Global:
The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

Show vs Switch:
The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

" +msgstr "" +"

Jednoduché zapamatování zkratek:
První volbou " +"pÅ™iÅ™adíte košíku zkratku kombinací kláves Alt+písmeno, " +"pÅ™iÄemž toto písmeno bude ve stromu košíků podtrženo.
Například, pokud " +"přiřadíte zkratku Alt+T košíku s názvem Tipy, košík bude ve " +"stromu košíků zobrazen jako Tipy. Pomůže to znázornit zkratku " +"k jejímu rychlejšímu zapamatování.

Lokální vs Globální:
První možnost umožní zobrazit košík když je hlavní okno " +"aktivní. Globální zkratky jsou platné odkudkoliv, dokonce pokud je okno " +"schované.

Zobrazit vs Přepnout:
Poslední možnost " +"uÄiní tento košík souÄasným bez otevírání hlavního okna. Je to užiteÄné " +"spolu s nastavením globálních zkratek napÅ™. pro vložení schránky nebo " +"výbÄ›ru do souÄasného košíku, a to odkudkoliv.

" + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "&Zobrazit tento košík" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Zobrazit tento košík (&globální zkratka)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "Přepnout do tohoto košíku (&globální zkratka)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "" + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Ctrl+pustit: kopírovat, Shift+pustit: přesunout, Shift+Ctrl+pustit: odkaz." + +#: basketstatusbar.cpp:148 +msgid "

This basket is locked.
Click to unlock it.

" +msgstr "

Tento košík je zamknutý.
Klikněte k jeho odemknutí.

" + +#: basketstatusbar.cpp:153 +msgid "

This basket is unlocked.
Click to lock it.

" +msgstr "

Tento košík je odemknutý.
KliknÄ›te k jeho uzamÄení.

" + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Obecné" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Zobrazit/skrýt hlavní okno" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Umožní zobrazit hlavní okno, pokud je skryto a skrýt ho, pokud je zobrazeno." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Vložit obsah schránky do souÄasného košíku" + +#: bnpview.cpp:237 +#, fuzzy +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Umožní vložit obsah schránky do souÄasného košíku bez nutnosti otevírat " +"hlavní okno." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Zobrazit název souÄasného košíku" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Umožní zjistit souÄasný košík bez nutnosti otevírat hlavní okno." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Vložit výbÄ›r do souÄasného košíku" + +#: bnpview.cpp:245 +#, fuzzy +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Umožní vkládat výbÄ›r ze schránky do souÄasného košíku bez nutnosti otevírat " +"hlavní okno." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "VytvoÅ™it nový košík" + +#: bnpview.cpp:249 +#, fuzzy +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Umožní vytvoÅ™it nový košík bez nutnosti mít otevÅ™ené hlavní okno (můžete pak " +"použít jinou globální zkratku pro pÅ™idání poznámky, vložení schránky nebo " +"vložení výbÄ›ru v tomto novém košíku)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "PÅ™ejít do pÅ™edeÅ¡lého košíku" + +#: bnpview.cpp:253 +#, fuzzy +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Umožní zmÄ›nit souÄasný košík na pÅ™edchozí bez nutnosti mít otevÅ™ené hlavní " +"okno." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "PÅ™ejít do následujícího košíku" + +#: bnpview.cpp:257 +#, fuzzy +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Umožní zmÄ›nit souÄasný košík na další bez nutnosti mít otevÅ™ené hlavní okno." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Vložit textovou poznámku" + +#: bnpview.cpp:265 +#, fuzzy +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "" +"PÅ™odat textovou poznámku do souÄasného košíku bez nutnosti mít otevÅ™ené " +"hlavní okno." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Vložit obrázek" + +#: bnpview.cpp:269 +#, fuzzy +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"PÅ™idat obrázek do souÄasného košíku bez nutnosti mít otevÅ™ené hlavní okno." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Vložit odkaz" + +#: bnpview.cpp:273 +#, fuzzy +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "" +"PÅ™idat odkaz do souÄasného košíku bez nutnosti mít otevÅ™ené hlavní okno." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Vložit barvu" + +#: bnpview.cpp:277 +#, fuzzy +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"PÅ™idá poznámku barby do souÄasného košíku bez nutnosti otevírat hlavní okno." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Zachytit barvu z obrazovky" + +#: bnpview.cpp:281 +#, fuzzy +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"PÅ™idat barvu vybranou z jednoho pixelu na obrazovce do souÄasného košíku bez " +"nutnosti otevírat hlavní okno." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Sejmou Äást obrazovky" + +#: bnpview.cpp:286 +#, fuzzy +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Zachytí oblast obrazovky jako obrázek v souÄasném košíku bez otevírání " +"hlavího okna." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Košíky" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "" + +#: bnpview.cpp:355 +msgid "" +"

Basket Tree

Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

Strom košíků

Zde je seznam VaÅ¡ich košíků. Můžete svá data " +"organizovat pÅ™esouváním do jiných košíků. Můžete seskupovat košíky podle " +"pÅ™edmÄ›tu vytvoÅ™ením nového košíku uvnitÅ™ jiných. Můžete mezi nimi pÅ™echázet " +"kliknutím na přísluÅ¡ný koÅ¡, nebo pÅ™euspořádat je použitím funkce táhní a " +"pust." + +#: bnpview.cpp:366 bnpview.cpp:368 +#, fuzzy +msgid "&Basket Archive..." +msgstr "&Nový košík..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Skrýt okno" + +#: bnpview.cpp:375 +#, fuzzy +msgid "&HTML Web Page..." +msgstr "&HTML stránka" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +#, fuzzy +msgid "Text &File..." +msgstr "&Uložit do souboru..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Smazat" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Vybere vÅ¡echny poznámky" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Odz&naÄit vÅ¡e" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "OdznaÄí vÅ¡echny oznaÄené poznámky" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Obrátit výbÄ›r" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Obrátí souÄasnÄ› oznaÄené poznámky" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Upravit..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Otevřít" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Otevřít &s..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Uložit do souboru..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Seskupit" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "&RozdÄ›lit" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Posunout &nahoru" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Posunout &výš" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Posunout &níž" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Posunout &dolů" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Text" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Odkaz" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Obrázek" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Barva" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "&SpouÅ¡tÄ›Ä" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importovat spouÅ¡tÄ›Ä z &KDE nabídky..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&portovat ikonu..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "NaÄíst ze &souboru..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "&Barva z obrazovky" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Sejmou Äást &obrazovky" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Nový košík..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Nový &podÅ™azený košík..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Nový &sourozenecký košík..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Nový" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Odstranit" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Ochrana &Heslem..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "&Zamknout" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtrovat" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrovat vÅ¡echny &košíky" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "&VyÄistit filtr" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&PÅ™edeÅ¡lý košík" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "&Další košík" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Rozbalit košík" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Sbalit košík" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Nastavit g&lobální zkratky..." + +#: bnpview.cpp:583 +#, fuzzy +msgid "&Welcome Baskets" +msgstr "&Odstranit košík" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "PÅ™evod poznámek prostého textu" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "PÅ™evádím poznámky v prostém textu do formátovatelných..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "UzamÄen" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Žádné poznámky" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +" %n poznámka\n" +"%n poznámky\n" +"%n poznámek" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +" %n vybraná\n" +" %n vybrané\n" +" %n vybraných" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "vÅ¡echny odpovídající" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "žádný filtr" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n odpovídá\n" +"%n odpovídají\n" +"%n odpovídajících" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Vybrána barva do košíku %1" + +#: bnpview.cpp:1457 +#, fuzzy +msgid "The plain text notes have been converted to rich text." +msgstr "Prosté textové poznámky byly pÅ™evedeny do formátovatelných." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "PÅ™evod ukonÄen" + +#: bnpview.cpp:1459 +#, fuzzy +msgid "There are no plain text notes to convert." +msgstr "Nejsou žádné textové poznámky k pÅ™evedení." + +#: bnpview.cpp:1484 +#, fuzzy +msgid "" +"

The file basketui.rc seems to not exist or is too old.
%1 cannot " +"run without it and will stop.

Please check your installation of %2." +"

If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

" +msgstr "" +"

Soubor basketui.rc zdá se že neexistuje nebo je příliš starý.
%1 " +"nemůže bez něj běžet a zastaví se.

Prosím zkontrolujte Vaší " +"instalaci %2.

Pokud nemáte administrátorská práva k instalaci, můžete " +"zkopírovat soubor basketui.rc z instalaÄního archivu do adresáře %4.

Pokud jste si jisti, že je správně " +"naistalována, ale měli jste nainstalovanou předešlou preview verzi, zkuste " +"odstranit %5basketui.rc

" + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Zdroj nenalezen" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Nelze pÅ™idat poznámku." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Zachycená Äást obrazovky do košíku %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Smazat košík" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Smazat pouze ten košík" + +#: bnpview.cpp:1641 +#, fuzzy +msgid "Delete Note & Children" +msgstr "Smazat s jeho dÄ›tmi" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "Opravdu chcete odstranit košík %1 a jeho obsah?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Odstranit košík" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Odstranit košík" + +#: bnpview.cpp:1670 +#, fuzzy +msgid "" +"%1 have the following children baskets.
Do you want to remove " +"them too?
" +msgstr "" +"%1 má následující podřazený košík.
Chcete ho také odstranit?" + +#: bnpview.cpp:1673 +#, fuzzy +msgid "Remove Children Baskets" +msgstr "Odstranit podÅ™azený košík" + +#: bnpview.cpp:1675 +#, fuzzy +msgid "&Remove Children Baskets" +msgstr "Odstranit &podÅ™azený košík" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +#, fuzzy +msgid "Basket Archives" +msgstr "Vlastnosti košíku" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Obsah schránky vložen do košíku %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "VýbÄ›r vložen do košíku %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Nebyla pÅ™idána žádná poznámka." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Košík %1 je uzamÄen" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(UzamÄen)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&PÅ™idÄ›lit novou znaÄku..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Odstranit vÅ¡e" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 zhavaroval! Omlouváme se za to.\n" +"\n" +"VÅ¡e ale není ztraceno! Můžete nám pomoci vyÅ™eÅ¡it tento pád. Informace " +"popisující pád jsou zachyceny níže, tak pouze kliknÄ›te poslat, nebo pokud " +"máte Äas, napiÅ¡te pÅ™esný popis jak ke krachu doÅ¡lo.\n" +"\n" +"Mnohokrát díky." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Informace níže mohou pomoci vývojářům identifikovat problém, prosím, " +"nemodifikujte je." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 zhavaroval! Omlouváme se za to.\n" +"\n" +"VÅ¡e ale není ztraceno! Možná že aktualizace Å™ešící tento problém je " +"dostupná. Prosím, zkontrolujte repositář Vaší distribuce." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Ladící okno" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Exportovat košík do HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Název souboru HTML stránky" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Název souboru:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Vložit &odkazující lokální soubory" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Vložit &odkazující lokální adresáře" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "&Vymazat pÅ™edeÅ¡lé soubory v cílovém adresáři" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&mát pro lepší dojem" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "VyÄistit filtr" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtr: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "&ZnaÄka: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrovat vÅ¡echny košíky" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(NeoznaÄené)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(OznaÄené)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Automatická kontrola pravopisu" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Kontroluji pravopis..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Povolit tabelace" + +#: formatimporter.cpp:132 +msgid "" +"

Folder mirroring is not possible anymore (see basket.kde.org for more information).

The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

" +msgstr "" +"

Zrcadlení adresářů již není možné (viz basket.kde.org pro více informací).

Adresář %1 byl " +"zkopírován pro potÅ™eby košíku. Můžete buÄ smazat tento adresář nebo smazat " +"košík, nebo použít obÄ› možnosti . Ale nezapomeňte, že modifikací jednoho již " +"nedojde k modifikací druhého, protože jsou to tyní oddlÄ›lené entity.

" + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Import zrcadlení adresáře" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +#, fuzzy +msgid "Export to HTML" +msgstr "&Exportovat do HTML..." + +#: htmlexporter.cpp:79 +#, fuzzy +msgid "Exporting to HTML. Please wait..." +msgstr "&Exportovat do HTML..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_files" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "ikons" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "images" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +#, fuzzy +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "images" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "data" + +#: htmlexporter.cpp:319 +#, fuzzy +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"VytvoÅ™eno pomocí %1, KDE nástroj pro zachytávání poznámek a udržování " +"velkého množství dat na dlani." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Výchozí)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Jiný..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Seznam osobních klíÄů" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Email" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Zvolte tajný klíÄ:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "VýÄet klíÄů se neÄekanÄ› zkrátil." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Nepodporovaný algoritmus" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Chybné heslo." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Vybrat ikonu" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Procházet..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(VÅ¡echny ikony)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Poslední)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Akce" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Aplikace" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Zařízení" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Souborový systém" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Typy souborů" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|ikony (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" + +#: likeback.cpp:380 +#, fuzzy +msgid "&Send a Comment to Developers" +msgstr "Poslat komentář" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Vítejte do této testovací verze %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "VaÅ¡e komentáře jsou důležité pro zlepÅ¡ení." + +#: likeback.cpp:437 +#, fuzzy +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Pokaždé co zažijete positivní nebo frustrující zkuÅ¡enost, prosím kliknÄ›te na " +"přísluÅ¡nou ruÄiÄku umístÄ›nou pod titulkem okna, struÄnÄ› popiÅ¡te co se Vám " +"líbí nebo nelíbí a kliknÄ›te Poslat." + +#: likeback.cpp:441 +#, fuzzy +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Pokaždé co zažijete positivní nebo frustrující zkuÅ¡enost, prosím kliknÄ›te na " +"přísluÅ¡nou ruÄiÄku umístÄ›nou pod titulkem okna, struÄnÄ› popiÅ¡te co se Vám " +"líbí nebo nelíbí a kliknÄ›te Poslat." + +#: likeback.cpp:445 +#, fuzzy +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Pokaždé co zažijete positivní nebo frustrující zkuÅ¡enost, prosím kliknÄ›te na " +"přísluÅ¡nou ruÄiÄku umístÄ›nou pod titulkem okna, struÄnÄ› popiÅ¡te co se Vám " +"líbí nebo nelíbí a kliknÄ›te Poslat." + +#: likeback.cpp:454 +#, fuzzy +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Stejný princip platí i pro rychlé nahlášení bugreportu: staÄí kliknou na " +"ikonu bugu v pravém horním rohu okna, popiÅ¡te jej a kliknÄ›te Poslat." + +#: likeback.cpp:457 +#, fuzzy +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Pokaždé co zažijete positivní nebo frustrující zkuÅ¡enost, prosím kliknÄ›te na " +"přísluÅ¡nou ruÄiÄku umístÄ›nou pod titulkem okna, struÄnÄ› popiÅ¡te co se Vám " +"líbí nebo nelíbí a kliknÄ›te Poslat." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "" + +#: likeback.cpp:469 +#, fuzzy +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "uvítací stránka tohoto wizardu." + +#: likeback.cpp:473 +#, fuzzy +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "když kliknu na tlaÄítko PÅ™idat, nic se nestane." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Pomozte vylepÅ¡it aplikaci" + +#: likeback.cpp:557 +#, fuzzy +msgid "Email Address" +msgstr "Nastavit emailovou adresu" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Prosím zadejte VaÅ¡i emailovou adresu." + +#: likeback.cpp:559 +#, fuzzy +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Ta bude použita pro zpÄ›tné kontaktování, pokud budou potÅ™eba další informace " +"k vaÅ¡emu původnímu komentáři, jak reprodukovat chybu kterou jste reportoval, " +"poslat Vám opravu chyby pro její otestování..." + +#: likeback.cpp:560 +#, fuzzy +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"Emailová adresa je nepovinná. Pokud ji neposkytnete, Váš komentář bute " +"odeslát anonymnÄ›. V tomto případÄ› pouze kliknÄ›te OK." + +#: likeback.cpp:633 +#, fuzzy +msgid "Send a Comment to Developers" +msgstr "Poslat komentář" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "" + +#: likeback.cpp:722 +#, fuzzy +msgid "&Send Comment" +msgstr "Poslat komentář" + +#: likeback.cpp:726 +#, fuzzy +msgid "&Email Address..." +msgstr "Nastavit emailovou adresu" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "" + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" + +#: likeback.cpp:771 +#, fuzzy +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Neptejte se na nové vlastnosti: VaÅ¡e přání budou ignorována." + +#: likeback.cpp:839 +msgid "

Error while trying to send the report.

Please retry later.

" +msgstr "

Chyba při posílání zprávy.

Prosím, zkuste později.

" + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Chyba přenosu" + +#: likeback.cpp:843 +#, fuzzy +msgid "" +"

Your comment has been sent successfully. It will help improve the " +"application.

Thanks for your time.

" +msgstr "" +"

Váš komentář byl úspěšně odeslán.

Díky za Váš Äas. Pomůže to ke " +"zlepÅ¡ení aplikace.

" + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Komentář odeslán" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "S&klonÄ›né" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&TuÄné" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Vždy" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Nikdy" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Po pÅ™ejetí myší" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Pokud myÅ¡ opustí" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Podtrhnout:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Ba&rva:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Barva po pÅ™ejetí &myší:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Velikost &ikony:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Žádný" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Velikost ikony" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Dvojitá velikost ikony" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Trojitá velikost ikony" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Náhled:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Stále vidíte obrázky i po zakázání náhledů?" + +#: linklabel.cpp:607 +#, fuzzy +msgid "" +"

This is normal because there are several type of notes.
This setting " +"only applies to file and local link notes.
The images you see are image " +"notes, not file notes.
File notes are generic documents, whereas image " +"notes are pictures you can draw in.

When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
For instance, " +"when dropping image or text files, image and text notes are created for them." +"
For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

" +msgstr "" +"

To je normální protože existuje několik typů poznámek.
Tohle nastavení " +"ovlivní pouze soubory a lokální odkazy.
A obrázky které vidíte jsou " +"obrázkové poznámky, ne souborové poznámky.
Souborové poznámky jsou obecné " +"dokumenty, zatímco obrázkové poznámky jsou obrázky, které můžete vtáhnout.

Když upouštíte soubory do košíků, %1 zjistí jejich typ a zobrazí obsah " +"souborů.
Například, když upustíte obrázek nebo textový soubor, obrázkové " +"a textové poznámky jsou pro ně vytvořeny.
Pro typy souborů které %2 " +"nezná, jsou zobrazeny jako obecné souborové poznámky pouze s ikonou nebo " +"náhledem souboru a názvem.

Pokud nechcete, aby aplikace tvořila " +"poznámky závisející na obsahu souboru, který upustíte, jděte na kartu " +"\"Obecné\" a odšktněte \"Obrázek nebo animace\" ve skupině \"Zobraz obsah " +"přidaného souboru pro následující typy\".

" + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Příklad" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimalizovat" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Košík" + +#: mainwindow.cpp:310 +msgid "

Do you really want to quit %1?

" +msgstr "

Opravdu chcete skonÄit %1?

" + +#: mainwindow.cpp:312 +#, fuzzy +msgid "" +"

Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

" +msgstr "" +"

MÄ›jte na pamÄ›ti, že nemusíte ukonÄit aplikaci pÅ™ed koncem Vaší KDE " +"relace: Aplikace bude nahrána když se znova pÅ™ihlásíte.

" + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Potvrdit ukonÄení" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Nový košík" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Barva pozadí" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "S&pravovat Å¡ablony..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Jeden sloupec" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Dva sloupce" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "TÅ™i sloupce" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "VolnÄ›" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Å ablona:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Košíky)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Vyt&voÅ™it v:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Jak je to užiteÄné?" + +#: newbasketdialog.cpp:217 +#, fuzzy +msgid "" +"

Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

  • Grouping baskets by themes or topics;" +"
  • Grouping baskets in folders for different projects;
  • Making " +"sections with sub-baskets representing chapters or pages;
  • Making a " +"group of baskets to export together (to eg. email them to people).
" +msgstr "" +"

Vytváření košíků uvnitř jiných košíků umožňuje jejich lepší organizaci, " +"např.:

  • Seskupení košíků dle témat nebo námÄ›tů;
  • Seskupení " +"v adresářích pro rozdílné projekty;
  • VytvoÅ™ení sekce s podřízenými " +"košíky reprezentujících kapitoly nebo stránky;
  • VytvoÅ™ení skupin " +"košíků pro spoleÄný export (napÅ™. poslat je emailem).
" + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Volná forma" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "MyÅ¡lenková mapa" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Obrázek)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Prostý text" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Text" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Obrázek" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animace" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Zvuk" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Odkaz" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "SpouÅ¡tÄ›Ä" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Barva" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Neznámý" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Upravit tento prostý text" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Upravit tento text" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Editovat tento obrázek" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Editovat tuto animaci" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Upravit název tohoto zvuku" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Upravit název tohoto souboru" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Upravit tento odkaz" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Upravit tento spouÅ¡tÄ›Ä" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Upravit tuto barvu" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Upravit tento neznámý objekt" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Otevírám prostý text..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Otevírám prosté texty..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Otevírám prostý text s..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Otevírám prosté texty s..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Otevřít prostý text s:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Otevřít prosté texty s:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Otevírám text..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Otevírám texty..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Otevírám text s..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Otevírám texty s..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Otevřít text s:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Otevřít text s:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Velikost" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 x %2 pixelů" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Otevírám obrázek..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Otevírám obrázky..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Otevírám obrázek s..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Otevírám obrázky s..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Otevřít obrázek s:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Otevřít obrázky s:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "KliknÄ›te pro náhled v plné velikosti" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Otevírám animaci..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Otevírám animace..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Otevírám animaci s..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Otevírám animace s..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Otevřít animaci s:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Otevřít animace s:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Typ" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Otevřít tento soubor" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Otevírám soubor..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Otevírám soubory..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Otevírám soubory s..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Otevírám soubory s..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Otevřít soubor s:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Otevřít soubory s:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Otevřít tento zvuk" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Otevírám zvuk..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Otevírám zvuky..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Otevírám zvuk s..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Otevírám zvuky s..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Otevřít zvuk s:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Otevřít zvuky s:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Cíl" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Otevřít tento odkaz" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Odkaz nemá URL, kterou otevřít." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Otevírám cíl odkazu..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Otevírám cíl odkazů..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Otevírám cíl odkazu s..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Otevírám cíl odkazů s..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Otevřít cíl odkazu s:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Otevřít cíl odkazů s:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (spustit v terminálu)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Komentář" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Příkaz" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Spustit tuto aplikaci" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "SpouÅ¡tÄ›Ä nemá příkaz, který spustit." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "SpouÅ¡tím aplikaci..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "SpouÅ¡tím aplikace..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "ÄŒervená: %1, Zelená: %2, Modrá: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Odstín: %1, Sytost: %2, Hodnota: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Název CSS barvy" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Název rozšířené CSS barvy" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Je webová barva" + +#: noteedit.cpp:381 +#, fuzzy +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Obrázky zde momentálnÄ› nemohou být editovány (příští verze bude zahrnovat " +"editor obrázků).\n" +"Chcete je otevřít s aplikací, která to dokáže?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Upravit obrázek" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Tento animovaný obrázek zde nemůže být upraven.\n" +"Chcete ho otevřít s aplikací, která to umí?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Upravit animaci" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Upravit barvu" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Typ této poznámky je neznámý a nemůže zde být editován.\n" +"Můžete ale chytnout nebo kopírovat poznámku do aplikace, která ji rozumí." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Upravit neznámou poznámku" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Upravit odkaz" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Automaticky" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Ikona:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Cíl:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Titulek:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Upravit spouÅ¡tÄ›Ä" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Vyberte příkaz k vykonání:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Odhad" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Pří&kaz:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Název:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "TuÄné" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Podtržené" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Zarovnat vlevo" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Zarovnat na stÅ™ed" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Zarovnat vpravo" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Zarovnat do bloku" + +#: notefactory.cpp:445 +msgid "" +"

%1 doesn't support the data you've dropped.
It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

" +msgstr "" +"

%1 nepodporuje data která jste upustila.
Ale vytvořila obecnou " +"poznámku, umožňující Vám ji chytnou nebo kopírovatit do aplikace, která ji " +"rozumí.

Pokud chcete podporu pro tyto data, prosím kontaktujte " +"vývojáře nebo navštivte BasKet " +"Drop Database.

" + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Nepodporoané MIME typy" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&PÅ™esunout zde\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Kopírovat zde\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "&Odkazovat zde\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&ZruÅ¡it\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importovat ikonu jako obrázek" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Zvolte velikost ikony k importu jako obrázek:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Nahrát obsah souboru do poznámky" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Ochrana heslem" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Nebyl vybrán osobní klíÄ." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Košík" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, fuzzy, no-c-format +msgid "&Export" +msgstr "&Importovat" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importovat" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&PÅ™ejít" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Poznámka" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&ZnaÄky" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "LiÅ¡ta pro formátování textu" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<r:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, fuzzy, no-c-format +msgid "&No protection" +msgstr "Ochrana heslem" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Chránit košík &heslem" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, fuzzy, no-c-format +msgid "Protect basket with private &key:" +msgstr "Chránit košík osobním &klíÄem" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "Vlevo" + +#: settings.cpp:368 +msgid "On right" +msgstr "Vpravo" + +#: settings.cpp:369 +#, fuzzy +msgid "&Basket tree position:" +msgstr "Pozic&e stromu košíků:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "NahoÅ™e" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Dole" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Pozice nástrojové liÅ¡ty pro &filtrování:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Používat bubliny pro ohlášení výsledku globálních akcí" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Ikona systémového panelu" + +#: settings.cpp:407 +#, fuzzy +msgid "&Dock in system tray" +msgstr "&Skrýt v systémové Äásti panelu" + +#: settings.cpp:416 +#, fuzzy +msgid "&Show current basket icon in system tray icon" +msgstr "Zobrazit ikonu &souÄasného košíku v systémovém panelu" + +#: settings.cpp:426 +#, fuzzy +msgid "&Hide main window when mouse leaves it for" +msgstr "&Skrýt hlavní okno, když ho opustí kurzor myÅ¡i na" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " desetiny sekundy" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"&Obnovit hlavní okno, když myÅ¡ pÅ™ejede pÅ™es ikonu v systémovém panelu na" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "&Animovat zmÄ›ny v košících" + +#: settings.cpp:514 +#, fuzzy +msgid "&Show tooltips in baskets" +msgstr "Zobrazit &nástrojové tipy v košících" + +#: settings.cpp:517 +#, fuzzy +msgid "&Big notes" +msgstr "Vel&ké poznámky" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Zeptat se na potvrzení pÅ™ed &smazáním poznámky" + +#: settings.cpp:533 +#, fuzzy +msgid "&Export tags in texts" +msgstr "E&xportovat znaÄky v textech" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Kdy se to použije?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"To se použije když kopírujete a vložíte, nebo chytnete a pustíte poznámky do " +"textového editoru." + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Pokud je povoleno, správnÄ› dovolí vložit znaÄku jako textový ekvivalent." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Například, seznam poznámek se znaÄkami To Do a Hotovo jsou " +"exportovány jako řádky, kterým pÅ™edchází [ ] nebo [x], " +"reprezentujících prázdný rámeÄek a zaÅ¡krtnutý rámeÄek." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Seskupit novou poznámku kliknutím na pravou stranu Äáry pro vložení" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Jak seskupit novou poznámku?" + +#: settings.cpp:557 +msgid "" +"

When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

" +msgstr "" +"

Pokud je tato volba povolena, Äára pro vložení neumoňuje jen vkládat " +"poznámky na pozici kurzoru, ale také umožňuje seskupovat nové poznámky s " +"tÄ›mi, které se nacházejí pod pozicí kurzoru:

" + +#: settings.cpp:559 +msgid "" +"

Place your mouse between notes, where you want to add a new one.
Click " +"on the left of the insertion-line middle-mark to insert a note." +"
Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

" +msgstr "" +"

Umístěte myš mezi poznámky, kde chcete přidat novou.
KliknÄ›te na " +"levou stranu vkládací Äáry pro vložení poznámky.
Klikněte " +"vpravo pro seskupení poznámky, s tou pod nebo nad - " +"záleží na pozici Vaší myši.

" + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "NedÄ›lej nic" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Vložit schránku" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Vložit spouÅ¡tÄ›Ä" + +#: settings.cpp:581 +#, fuzzy +msgid "Insert color from screen" +msgstr "Zachytit barvu z obrazovky" + +#: settings.cpp:582 +#, fuzzy +msgid "Load note from file" +msgstr "NaÄíst ze &souboru..." + +#: settings.cpp:583 +#, fuzzy +msgid "Import Launcher from KDE Menu" +msgstr "Importovat spouÅ¡tÄ›Ä z &KDE nabídky..." + +#: settings.cpp:584 +#, fuzzy +msgid "Import icon" +msgstr "Im&portovat ikonu..." + +#: settings.cpp:585 +#, fuzzy +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+prostÅ™ední klik:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "na pozici kurzoru" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "" + +#: settings.cpp:603 +#, fuzzy +msgid " minutes" +msgstr "Žádné poznámky" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Použít GnuPG agenta pro košíky chránÄ›né &soukromým/veÅ™ejným klíÄem" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "" + +#: settings.cpp:693 +msgid "At current note" +msgstr "V souÄasné poznámce" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "&Nová velikost obrázku:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&X" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixelů" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Vizualizovat..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Zobrazit obsah pÅ™idaných souborů pro následující typy" + +#: settings.cpp:732 +#, fuzzy +msgid "&Plain text" +msgstr "Prostý &text" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML stránka" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Obrázek nebo animace" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Zvuk" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Audio nahrávka z konference" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "RoÄní zpráva" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Domovský adresář" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Spustit %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Zvuky" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Soubory" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "&Místní odkazy" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "&Síťové odkazy" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "S&pouÅ¡tÄ›Äe" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Otevřít &textové poznámky s aplikací:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Otevřít textové poznámky s:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Otevřít &obrázkové poznámky s aplikací:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Otevřít obrázky s:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Otevřít &animované poznámky s aplikací:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Otevřít animace s:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Otevřít &zvukové poznámky s aplikací:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Otevřít zvukové poznámky s:" + +#: settings.cpp:873 +#, fuzzy +msgid "" +"

If checked, the application defined below will be used when opening that " +"type of note.

Otherwise, the application you've configured in " +"Konqueror will be used.

" +msgstr "" +"

Pokud zatrženo, aplikace uvedená níže bude použita pro otevření tohoto " +"typu poznámky.

Jinak bude použita aplikace nastavená v Konqueroru.

" + +#: settings.cpp:882 +msgid "" +"

Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

" +msgstr "" +"

Zvolte aplikaci pro otevírání typů poznámek místo aplikací nastavených v " +"Konqueroru.

" + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Jak změnit aplikaci použitou k otevření webových odkazů ?" + +#: settings.cpp:904 +#, fuzzy +msgid "" +"

When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

  • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
  • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
  • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

" +msgstr "" +"

Webové odkazy jsou otvírány v různých aplikacích podle obsahu odkazu " +"(webová stránka, obrázek, PDF dokument...), jako by to byly soubory na VaÅ¡em " +"poÄítaÄi.

Tady je možno udÄ›lat, pokud chcete aby se webové adresy " +"otevíraly ve VaÅ¡em prohlížeÄi. Je to užiteÄné když nepoužíváte KDE (napÅ™. " +"GNOME, XFCE...).

  • OtevÅ™ete ovládací centrum KDE (pokud není " +"dostupné, zkuste zadat \"kcontrol\" v příkazové řádce);
  • pÅ™ejdÄ›te do" +"\"KDE Komponenty\" a pak \"VýbÄ›r komponent\" sekce;
  • Vybrat \"webový " +"prohlížeÄ\", zatrhnÄ›te \"v následujícím prohlížeÄi:\" a vložte název Vámi " +"preferovaného prohlížeÄe (napÅ™. \"firefox\" nebo \"epiphany\").
  • Nyní, když kliknete na jakýkoliv odkaz zaÄínající \"http://..." +"\", bude otevÅ™en v prohlížeÄi, který jste si zvolili (napÅ™. Mozilla Firefox " +"nebo Epiphany nebo...).

    Pro a více jemnÄ›jší konfiguraci (jako " +"otevírání webových stránek ve VaÅ¡em prohlížeÄi), pÅ™eÄtÄ›te si druhý odkaz " +"nápovÄ›dy.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Jak změnit aplikaci použitou k otevření souborů a odkazů ?" + +#: settings.cpp:923 +#, fuzzy +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Tady se dozvíte, jak nastavit aplikace pro jednotlivé typy souborů. To " +"platí i pro webové odkazy, pokud zvolíte neotevírat je systematicky ve " +"webovém prohlížeÄi (viz první odkaz nápovÄ›dy). Výchozí nastavení může pro " +"Vás být vhodné, ale tento tip je užiteÄný pokud používáte GNOME, XFCE, nebo " +"jiné prostÅ™edí než KDE.

    Tohle je příklad, jak otevírat HTML stránky ve " +"webovém prohlížeÄi (a pÅ™itom používat další aplikace pro jiné adresy nebo " +"soubory). Opakujte tyto kroky pro každý typ souboru, který chcete otevřít ve " +"specifické aplikaci.

    • OtevÅ™ete ovládací centrum KDE (pokud není " +"dostupné, zkuste zadat \"kcontrol\" v příkazové řádce);
    • PÅ™ejdÄ›te do " +"\"KDE Komponenty\" a pak do \" Asociace souborů\";
    • Rozbalte strom " +"\"text\" a kliknÄ›te \"html\";
    • V seznamu aplikací, pÅ™esuňte Váš " +"prohlížeÄ na první pozici;
    • To samé platí typ \"aplikace -> xhtml+xml" +"\".
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importovat strukturu" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Jak importovat poznámky?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Ponechat původní strukturu (vÅ¡echny poznámky v oddÄ›leném košíku)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&Poznámky první úrovnÄ› v oddÄ›lených košících" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&VÅ¡echny poznámky v jednom košíku" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "" + +#: softwareimporters.cpp:82 +#, fuzzy +msgid "One ¬e per line" +msgstr "Na každ&ou řádku" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "" + +#: softwareimporters.cpp:95 +#, fuzzy +msgid "&All in one note" +msgstr "&VÅ¡echny poznámky v jednom košíku" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Z KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Z KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Z Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Z Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Nemohu importovat tento soubor. BuÄ je poÅ¡kozený, nebo nejde o soubor " +"TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Å patný formát souboru" + +#: softwareimporters.cpp:671 +#, fuzzy +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Poznámka je Å¡ifrována. Import zatím nepodporuje Å¡ifrované poznámkyt. Prosím " +"odstraňte Å¡ifrování s TuxCards a znovu naimportujte soubor." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Å ifrované poznámky zatím nepodporovány" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Poznámka k šifrování.
    Import zatím nepodporuje " +"šifrované poznámkyt. Prosím odstraňte šifrování s TuxCards a znovu " +"naimportujte soubor.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    ZavÅ™ení hlavního okna nechá %1 spuÅ¡tÄ›ný v systémovém panelu. Použijte " +"UkonÄit z menu Košík k ukonÄení aplikace.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Skrývání v systémovém panelu" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Vložen výbÄ›r do košíku %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimalizovat" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Obnovit" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (ZamÄeno)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "To Do" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Nezkontrolováno" + +#: tag.cpp:544 +msgid "Done" +msgstr "Hotovo" + +#: tag.cpp:545 +msgid "Progress" +msgstr "PrůbÄ›h" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Priorita" + +#: tag.cpp:599 +msgid "Low" +msgstr "Nízká" + +#: tag.cpp:599 +msgid "Medium" +msgstr "StÅ™ední" + +#: tag.cpp:600 +msgid "High" +msgstr "Vysoká" + +#: tag.cpp:600 +msgid "Preference" +msgstr "PÅ™ednost" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Å patné" + +#: tag.cpp:601 +msgid "Good" +msgstr "Dobré" + +#: tag.cpp:601 +#, fuzzy +msgid "Excellent" +msgstr "Excelentní" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "ZvýraznÄ›né" + +#: tag.cpp:667 +msgid "Important" +msgstr "Důležité" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Velmi důležité" + +#: tag.cpp:668 +msgid "Idea" +msgstr "MyÅ¡lenka" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "M." + +#: tag.cpp:668 +msgid "Title" +msgstr "Titulek" + +#: tag.cpp:669 +msgid "Code" +msgstr "Kód" + +#: tag.cpp:669 +msgid "Work" +msgstr "Práce" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "P." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Osobní" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "O." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Veselé" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "PÅ™izpůsobit znaÄky" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "No&vá znaÄka" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Nový s&tav" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Posunout nahoru (Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Posunout dolů (Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "ZnaÄka" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Odstranit" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Zkratka:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Stav" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&Název:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "&Odstranit" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblém:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Barva pozadí:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Text:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "Ba&rva:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Font:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Velikost:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Te&xtový ekvivalent:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Pokud je vyplnÄ›no, dovolí Vám vložit tuto znaÄku nebo stav jako textový " +"ekvivalent." + +#: tagsedit.cpp:496 +#, fuzzy +msgid "On ever&y line" +msgstr "Na každ&ou řádku" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Co to znamená?" + +#: tagsedit.cpp:502 +#, fuzzy +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Pokud má poznámka nÄ›kolik řádků, můžete vybrat k exportu znaÄku nebo stav na " +"prvním řádku nebo na každém řádku poznámky." + +#: tagsedit.cpp:504 +#, fuzzy +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"V příkladu uvedeném výše, znaÄka vrchní poznámky is pouze exportována na " +"prvním řádku, jakožto znaÄka spodní poznámky je exportována na každém řádku " +"poznámky." + +#: tagsedit.cpp:901 +#, fuzzy +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "Smazání znaÄky ji odstraní ze vÅ¡ech poznamek, ke kterým je pÅ™iÅ™azena." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Potvrdit smazání znaÄky" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Smazat znaÄku" + +#: tagsedit.cpp:908 +#, fuzzy +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Smazání stavu jej odstraní ze vÅ¡ech poznamek, ke kterým je stav pÅ™iÅ™azen." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Potvrdit smazání stavu" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Smazat stav" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 x 16 pixelů" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 x 22 pixelů" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 x 32 pixelů" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 x 48 pixelů" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 x 64 pixelů" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 x 128 pixelů" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Změňte velikost okna pro vybrání\n" +"velikosti obrázku a zavÅ™ete ho\n" +"nebo stisknÄ›te Esc pro uložení zmÄ›ny." + +#~ msgid "&Export to HTML..." +#~ msgstr "&Exportovat do HTML..." + +#~ msgid "Notes matching the filter "%1":" +#~ msgstr "Poznámky odpovídající filtru "%1":" + +#~ msgid "A set of baskets to keep a full range of data on hand." +#~ msgstr "Soubor košíků k zachování velké Å¡kály dat na dlani." + +#~ msgid "Invalid recipient encountered" +#~ msgstr "Neplatný adresát " + +#~ msgid "Examples:" +#~ msgstr "Příklady:" + +#~ msgid "I like..." +#~ msgstr "Líbí se mi..." + +#~ msgid "" +#~ "_: I like...\n" +#~ "the nice new artwork." +#~ msgstr "pÄ›kný nový artwork." + +#~ msgid "Very refreshing." +#~ msgstr "Velmi roztomilé." + +#, fuzzy +#~ msgid "I dislike..." +#~ msgstr "Líbí se mi..." + +#~ msgid "Too time consuming." +#~ msgstr "SpotÅ™ebuje spoustu Äasu." + +#~ msgid "I found a bug..." +#~ msgstr "Nalezl jsem bug..." + +#~ msgid "Hide &Toolbar" +#~ msgstr "Skrýt &nástrojovou liÅ¡tu" + +#~ msgid "&No password" +#~ msgstr "&Bez hesla" + +#~ msgid "New notes &place:" +#~ msgstr "Nové &umístÄ›ní poznámky:" + +#~ msgid "Customize look of file, sound, link and launcher notes:" +#~ msgstr "" +#~ "PÅ™izpůsobit vzhled souborových, zvukových, odkazujících a spouÅ¡tÄ›cích " +#~ "poznámek:" + +#~ msgid "" +#~ "This page groups non-standard options that, once learned,\n" +#~ "can be very powerful and time saving in the context of %1:" +#~ msgstr "" +#~ "Tato stránka seskupí nestandardní volby, které jakmile se nauÄíte,\n" +#~ "mohou bý velmi užiteÄné a uÅ¡etří Äas v kontextu %1:" + +#~ msgid "Only english and french languages are accepted." +#~ msgstr "Pouze anglický a francouzský jazyk je akceptován." + +#~ msgid "I Like..." +#~ msgstr "Líbí se mi..." + +#~ msgid "I Do not Like..." +#~ msgstr "Nelíbí se mi..." + +#~ msgid "I Found a Bug..." +#~ msgstr "Nalezl jsem bug..." + +#~ msgid "Configure..." +#~ msgstr "Nastavit..." + +#~ msgid "What's &This?" +#~ msgstr "Co je &toto?" + +#~ msgid "&Change or Remove Email Address..." +#~ msgstr "&ZmÄ›nit nebo odstranit emailovou adresu..." + +#~ msgid "&Do not Help Anymore" +#~ msgstr "&Již více nepomáhat" + +#~ msgid "" +#~ "Are you sure you do not want to participate anymore in the application " +#~ "enhancing program?" +#~ msgstr "Jste si jistí, že se dále nechcete podílet na vylepÅ¡ování aplikace?" + +#~ msgid "Do not Help Anymore" +#~ msgstr "Již více nepomáhat" + +#~ msgid "I do not like..." +#~ msgstr "Nelíbí se mi..." + +#~ msgid "" +#~ "You can change or remove your email address whenever you want. For that, " +#~ "use the little arrow icon at the top-right corner of a window." +#~ msgstr "" +#~ "Můžete zmÄ›nit nebo odstranit VaÅ¡i emailovou adresu kdykoliv budete chtít. " +#~ "V tomto případÄ› použijte ikonu malé Å¡ipky v pravém horním rohu okna." + +#~ msgid "Your email address (keep empty to post comments anonymously):" +#~ msgstr "VaÅ¡e emailová adresa (nevyplňujte pro anonymní poslání komentáře):" + +#~ msgid "Please briefly describe what you like." +#~ msgstr "StruÄnÄ› prosím popiÅ¡tÄ› co se Vám líbí." + +#~ msgid "Please briefly describe what you do not like." +#~ msgstr "StruÄnÄ› prosím popiÅ¡te, co se Vám nelíbí." + +#~ msgid "Please briefly describe the bug you encountered." +#~ msgstr "StruÄnÄ› prosím popiÅ¡te, na jaký chybu jste narazili." + +#~ msgid "Send" +#~ msgstr "Poslat" + +#~ msgid "Only english language is accepted." +#~ msgstr "Pouze anglický jazyk je akceptován." + +#~ msgid "" +#~ "Note that to improve this application, it's important to tell us the " +#~ "things you like as much as the things you dislike." +#~ msgstr "" +#~ "Pamatujte, že pro zlepÅ¡ení této aplikace je důležité říci nám vÄ›ci, které " +#~ "se Vám líbí stejnÄ› jako vÄ›ci které se Vám nelíbí." diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..11b33ba --- /dev/null +++ b/po/da.po @@ -0,0 +1,3509 @@ +# translation of da.po to +# +# Martin Schlander , 2008. +msgid "" +msgstr "" +"Project-Id-Version: da\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2008-06-27 16:12+0200\n" +"Last-Translator: Martin Schlander \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.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Martin Schlander" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "mschlander@opensuse.org" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Tager sig af dine ideer.

    Et notat-program som gør det nemt " +"at registrere ideer som de falder dig ind, og hurtigt finde dem senere. " +"Organisering af dine noter har aldrig været så nemt.

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "BasKet notesblokke" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Udvikler, vedligeholder" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "BasKet-kryptering, Kontact-integration, Knowit-importering" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Kurve autolåser, gemmestatus-ikon, HTML kopiér/indsæt, kurvnavn værktøjstip, " +"slip til kurvnavn" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Ikon" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Gem som Basket-arkiv" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Gemmer som Basket-arkiv. Vent venligst ..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Denne fil er ikke et Basket-arkiv" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Fejl i Basket-arkiv" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Denne fil er korrupt. Den kan ikke åbnes." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" +"Denne fil blev oprettet med en nylig version af %1. Den kan åbnes, men ikke " +"al information vil være tilgængelig for dig. For eksempel kan nogle noter " +"mangle " +"fordi de er af en type som kun er tilgængelig i nye versioner. Når du gemmer " +"filen " +"igen, bør du overveje at gemme den til en anden fil, for at bevare " +"originalen." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" +"Denne fil blev oprettet med en nylig version af %1. Opgradér venligst til en " +"nyere version for at kunne åbne den fil." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Backup & Gendan" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Gem mappe" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Dine kurve er i øjeblikket gemt i den mappe:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Flyt til anden mappe ..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Brug anden eksisterende mappe ..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Hvorfor gøre det?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or " +"~/Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are " +"desynced.

    Please remember that you should not change the content " +"of that folder manually (eg. adding a file in a basket folder will not add " +"that file to the basket).

    " +msgstr "" +"

    Du kan flytte mappen hvortil %1 gemmer dine kurve:

    • Gem " +"dine kurve pÃ¥ et synligt sted i din hjemmemappe, som ~/Noter eller " +"~/Kurve, sÃ¥ du manuelt kan lave backup nÃ¥r du har lyst.
    • Gem dine " +"kurve pÃ¥ en server for at dele dem mellem to computere.
      I dette tilfælde, " +"montér den delte mappe til det lokale filsystem og bed %2 om at bruge dette " +"monteringspunkt.
      Advarsel, du bør ikke køre %3 på samme tid på begge " +"computere, ellers risikerer du at miste data mens de to applikationer er ude " +"af " +"synkronisering.

    Husk venligst at du ikke bør ændre mappens " +"indhold " +"manuelt (f.eks. vil tilføjelsen af en fil i en kurvmappe ikke tilføje den " +"fil til kurven).

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Backup" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Backup ..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Gendan en backup ..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Seneste backup: Aldrig" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Seneste backup: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Vælg en mappe hvortil kurve skal flyttes" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "Mappen %1 er ikke tom. Vil du underkende dette?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Underkend mappe?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "&Underkend" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"Flytning af dine kurve %1 er gennemført. %2 vil blive genstartet " +"for at tage ændringen i betragtning." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Vælg en eksisterende mappe til at gemme kurve" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" +"Ændring af din kurv-gemme-mappe til %1 er blevet gennemført. %2 vil " +"blive genstartet for at tage ændringen i betragtning." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Baskets_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Tar-arkiver komprimeret af Gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Alle filer" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Backup-kurve" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Filen %1 eksisterer allerede. Vil du virkelig underkende den?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Underkend fil?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Laver backup af kurve. Vent venligst ..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Åbn Basket-arkiv" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "README.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" +"Dette er en sikkerhedskopi af dine kurve som de var før du begyndte at " +"gendanne backuppen %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" +"Hvis gendannelsen blev gennemført og du gendannede det du ønskede " +"kan du nu fjerne denne mappe." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" +"Hvis noget gik galt under gendannelsesprocessen kan du genbruge denne " +"mappe til at gemme dine kurve og intet vil gå tabt." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" +"Vælg \"Basket\" -> \"Backup & Gendan ...\" -> \" Brug anden eksisterende " +"mappe ...\" og vælg den mappe." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Gendanner %1. Vent venligst ..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file " +"%1." +msgstr "" +"Hvis noget går galt under gendannelsesprocessen, så læs filen " +"%1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Gendan kurve" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" +"Dette arkiv er enten ikke en backup af kurve eller den er korrupt. Den kan " +"ikke " +"importeres. Dine gamle kurve er blevet bevaret i stedet." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Gendannelsesfejl" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"Gendannelse af din backup til %1 er gennemført. %2 vil blive " +"genstartet for at tage ændringen i betragtning." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Genstart" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Kurve før gendannelse" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Kurve før gendannelse (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Den nye note matcher ikke filteret og vil blive skjult." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "En ny note matcher ikke filteret og vil blive skjult." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Nogle nye noter matcher ikke filteret og vil blive skjult." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "De nye noter matcher ikke filteret og vil blive skjult." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Gruppér" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Indsæt" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Sluppet til kurven %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Denne besked bør aldrig vise sig. Hvis den gør er dette program fejlfyldt! " +"Rapportér " +"venligst fejlen til udvikleren." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Indsæt note here\n" +"Højreklik for flere valgmuligheder" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Ændr størrelse på disse kollonner" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Ændr størrelse på gruppe" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Ændr størrelse på note" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Vælg eller flyt denne note" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Vælg eller flyt denne gruppe" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Tildel eller fjern mærker fra denne note" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Tildelte mærker: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Udvid denne gruppe" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Fold denne gruppe sammen" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Gruppér note med den nedenunder\n" +"Højreklik for flere valgmuligheder" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Gruppér note med den ovenfor\n" +"Højreklik for flere valgmuligheder" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Tilføjet" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Seneste ændring" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Klik til højre for at gruppere i stedet for at indsætte" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Klik til venstre for at indsætte i stedet for at gruppere" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Lås op" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Adgangskodebeskyttet kurv." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Tryk på Lås op for at få adgang." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "Kryptering er ikke understøttet af
    denne version af %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"For at få kurve til at forblive ulåste ændres den automatiske
    " +"låsevarighed i " +"programopsætningen." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Indlæser ..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Tilpas ..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrér efter dette mærke" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrér efter denne &tilstand" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Mærker" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Vil du virkelig slette denne note?\n" +"Vil du virkelig slette disse %n noter?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Slet note\n" +"Slet noter" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Kopierede note til klippebordet.\n" +"Kopierede noter til klippebordet." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Klip note til klippebordet.\n" +"Klip noter til klippebordet." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Kopierede note til markering.\n" +"Kopierede noter til markering." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Ikke i stand til at åbne denne note." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Du har ikke tilladelse til at åbne denne fil." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Gem til fil" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Indtast venligst adgangskoden for følgende private nøgle:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Indtast venligst adgangskoden for kurven %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Tildel venligst en adgangskode til kurven %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Utilstrækkelig diskplads til at gemme Basket-data" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Forkerte Basket-filtilladelser" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Fjern venligst filer fra disken %1 for at lade programmet gemme dine " +"ændringer sikkert." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Dårlige filtilladelser for %1. Kontrollér venligst at du har " +"skriveadgang til den " +"og forældremapperne." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Gemmefejl" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Beklager, men oprettelsen af mappen til denne nye kurve fejlede." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Oprettelse af kurv fejlede" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Beklager, men skabelon-kopieringen for denne nye kurv fejlede." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Beklager, men skabelontilpasningen for denne nye kurv fejlede." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Egenskaber for kurv" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Navn" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "Baggrundsb&illede:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "&Baggrundsfarve:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "&Tekstfarve:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Ingen)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposition" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Kol&onner:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Fri form" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mindmap" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Tastaturgenvej" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Lær nogle tips ..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Nemt at huske genveje:
    Med den første " +"valgmulighed, at give kurven en genvej i form af Alt+bogstav" +" " +" vil understrege det bogstav i kurv-træet.
    For eksempel, hvis du " +"tildeler genvejen Alt+T til en kurv kaldet Tips vil kurven " +"blive vist som Tips i træet. Det hjælper dig til at " +"visualisere genvejene for at huske dem hurtigere.

    Lokal " +"vs. Global:
    Den første valgmulighed tillader at vise kurven mens " +"hovedvinduet er aktivt. Globale genveje er gyldige alle steder, selv hvis " +"vinduet er skjult.

    Vis vs. skift:
    Den sidste " +"valgmulighed " +"gør denne kurv til den aktuelle uden at åbne hovedvinduet. Det er " +"nyttigt i tillæg til de konfigurérbare globale genveje, f.eks. for at " +"indsætte " +"klippebordet eller markeringen i den aktuelle kurv, hvorsomhelst fra.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "V&is denne kurv" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Vis denne kurv (&global genvej)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "S&kift til denne kurv (global genvej)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Vis hvis der er ændringer som endnu ikke er gemt." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+slip: kopier, Shift+slip: flyt, Shift+Ctrl+Slip: link." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Denne kurv er låst.
    Klik for at låse den op.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Denne kurv er ulåst.
    Klik for at låse den.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Generelt" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Vis/skjul hovedvinduet" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Tillader dig at vise hovedvinduet hvis det er skjult, og at skjule det, hvis " +"det er " +"vist." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Indsæt klippebordets indhold i aktuel kurv" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Tillader dig at indsætte klippebordsindholdet i den aktuelle kurv uden at " +"behøve " +"at åbne hovedvinduet." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Vis navn på aktuel kurv" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Tillader dig at vide hvilken kurv der er aktuel uden at åbne hovedvinduet." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Indsæt markering i aktuel kurv" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Tillader dig at indsætte klippebordsmarkering i den aktuelle kurv uden at " +"behøve " +"at åbne hovedvinduet." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Opret en ny kurv" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Tillader dig at oprette en ny kurv uden at behøve at åbne hovedvinduet " +"(du kan da bruge de øvrige globale genveje for at tilføje en note, indsætte " +"klippebord " +"eller indsætte markering i denne nye kurv)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Gå til forrige kurv" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Tillader dig at skifte aktuel kurv til den forrige uden at behøve at " +"åbne hovedvinduet." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Gå til næste kurv" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Tillader dig at skifte aktuel kurv til den næste uden at behøve at åbne " +"hovedvinduet." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Indsæt tekstnote" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "" +"Tilføj en tekstnote til den aktuelle kurv uden at behøve at åbne " +"hovedvinduet." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Indsæt billednote" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Tilføj en billednote til den aktuelle kurv uden at behøve åbne " +"hovedvinduet." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Indsæt linknote" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Tilføj en linknote til den aktuelle kurv uden at behøve at åbne hovedvinduet." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Indsæt farvenote" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Tilføj en farvenote til den aktuelle kurv uden at behøve at åbne " +"hovedvinduet." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Pluk farve fra skærmen" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Tilføj en farvenote plukket fra en pixel på skærmen til den aktuelle kurv " +"uden at behøve at åbne hovedvinduet." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Grib skærmzone" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Grib en skærmzone som et billede i den aktuelle kurv uden at behøve at " +"åbne hovedvinduet." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Kurve" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Skriv venligst på engelsk eller fransk." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Kurvtræ

    Her er listen over dine kurve. Du kan organisere dine " +"date ved at putte dem i forskellige kurve. Du kan gruppere kurve efter emne " +"ved at oprette nye kurve inde i andre. Du kan gennemse dem ved at " +"klikke på en kurv for at åbne den, eller reorganisere dem med træk og slip." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Basket-arkiv ..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "S&kjul vindue" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "&HTML webside ..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt ..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards ..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "Tekst&fil ..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Backup && Gendan ..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "Sl&et" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Markér alle noter" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Af&markér alle" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Afmarkér alle markerede noter" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Omvend markering" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Omvend den aktuelle markering af noter" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Redigér ..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Åbn" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Åbn &med ..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "Gem &til fil ..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Gruppér" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "A&fgruppér" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Flyt til &toppen" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Flyt &op" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Flyt &ned" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Flyt til &bunden" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Tekst" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Link" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "B&illede" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Farve" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "Hurtigst&arter" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importér hurtigstarter fra KDE-menuen ..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&portér ikon ..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Indlæs fra &fil ..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "Far&ve fra skærm" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Grib skærm&zone" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Ny kurv ..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Ny &under-kurv ..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Ny søs&kende-kurv ..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Ny" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "Fje&rn" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Adgangsk&ode ..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "&Lås" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtrér" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrér alle &kurve" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "&Nulstil filter" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "F&orrige kurv" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "&Næste kurv" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Fold kurv" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Udvid kurv" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Konfigurér &globale genveje ..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "&Velkomstkurve" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Konvertering af klartekstnoter" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Konverterer klartekstnoter til rigtekstnoter ..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Låst" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Ingen noter" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n note\n" +"%n noter" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n markeret\n" +"%n markeret" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "Alle match" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "intet filter" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n match\n" +"%n match" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Plukkede farve til kurv %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Klartekstnoterne er blevet konverteret til rigtekst." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Konvertering afsluttet" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Der er ingen klartekstnoter at konvertere." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of " +"%2.

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Filen basketui.rc synes ikke at eksistere er eller for gammel.
    %1 " +"kan ikke " +"køre uden den og vil afslutte.

    Kontrollér venligst din " +"installation af " +"%2.

    Hvis du ikke har administrator adgang til at installere programmet " +"på hele systemet, kan du kopiere filen basketui.rc fra installationsarkivet " +"til mappen %4.

    Som sidste udvej, hvis du er " +"sikker på at programmet er korrekt installeret, men du havde en testversion " +"af " +"det, så forsøg at fjerne filen %5basketui.rc

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Ressource ikke fundet" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Kan ikke tilføje note." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Greb skærmzone til kurv %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Slet kurv" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Slet kun den kurv" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Slet note & undernoter" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Vil du virkelig fjerne kurven %1 og dens indhold?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Fjern kurv" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "Fje&rn kurv" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "%1 har følgende underkurve.
    Vil du også fjerne dem?
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Fjern underkurve" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "Fje&rn underkurve" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Basket-arkiver" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Klippebordsindhold indsat i kurven %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Markering indsat i kurven %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Ingen note blev tilføjet." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Kurven %1 er låst" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Låst)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Tildel nyt mærke ..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "Fje&rn alle" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 er gået ned! Vi beklager.\n" +"\n" +"Men, alt er ikke tabt! Du kan muligvis hjælpe os med at rette fejlen. " +"Information som beskriver nedbruddet er nedenfor, så klik blot send, eller " +"hvis du " +"har tid så skriv en kort beskrivelse af hvordan nedbruddet skete first.\n" +"\n" +"Mange tak." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Informationen nedenfor er til at hjælpe udviklerne med at identificere " +"problemet, " +"undlad venligst at ændre det." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 er gået ned! Vi beklager.\n" +"\n" +"Men ikke alt er tabt. Måske er der allerede en opgradering til rådighed som " +"løser " +"problemet. Kontrollér venligst din distributions softwarekilder." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Fejlfindingsvindue" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Eksportér kurv til HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Filnavn for HTML-side" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Filnavn:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "&Indlejr linkede lokale filer" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Indlejr &linkede lokale mapper" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "&Slet forrige filer i destinationsmappen" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&matér for indtryk" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Nulstil filter" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filter: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "M&ærke: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrér alle kurve" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Ikke mærket)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Mærket)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Automatisk stavekontrol" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Stavekontrol ..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Tillad tabulering" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more " +"information).

    The folder %1 has been copied for the basket " +"needs. You can either delete this folder or delete the basket, or use both. " +"But remember that modifying one will not modify the other anymore as they " +"are now separate entities.

    " +msgstr "" +"

    Spejling af mapper er ikke længere muligt (se basket.kde.org for mere " +"information).

    Mappen %1 er blevet kopieret efter kurvens " +"behov. Du kan enten slette denne mappe eller slette kurven, eller anvende " +"begge. " +"Men husk at ændring af den ene vil ikke ændre den anden længere da de " +"nu er adskilte enheder.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Import af mappespejling" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML-dokumenter" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Eksportér til HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Eksporterer til HTML. Vent venligst ..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_filer" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "ikoner" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "billeder" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "kurve" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "data" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"Lavet med %1, et KDE-værktøj til at tage noter og have information ved " +"hånden." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Standard)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Andet ..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Privat nøgleliste" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-mail" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Vælg hemmelig nøgle:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Nøgleliste uventet trunkeret." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Denne offentlige nøgle er ikke beregnet til kryptering" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Ikke understøttet algoritme" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Forkert adgangskode." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Vælg ikon" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Gennemse ..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Alle ikoner)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Nylige)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Handlinger" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Programmer" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Enheder" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Filsystem" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Filtyper" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Send programudviklere en kommentar om noget du synes om" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Send programudviklere en kommentar om noget du ikke synes om" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "Send programudviklere en kommentar om dårlig adfærd i programmet" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "Send programudviklere en kommentar om en ny funktion du ønsker" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "&Send en kommentar til udviklerne" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Velkommen til denne testversion af %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Velkommen til %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Dine kommentarer er vigtige for at hjælpe os med at forbedre det." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Hver gang du har en god eller frustrerende oplevelse, bedes du være venlig " +"og klikke på " +"det passende ansigt under vinduestitellinjen. Beskriv kort hvad du kan lide " +"eller " +"ikke kan lide og send." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Hver gang du har en god oplevelse, bedes du være venlig og klikke på " +"det smilende ansigt under vinduestitellinjen. Beskriv kort hvad du kan lide " +"og send." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Hver gang du har en frustrerende oplevelse, bedes du være venlig og klikke " +"på " +"det smilende ansigt under vinduestitellinjen. Beskriv kort hvad du ikke kan " +"lide og send." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the " +"broken-object icon in the top-right corner of the window, describe it and " +"click Send." +msgstr "" +"Følg samme princip for hurtigt at rapportere en fejl: klik blot på " +"ødelagt-objekt-ikonet i det øverste højre hjørne af vinduet, beskriv den og " +"klik send." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the " +"broken-object icon below the window title-bar, briefly describe the " +"mis-behaviour and click Send." +msgstr "" +"Hver gang du opdager en fejl i programmet, bedes du være venlig og klikke " +"på ødelagt-objekt-ikonet under vinduestitellinjen, beskriv kort den " +"uheldige adfære og klik på send." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Eksempel:\n" +"Eksempler:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Jeg kan lide den nye grafik. Meget forfriskende." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "Jeg kan ikke lide Velkomstsiden til den assistent. For tidskrævende." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"Programmet har en forkert adfærd når man klikker på " +"Tilføj-knappen. Der sker intet." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"I ønsker en ny funktion som tillader mig at sende mit arbejde med " +"e-mail." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Hjælp med at forbedre programmet" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "E-mail-adresse" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Angiv venligst din e-mail-adresse" + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Den vil kun blive brugt til at kontakte dig hvis mere information er " +"nødvendig omkring " +"dine kommentarer, spørge dig om hvordan fejlene du rapporterer kan " +"reproduceres, sende " +"fejlrettelser som du kan teste, osv." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"E-mail-adressen er valgfri. Hvis du angiver nogen, vil dine kommentarer " +"blive sendt anonymt." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Send en kommentar til udviklerne" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Send programudviklerne en kommentar om:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Noget du kan &lide " + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Noget du ikke kan li&de" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "En uheldig &opførsel i programmet" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "En ny &funktion du ønsker" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Vis kommentarknapper under &vinduestitellinjer" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Send kommentar" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "&E-mail-adresse ..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Angiv venligst en kort beskrivelse af din mening om %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Skriv venligst på engelsk." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Du kan måske bruge et online oversættelsesværktøj" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"For at gøre de kommentarer du sender mere brugbare til at forbedre dette " +"program, " +"forsøg da at sende lige dele af positive og negative kommentarer." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Anmod ikke om nye funktioner: Dine anmodninger vil blive ignoreret." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Fejl under forsøg på at sende rapport.

    Forsøg venligst igen senere." +"

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Overførselsfejl" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Dine kommentarer er blevet sendt. Det vil hjælpe med at forbedre " +"programmet.

    Tak for din tid.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Kommentar sendt" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&Kursiv" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Fed" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Altid" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Aldrig" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Under musecursor" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Når musen er udenfor" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Understregning:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Fa&rve:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Farve under &musecursor:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "&Ikonstørrelse:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Ingen" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Ikonstørrelse" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Fordobling af ikonstørrelse" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Tredobling af ikonstørrelse" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Forhåndsvisning:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Du deaktiverede forhåndsvisning men ser stadig billeder?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for " +"them.
    For type of files %2 does not understand, they are shown as generic " +"file notes with just an icon or file preview and a filename.

    If you do " +"not want the application to create notes depending on the content of the " +"files you drop, go to the \"General\" page and uncheck \"Image or " +"animation\" in the \"View Content of Added Files for the Following Types\" " +"group.

    " +msgstr "" +"

    Dette er normalt fordi der er adskillige typer af noter.
    Denne " +"indstilling " +"gælder kun for fil- og lokale linknoter.
    Billederne du ser er " +"billednoter, " +"ikke filnoter.
    Filnoter er almindelige dokumenter, hvorimod billednoter " +"er billeder du kan tegne i.

    NÃ¥r filer slippes i kurve, opdager %1 " +"deres type og viser dig indholdet af filerne.
    For eksempel når billed- " +"eller " +"tekstfiler slippes oprettes der billed- eller tekstnoter til dem.
    For " +"filtyper " +"som %2 ikke forstår, vises de som generiske filnoter med blot et ikon eller " +"filforhåndsvisning og et filnavn.

    Hvis du ikke ønsker at programmet " +"skal " +"oprette noter afhængigt af indholdet af de filer du slipper, gå da til " +"\"Generelt\"-siden og fjern markering ved \"Billed eller animation\" i " +"gruppen" +"\"Vis indhold af tilføjede filer for følgende typer\"

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Eksempel" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimér" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Kurv" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Vil du virkelig afslutte %1?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Bemærk at du ikke behøver afslutte programmet før du afslutter din " +"KDE-session. Hvis du afslutter din session mens programmet stadig kører, " +"vil programmet automatisk blive genstartet næste gang du logger ind.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Bekræft afslutning" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Ny kurv" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Baggrundsfarve" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "&Håndtering af skabeloner ..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "En kolonne" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "To kolonner" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Tre kolonner" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Fri" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Skabelon:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Kurve)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Op&ret i:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Hvorfor er det nyttigt?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or " +"topics;
    • Grouping baskets in folders for different " +"projects;
    • Making sections with sub-baskets representing chapters or " +"pages;
    • Making a group of baskets to export together (to eg. email " +"them to people).
    " +msgstr "" +"

    Oprettelse af kurve indeni andre kurve for at danne et hierarki tillader " +"dig " +"at være mere organiseret ved f.eks.at:

    • Gruppere kurve efter " +"temaer eller " +"emner;
    • Gruppere kurve i mapper for forskellige " +"projekter;
    • Lave sektioner med underkurve som repræsenterer kapitler " +"eller " +"sider;
    • Lave en gruppe af kurve til at eksportere sammen (f.eks. for " +"at sende " +"dem til folk med e-mail).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Fri form" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mindmap" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Billed)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Klartekst" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Tekst" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Billed" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animation" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Lyd" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Link" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Hurtigstarter" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Farve" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Ukendt" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Redigér dette klartekst" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Redigér dette tekst" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Redigér dette billed" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Redigér denne animation" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Redigér denne lyds filnavn" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Redigér navnet på denne fil" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Redigér dette link" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Redigér denne hurtigstarter" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Redigér denne farve" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Redigér dette ukendt objekt" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Åbner klartekst ..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Åbner klartekster ..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Åbner klartekst med ..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Åbner klartekster med ..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Åbn klartekst med:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Åbn klartekster med:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Åbner tekst ..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Åbner tekster ..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Åbner tekst med ..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Åbner tekster med ..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Åbn tekst med:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Åbn tekster med:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Størrelse" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 gange %2 pixels" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Åbner billed ..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Åbner billeder ..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Åbner billed med ..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Åbner billeder med ..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Åbn billed med:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Åbn billeder med:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Klik for visning i fuld størrelse" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Åbner animation ..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Åbner animationer ..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Åbner animation med ..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Åbner animationer med ..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Åbn animation med:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Åbn animationer med:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Type" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Åbn denne fil" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Åbner fil ..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Åbner filer ..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Åbner fil med ..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Åbner filer med ..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Åbn fil med:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Åbn filer med:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Åbn denne lyd" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Åbner lyd ..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Åbner lyde ..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Åbner lyd med ..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Åbner lyde med ..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Åbn lyd med:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Åbn lyde med:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Destination" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Åbn dette link" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Linket har ingen URL at åbne." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Åbner linkdestination ..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Åbner linkdestinationer ..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Åbner linkdestination med ..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Åbner linkdestinationer med ..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Åbn linkdestination med:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Åbn linkdestinationer med:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (kør i terminal)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Kommentar" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Kommando" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Kør dette program" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Hurtigstarteren har ingen kommando at køre." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Kører programmet ..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Kører programmer ..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Rød: %1, Grøn: %2, Blå: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Hue: %1, Saturation: %2, Value: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS farvenavn" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "CSS udvidet farvenavn" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Er webfarve" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Billeder kan ikke redigeres her i øjeblikket (næste version af BasKet " +"notesblokke " +"vil inkludere billedredigering).\n" +"Vil du åbne det med et program som forstår det?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Redigér billednote" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Dette animerede billed an ikke redigeres her.\n" +"Vil du åbne det med et program som forstår det?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Redigér animationsnote" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Redigér farvenote" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Typen af denne note er ukendt og kan ikke redigeres her.\n" +"Du kan dog trække og kopiere noten ind i et program som forstår " +"den." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Redigér ukendt note" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Redigér linknote" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Ikon:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "De&stination:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Titel:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Redigér hurtigstarternote" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Vælg en kommando at køre:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Gæt" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Komman&do:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Navn:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Fed" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Understregning" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Venstrejustering" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Centreret" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Højrejustering" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Justeret" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 understøtter ikke den data du har sluppet.
    Det opretter imidlertid " +"en generisk note, som tillader dig at trække eller kopiere det til et " +"program " +"som forstår det.

    Hvis du ønsker understøttelse af disse data, kontakt " +"da " +"venligst udvikleren eller besøg " +"BasKet " +"slip-database.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Ikke understøttet MIME type(r)" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Flyt her\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Kopiér her\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "&Link her\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Annullér\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importér ikon som billed" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Vælg størrelse på ikonet som skal importeres som billede:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Indlæs filindhold til en note" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Adgangskodebeskyttelse" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Ingen privat nøgle valgt." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Kurv" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Eksportér" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importér" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Kør" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Note" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Mærker" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Værktøjslinie til tekstformattering" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<er:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "I&ngen beskyttelse" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Beskyt kurv med en a&dgangskode" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+D" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Bes&kyt kurv med privat nøgle:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "Til venstre" + +#: settings.cpp:368 +msgid "On right" +msgstr "Til højre" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Placering af kurvtræ:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Øverst" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Nederst" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Placering af filterlinie:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "Anvend balloner til at rapportere res&ultater af globale handlinger" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Hvad er globale handlinger?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Du kan konfigurere globale genveje til at udføre visse handlinger uden at " +"vise " +"hovedvinduet. For eksempel kan du indsætte klippebordsindholdet, tage en " +"farve fra et punkt på skærmen, osv. Du kan også bruge musens rullehjul " +"over statusområdeikonet for at skifte den aktuelle kurv. Eller bruge " +"midterklik på ikonet for at indsætte aktuel markering." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Når du gør dette, vil %1 vise en lille beskedboble for at informere dig om " +"at " +"handlingen er blevet gennemført. Du kan deaktivere denne boble." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Bemærk at disse beskeder er smarte nok til ikke at vises hvis hovedvinduet " +"er synligt. Dette er fordi du allerede ser resultatet af dine handlinger in " +"hovedvinduet." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Statusområdeikon" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Dok i statusområde" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Vi&s aktuel kurvs ikon i statusområdeikonet" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "S&kjul hovedvindue når musen forlader det i" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "tiendedele af sekunder" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "Vis &hovedvinduet når musen er over statusområdeikonet i" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Ani&mér ændringer i kurve" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Vi&s værktøjstips i kurve" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "&Store noter" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Adfærd" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "&Omdan lines startende med * eller - til lister i tekstredigering" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Be&d om bekræftelse før sletning af noter" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "&Eksportér mærker i tekster" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Hvornår gælder dette?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Det gælder når du kopierer og indsætter eller trækker og slipper noter til " +"et tekstredigeringsprogram." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Hvis aktiveret, lader denne egenskab dig indsætte mærkerne som svarende til " +"tekst." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"For eksempel, eksporteres en liste af noter med Gøremål og " +"Afsluttet mærker som linjer med [ ] eller [x] foran, " +"som " +"repræsenterer hhv. et tomt og et afkrydset afkrydsningsfelt." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Gruppér en ny note når der klikkes til højre for indsættelseslinien" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Hvordan grupperes en ny note?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Når denne valgmulighed er aktiveret, tillader indsættelseslinien ikke kun " +"at indsætte noter ved cursorpositionen, men tillader dig også at gruppere en " +"ny " +"note med den under cursoren:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a " +"note.
    Click on the right to group a note, with the one " +"below or above, depending on where your mouse is.

    " +msgstr "" +"

    Pacér din mus mellem noter, hvor du vil tilføje en ny.
    Klik " +"til venstre for indsættelsesliniens midtermærke for at indsætte" +" en " +"note.
    Klik til højre for at gruppere en note, med den " +"nedenunder " +"eller over, afhængigt af hvor musen er.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Gør intet" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Indsæt klippebordet" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Indsæt hurtigstarternote" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Indsæt farve fra skærm" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Indlæs note fra fil" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importér hurtigstarter fra KDE-menu" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importér ikon" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+midterklik overalt:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "ved cursorpositionen" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "Lås a&utomatisk beskyttede kurve når lukket i" + +#: settings.cpp:603 +msgid " minutes" +msgstr "minutter" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Anvend GnuPG-agent til kurve beskyttet med &privat/offentlig nøgle" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Placering af nye noter:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Ved nuværende note" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "&Ny billedstørrelse:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&efter" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixels" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Visualisér" + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Vis indhold af tilføjede filer for følgende typer" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "&Klartekst" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML-side" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Billed eller animation" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Lyd" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Lydoptagelse af konference" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Årlig rapport" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Hjemmemappe" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Kør %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Lyde" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Filer" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "&Lokale links" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "&Netværklinks" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "&Hurtigstartere" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Åbn &tekstnoter med et brugerdefineret program:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Åbn tekstnoter med:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Åbn b&illednoter med et brugerdefineret program:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Åbn billednoter med:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Åbn a&nimationsnoter med et brugerdefineret program:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Åbn animationsnoter med:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Åbn L&ydnoter med et brugerdefineret program:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Åbn lydnoter med:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Hvis afkrydste, vil det nedenfor definerede program blive brugt når den " +"type note åbnes.

    Ellers vil det program du har konfigureret i " +"Konqueror " +"blive brugt.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Deinér det program der skal bruges til at åbne den type af note i " +"stedet for det program som er konfigureret i Konqueror.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Hvordan ændres det program som bruges til at åbne weblinks?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, " +"XFCE...).

    • Open the KDE Control Center (if it is not available, " +"try to type \"kcontrol\" in a command line terminal);
    • Go to the " +"\"KDE Components\" and then \"Components Selector\" section;
    • Choose " +"\"Web Browser\", check \"In the following browser:\" and enter the name of " +"your Web browser (like \"firefox\" or \"epiphany\").

    Now, when " +"you click any link that start with \"http://...\", it will be opened " +"in your Web browser (eg. Mozilla Firefox or Epiphany or...).

    For more " +"fine-grained configuration (like opening only Web pages in your Web " +"browser), read the second help link.

    " +msgstr "" +"

    Når weblinks åbnes, åbnes de i forskellige programmer, " +"afhængigt af linkets indhold (en hjemmside, et billed, et " +"PDF-dokument ...), ligesom hvis de var filer på din computer.

    " +"

    Her er hvordan du skal gøre hvis du ønsker at alle webadresser skal åbnes " +"i din webbrowser. Det er nyttigt hvis ikke bruger KDE (hvis du f.eks. bruger " +"GNOME, " +"Xfce ...).

    • Ã…bn KDE kontrolcenteret (hvis det ikke er tilgængeligt " +"prøv da " +"at skrive \"kcontrol\" i en terminal);
    • GÃ¥ til \"KDE-komponenter\" og " +"sÃ¥ " +"\"Komponentvælger\"-sektionen;
    • Vælg \"Browser\", afkryds \"I " +"følgende browser:\" " +"og angiv navnet pÃ¥ din webbrowser (f.eks. \"firefox\" eller \"epiphany\").<" +"/li>

    Når du " +"nu klikker på ethvert link som starter med \"http://..\", vil det " +"blive åbnet i din " +"webbrowser (f.eks. Mozilla Firefox eller Epiphany eller ...).

    For mere " +"finkornet konfiguration (såsom kun at åbne websider i din webbrowser), læs " +"det " +"andet hjælp-link.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Hvordan ændres det program som bruges til at åbne filer og links?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line " +"terminal);
    • Go to the \"KDE Components\" and then \"File " +"Associations\" section;
    • In the tree, expand \"text\" and click " +"\"html\";
    • In the applications list, add your Web browser as the " +"first entry;
    • Do the same for the type \"application -> " +"xhtml+xml\".
    " +msgstr "" +"

    Sådan her sætter du det program som skal bruges til åbne hver filtype. " +"Dette " +"gælder også weblinks, hvis du vælger ikke at åbne dem systematisk i en " +"webbrowser (jf. første hjælp-link). Standardindstillingerne burde være gode " +"nok til dig, men dette tip er nyttigt hvis du bruger GNOME, Xfce eller et " +"andet miljø end KDE.

    Dette er et eksempel på hvordan HTML-sider " +"åbnes i din webbrowser (og at blive ved med at bruge andre programmer " +"til andre adresser eller filer). Gentag disse trin for hver filtype du " +"ønsker " +"at åbne med et specifikt program.

    • Ã…bn KDE kontrolcenter (hvis " +"det ikke er tilgængeligt prøv da at skrive \"kcontrol\" i en terminal);
    • " +"
    • " +"GÃ¥ til \"KDE-komponenter\" og sÃ¥ \"Filassociationer\"-sektionen;
    • " +"I træet udvides \"tekst\" og klik pÃ¥ \"HTML\";
    • I programlisten " +"tilføjes " +"din webbrowser som første punkt;
    • Gør det samme for \"program -> " +"xhtml+xml\".
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importér hierarki" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Hvordan skal noterne importeres?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Behold originalt hierarki (alle noter i adskilte kurve)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&Første-niveau-noter i adskilte kurve" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&Alle noter i en kurv" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importér tekstfil" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Formattering af tekstfilen" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Noter adskilt af en &tom linje" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "En ¬e pr. linje" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Noter begynder med en &bindestreg (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Noter begynder med en stjerne (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Brug en anden adskiller:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "&Alle i en note" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Fra KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Fra KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Fra Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Fra Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Fra %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "Kan ikke importere den fil. Den er enten korrupt, eller ikke en TuxCards-fil." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "DÃ¥rligt filformat" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"En note er krypteret. Importøren understøtter endnu ikke krypterede " +"noter. Fjern venligst krypteringen med TuxCards og genimportér filen." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Krypterede noter er endnu ikke understøttet" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and " +"re-import the file.
    " +msgstr "" +"Krypteret note.
    Importøren understøtter ikke" +"krypterede noter endnu. Fjern venligst krypteringen med TuxCards og " +"genimportér filen.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Lukning af hovedvinduet vil holde %1 kørende i statusområdet. Brug " +"Afslut fra Basket-menuen for at afslutte programmet.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Dokker i statusområdet" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Indsatte markering til kurven %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimér" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Gendan" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Låst)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Gøremål" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Ikke afkrydset" + +#: tag.cpp:544 +msgid "Done" +msgstr "Afsluttet" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Fremgang" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Prioritet" + +#: tag.cpp:599 +msgid "Low" +msgstr "Lav" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Mellem" + +#: tag.cpp:600 +msgid "High" +msgstr "Høj" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Præference" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Dårlig" + +#: tag.cpp:601 +msgid "Good" +msgstr "God" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Glimrende" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Fremhæv" + +#: tag.cpp:667 +msgid "Important" +msgstr "Vigtig" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Meget vigtig" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Ide" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Titel" + +#: tag.cpp:669 +msgid "Code" +msgstr "Kode" + +#: tag.cpp:669 +msgid "Work" +msgstr "Arbejde" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "A." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Personlig" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Morsom" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Tilpas mærker" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "N&yt mærke" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Ny tilst&and" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Flyt op (Ctrl+Shift+Op)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Flyt ned (Ctrl+Shift+Ned)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Mærke" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Fje&rn" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Genvej" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "&Overtaget af nye søskende-noter" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Tilstand" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "Na&vn:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "F&jern" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblem:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Baggrund:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Slå igennem" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Tekst" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "F&arve:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "Skri&fttype:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Størrelse:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Svarende til te&kst:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Hvis udfyldt lader denne egenskab dig indsætte dette mærke eller " +"denne tilstand som svarende til tekst." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "På h&ver linje" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Hvad betyder det?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Når en note har adskillige linjer, kan du vælge at eksportere mærket eller " +"tilstanden på den første linje eller på hver linje i noten." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"I eksemplet ovenfor, eksporteres mærket for den øverste note kun på den " +"første linje, mens mærket for den nederste note ekporteres på hver af notens " +"linjer." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Sletning af mærket vil fjerne det fra alle noter hvortil det i aktuelt er " +"tildelt." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Bekræft sletning af mærke" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Slet mærke" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Sletning af tilstanden vil fjerne mærket den fra alle noter hvortil " +"tilstandend " +"aktuelt er tildelt." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Bekræft sletning af tilstand" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Slet tilstand" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 gange 16 pixel" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 gange 22 pixel" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 gange 32 pixel" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 gange 48 pixel" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 gange 64 pixel" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 gange 128 pixel" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Ændr størrelse på vinduet for at vælge billedstørrelsen\n" +"og luk det eller tryk Escape for at acceptere ændringer." + diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..12b5438 --- /dev/null +++ b/po/de.po @@ -0,0 +1,3481 @@ +# translation of de.po to Deutsch +# translation of de.po to +# Translation of basket.pot to German. +# This file is distributed under the same license as the BasKet package. +# Copyright (C) 2004 Patrick Haas +# +# Sébastien , 2004. +# Patrick Haas , 2004. +# Florian Sievert , 2005, 2006, 2007. +# Sébastien Laoût , 2005. +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-01-27 14:17+0100\n" +"Last-Translator: Florian Sievert \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.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Florian Sievert" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "kde@floriansievert.de" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Bewahren Sie Ihre Ideen.

    Eine Anwendung, die es Ihnen " +"ermöglicht Ideen sofort niederzuschreiben und sie später leichter " +"wiederzufinden. Das Organisieren Ihrer Notizen war noch nie so leicht.

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "BasKet Notizblätter" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autor, Betreuer" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Verschlüsselung von Körben, Integration in Kontact, Importer für KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Automatische Sperrung von Körben, Speicherstatus-Symbol, HTML kopieren/" +"einfügen, Kurzhinweise für Korbname, Absetzen zu Korbname" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Symbol" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Als Korbarchiv speichern" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Korbarchiv wird gespeichert. Bitte warten..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Diese Datei ist kein Korbarchiv." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Korbarchiv-Fehler" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Diese Datei ist beschädigt und kann daher leider nicht geöffnet werden." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Diese Datei wurde mit einer älteren Version von %1 erzeugt. Sie kann geöffnet werden, allerdings werden nicht alle Bestandteile für Sie verfügbar sein. Beispielsweise könnten einige Notizen fehlen, die von einem Notiztyp sind, der erst in neueren Versionen verfügbar ist. Wenn Sie die Datei zurückschreiben wollen, speichern Sie diese in einer anderen Datei, um die Ursprüngliche zu erhalten." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Diese Datei wurde mit einer älteren Version von %1 erzeugt. Bitte versuchen Sie eine neuere Version zu installieren, um diese Datei zu öffnen." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Sichern & Wiederherstellen" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Speicherort" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Ihre Körbe befinden sich momentan an diesem Ort:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&An einen anderen Ort verschieben ..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Einen anderen existierenden Ordner ..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Wozu?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    Sie können den Ordner bestimmen in denen %1 Ihre Körbe sichert werden:

    • an einem leicht zu erreichenden Ort in Ihrem Heimatverzeichnis, wie beispielsweise ~/Notizen oder ~/Körbe. Auf diese Weise können Sie Ihre Körbe stets manuell sichern." +"
    • auf einem Server, um Ihre Körbe auf zwei Computern nutzen zu können.
      In diesem Fall müssen Sie den gemeinsam verwendeten Ordner ins lokale Dateisystem mounten und %2 anweisen den Mountpunkt zu verwenden.
      Achtung: Sie sollten %3 nicht gleichzeitig auf beiden Computern verwenden! Ansonsten riskieren Sie den Verlust von Daten, wenn beide Anwendungen asyncron darauf zugreifen.
    • " +"

    Bitte beachten Sie, dass Sie den Inhalt des Ordners nicht eigenständig verändern sollten. (z.B. wird durch das Hinzufügen einer Datei diese nicht automatisch im Korb angezeigt).

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Sicherungen" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Sicherung ..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "Sicherung &wiederherstellen ..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Letzte Sicherung: nie" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Letzte Sicherung: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Wählen Sie einen Ort" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "Der Ordner %1 ist nicht leer. Wollen Sie ihn überschreiben?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Ordner überschreiben?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "Ü&berschreiben" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Ihre Körbe wurden erfolgreich nach %1 verschoben. %2 wird nun neugestartet, damit die Änderungen wirksam werden." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Wählen Sie einen existierenden Ordner" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Der Speicherort Ihrer Körbe wurde erfolgreich geändert nach %1.%2 wird nun neugestartet, damit die Änderungen wirksam werden." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Körbe_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Gzip-komprimiertes Tar-Archiv" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Alle Dateien" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Körbe sichern" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Die Datei %1 existiert bereits. Soll sie wirklich überschrieben werden?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Datei überschreiben?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Körbe werden gesichert. Bitte warten..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Korbarchiv öffnen" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "Liesmich.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Dies ist eine Sicherheitskopie Ihrer Körben auf dem Stand bevor Sie mit der Wiederherstellung der Sicherung %1 begonnen haben." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Falls die Wiederherstellung erfolgreich war und Sie alles wichtige wieder verfügbar haben, können Sie diesen Ordner entfernen." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Falls irgendetwas beim Wiederherstellen fehl schlägt, können Sie diesen Ordner verwenden, um Ihre Körbe wiederherzustellen. Auf diese Weise kann nichts verloren gehen." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Wählen Sie \"Korb\"->\"Sichern & Wiederherstellen ...\"->\"Einen anderen existierenden Ordner ...\" und wählen Sie diesen Ordner aus." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Stelle %1 wieder her. Bitte warten..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Wenn etwas während der Wiederherstellung fehlschlagen sollte, lesen Sie bitte die Datei %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Körbe wiederherstellen" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Dieses Archiv ist entweder keine Sicherung Ihrer Körbe oder ist beschädigt worden. Es kann leider nichts importiert werden. Ihre alten Körbe blieben unverändert erhalten." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Fehler beim Wiederherstellen" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Ihre Sicherung wurde erfolgreich wiederhergestellt nach %1.%2 wird nun neugestartet, damit die Änderungen wirksam werden." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Neustart" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Körbe vor Wiederherstellung" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Körbe vor Wiederherstellung (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Die neue Notiz entspricht nicht dem Filter und wird nicht angezeigt." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Eine neue Notiz entspricht nicht dem Filter und wird nicht angezeigt." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Einige neue Notizen entsprechen nicht dem Filter und werden nicht angezeigt." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Die neuen Notizen entsprechen nicht dem Filter und werden nicht angezeigt." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Gruppieren" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Einfügen" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Abgelegt in Korb %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Diese Nachricht sollte eigentlich nie angezeigt werden. Wenn dies geschehen ist, " +"enthält das Programm einen Fehler. Bitte melden Sie diesen bei dem " +"Entwickler." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Füge eine Notiz hier ein\n" +"Rechter Mausklick für mehr Optionen" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Diese Spalte vergrößern" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Diese Gruppe vergrößern" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Diese Notiz vergrößern" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Diese Notiz auswählen oder entfernen" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Diese Gruppe auswählen oder entfernen" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Dieser Notiz eine Marke zuweisen oder entfernen" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Zugewiesene Marken:%1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Gruppe ausklappen" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Gruppe zusammenklappen" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Gruppiere eine Notiz zusammen mit der darunter\n" +"Rechter Klick für mehr Optionen" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Gruppiere eine Notiz zusammen mit der darüber\n" +"Rechter Klick für mehr Optionen" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Hinzugefügt" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Letzte Änderung" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1:%2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Klicke rechts um etwas zu gruppieren, anstatt es einzufügen" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Klicke links um etwas einzufügen, anstatt es zu gruppieren" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Entsperren" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Durch Passwort geschützter Korb." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Drücken Sie Entsperren, um Zugriff zu erlangen." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "Verschlüsselung wird nicht unterstützt
    in dieser Version von %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"Damit Körbe entsperrt bleiben, ändern Sie die Dauer der
    automatischen " +"Sperrung in den Einstellungen der Anwendung." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Lade ..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Anpassen ..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtere nach dieser Marke" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtere nach diesem &Zustand" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Marken" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Sind Sie sicher, dass Sie diese Notiz entfernen wollen?\n" +"Sind Sie sicher, dass Sie %n Notizen entfernen wollen?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Entferne Notiz\n" +"Entferne Notizen" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Notiz in Zwischenablage kopiert.\n" +"Notizen in Zwischenablage kopiert." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Notiz ausgeschnitten und in Zwischenablage eingefügt.\n" +"Notizen ausgeschnitten und in Zwischenablage eingefügt." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Notiz in Selektion kopiert.\n" +"Notizen in Selektion kopiert." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Diese Notiz kann nicht geöffnet werden." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Sie sind nicht berechtigt diese Datei zu öffnen." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Speichern in Datei" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Bitte geben Sie das Passwort für den folgenden privaten Schlüssel ein:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Bitte geben Sie das Passwort für den Korb %1 ein:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Bitte weisen Sie dem Korb %1 ein Passwort zu:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Ungenügend freier Speicher auf der Festplatte um die Korbdaten zu speichern" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Falsche Berechtigung für Korbdatei" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Bitte entfernen Sie Dateien auf der Festplatte %1, um es der " +"Anwendung zu ermögichen Ihre Änderungen sicher zu speichern." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Die Dateiberechtigung für %1 sind unzureichend. Bitte überprüfen Sie, " +"ob Sie schreibenden Zugriff für die Datei und dem übergeordneten Ordner " +"besitzen." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Fehler beim Speichern" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Leider schlug das Erstellen des Ordner für den neuen Korb fehl." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Erstellung des Korbs schlug fehl" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Leider schlug das Kopieren der Vorlage des neuen Korbes fehl." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Leider schlug die Anpassung an die Vorlage des neuen Korbes fehl." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Eigenschaften des Korbes" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Name" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "Hintergrund&bild:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "Hintergrund&farbe:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "&Textfarbe:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(keine)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Anordnung" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "&Spalten:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Frei" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mindmap" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Tastenkürzel" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Lerne einige Tipps ..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Erinnern Sie sich leicht an Tastenkürzel:
    Mit der " +"ersten Option weisen Sie dem Korb ein Tastenkürzel in der Form Alt" +"+Buchstabe zu. Der gewählte Buchstabe wird in der Korbansicht " +"unterstrichen.
    Beispiel: Wenn Sie einem Korb namens Tipps das " +"Tastenkürzel Alt+T zuweisen, wird dieser in der Korbansicht angezeigt " +"als Tipps . Diese Visualisierung wird Ihnen helfen sich " +"schneller an die vergebenen Tastenkürzel zu erinnern.

    Lokale " +"gegenüber Globale:
    Die erste Option zeigt Ihnen den Korb an " +"solange das Hauptfenster aktiv ist. Globale Tastenkürzel sind überall gültig " +"- sogar wenn das Fenster minimiert worden ist.

    Anzeigen " +"gegenüber Umschalten:
    Die letzte Option wählt einen Korb aus " +"ohne dabei das Hauptfenster zu öffnen. Dies ist hilfreich in Kombination mit " +"anderen globalen Tastenkürzeln. Zum Beispiel um den Inhalt der " +"Zwischenablage in den aktuellen Korb zu kopieren.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "Diesen Korb &anzeigen" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Diesen Korb anzeigen (&globales Tastenkürzel)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "Zu diesem Korb &wechseln (globales Tastenkürzel)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Zeigt an, ob Änderungen noch nicht gespeichert wurden." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Strg+absetzen: kopieren; Umschalt+absetzen: verschieben, Umschalt+Strg" +"+absetzen: verknüpfen." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "" +"

    Dieser Korb ist gesperrt.
    Um ihn zu entsperren, klicken Sie " +"bitte hierher.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "" +"

    Dieser Korb ist nicht gesperrt.
    Um ihn zu sperren, klicke Sie " +"bitte hierher.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Allgemein" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Hauptfenster zeigen/verstecken" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "Erlaubt Ihnen das Hauptfenster ein- und ausblenden." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Inhalt der Zwischenablage im aktuellen Korb einfügen" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Erlaubt Ihnen den Inhalt der Zwischenablage in den aktuellen Korb einzufügen," +"ohne dabei das Hauptfenster öffnen zu müssen." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Zeigt den Namen des aktuellen Korbes" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"Erlaubt Ihnen den aktuellen Korbnamen anzuzeigen, ohne das Hauptfenster " +"öffnen zu müssen." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Selektion einfügen im aktuellen Korb" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Erlaubt Ihnen den Inhalt der Zwischenablage in den aktuellen Korb einzufügen," +"ohne dabei das Hauptfenster öffnen zu müssen." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Neuen Korb erstellen" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Erlaubt Ihnen einen neuen Korb zu erzeugen, ohne dabei das Hauptfenster " +"öffnen zu müssen. (Sie können dann die globale Tastenkürzel verwenden, um " +"ein Element hinzuzufügen oder die Inhalte der Selektion oder Zwischenablage " +"in den neuen Korb einfügen)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Vorheriger Korb" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Erlaubt Ihnen den vorherigen Korb auswählen, ohne dabei das Hauptfenster " +"öffnen zu müssen." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Nächster Korb" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Erlaubt Ihnen den nächsten Korb auszuwählen, ohne dabei das Hauptfenster " +"öffnen zu müssen." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Textnotiz einfügen" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "" +"Fügt eine neue Textnotiz im aktuellen Korb ein, ohne dabei das Hauptfenster " +"zu öffnen." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Bildenotiz einfügen" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Fügt eine Bildnotiz im aktuellen Korb ein ,ohne dabei das Hauptfenster zu " +"öffnen." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Verknüpfungsnotiz einfügen" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "" +"Fügt eine neue Verknüpfungsnotiz im akuellen Korb ein, ohne dabei das " +"Hauptfenster zu öffnen." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Farbnotiz einfügen" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Fügt eine neue Farbnotiz im aktuellen Korb ein, ohne dabei das Hauptfenster " +"zu öffnen." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Farbe vom Bildschirm auswählen" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Fügt eine vom Bildschirm ausgewählte Farbe in den aktuellen Korb ein, ohne " +"dabei das Hauptfenster zu öffnen." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Bildschirmbereich abgreifen" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Einen Bildschirmbereich als Bild abgreifen und im aktuellen Korb einfügen, " +"ohne dabei das Hauptfenster zu öffnen." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Körbe" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Bitte schreiben Sie in Englisch oder Französisch." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Korbansicht

    Dies ist eine Liste Ihrer Körbe. Sie können Ihre Daten " +"besser organisieren indem Sie diese in unterschiedliche Körbe verwalten. Sie " +"können Körbe nach Ihrem Betreff gruppieren indem Sie neue Unterkörbe " +"anlegen. Durch einen Klick können Sie diese öffnen oder mit der Maus an eine " +"neue Position ziehen." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Korbarchiv ..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Hauptfenster verstecken" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "&HTML-Seite ..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt ..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards ..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "Text&datei ..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Sichern && Wiederherstellen ..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Entfernen" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Alle Notizen auswählen" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Auswahl &aufheben" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Auswahl aller angewählten Notizen aufheben" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "Auswahl &umkehren" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Kehrt aktuelle Auswahl von Notizen um" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Bearbeiten ..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "Ö&ffnen" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Öffnen &mit ..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Speichern in Datei ..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Gruppieren" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Gruppierung &aufheben" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Nach &oben" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "&Hoch bewegen" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "&Runter bewegen" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Nach &unten" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Text" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Verknüpfung" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Bild" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Farbe" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "&Starter" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "&KDE Menu-Starter importieren ..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Symbol im&portieren ..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Aus &Datei laden ..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "&Farbe vom Bildschirm " + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Bildschirmbereich ab&greifen" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Neuer Korb ..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Neuer &Unterkorb ..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Neuer &gleichgestellter Korb ..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Neu" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "Korb &entfernen" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Pass&wort ..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "Korb &sperren" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filter" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtere alle Körbe" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "Filter &zurücksetzen" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Vorheriger Korb" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "&Nächster Korb" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "Korb &zusammenklappen" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "Korb &ausklappen" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "&Tastenkürzel einrichten ..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "&Willkommenskörbe" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Konvertierung einfacher Textnotizen" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Konvertiere einfache Textnotizen in RichText-Notizen ..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Gesperrt" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Keine Notizen" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n Notiz\n" +"%n Notizen" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n ausgewählt\n" +"%n ausgewählt" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "alle Treffer" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "kein Filter" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n Treffer\n" +"%n Treffer" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Ausgewählte Farbe abgelegt in %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Die einfachen Textnotizen wurden umgewandelt ins RichText-Format." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Konvertierung beendet." + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Es existiert keine einfachen Textnotizen, die konvertiert werden müssen." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Die Datei basketui.rc scheint nicht zu existieren oder ist zu alt.
    %1 kann nicht ohne sie ausgeführt werden und wird nun beendet.

    Bitte überprüfen Sie die Installation von %2.
    Sollten Sie keinen " +"Root-Zugriff haben, um das Programm systemweit zu installieren, können Sie " +"die Datei basketui.rc ins Verzeichnis %4 kopieren.

    Sollte dies immer noch zu keinem Erfolg führen und Sie sich sicher " +"sind, dass die Anwendung richtig installiert wurde, sollten Sie versuchen " +"die Datei %5basketui.rc zu entfernen.

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Ressource nicht gefunden" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Kann Notiz nicht einfügen." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Gewählter Bildschirmbereich in Korb %1 abgelegt" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Korb löschen" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Nur diesen Korb löschen" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Entferne Notizen und Unterobjekte" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Sind Sie sicher, dass %1 mitsamt Inhalt entfernt werden soll?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Korb entfernen" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "Korb &entfernen" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" +"%1 hat die folgenden Körbe untergeordnen.
    Wollen Sie diese " +"auch entfernen?
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Untergeordnete Körbe entfernen" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "Untergeordnete Körbe &entfernen" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Korbarchiv" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Inhalt der Zwischenablage in Korb %1 eingefügt" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Selektion in Korb %1 eingefügt" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Keine Notiz wurde hinzugefügt." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Korb %1 ist gesperrt" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(gesperrt)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "Neue Marke &zuweisen ..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Alle entfernen" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 ist abgestürzt! Das tut uns wirklich sehr leid.\n" +"\n" +"Aber vielleicht können Sie uns helfen, den Fehler zu beheben. Amarok hat " +"einen Backtrace erzeugt, der den Fehler beschreibt. Klicken Sie einfach auf " +"Senden oder, wenn Sie Zeit haben, schreiben Sie einen Bericht in dem Sie " +"beschreiben, wie es zu dem Absturz kam.\n" +"\n" +"Vielen Dank." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Bitte verändern Sie die unten aufgeführten Informationen nicht. Diese helfen " +"den Entwicklern die Ursache des Problemes genau zu bestimmen." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 ist abgestürzt! Das tut uns wirklich sehr leid.\n" +"\n" +"Aber noch ist nicht alles verloren! Vielleicht existiert bereits eine neue " +"Version von %1, die das Problem behebt. Bitte prüfen Sie, ob das Repository " +"Ihrer Distribution eine neue Version bereithält." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Debug-Fenster" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Exportiere Korb nach HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Dateiname der HTML-Seite" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Dateiname:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Lokale Verknüpfungen auf &Dateien einbinden" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Lokale Verknüpfungen auf &Ordner einbinden" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Lösche vorherige Dateien im Zielordner" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "Druckerfreundlich" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Filter &zurücksetzen" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filter: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "&Marke:" + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filter auf alle Körbe anwenden" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(ohne Marke)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(mit Marke)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Automatische Rechtschreibprüfung" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Rechtschreibung prüfen ..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Erlaube tabellarische Aufstellung" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    Das Spiegeln von Ordner ist leider nicht mehr möglich. (Bitte besuche basket.kde.org für weitere Informationen)

    Der Ordner %1 wurde kopiert und den Bedürfnissen des Korbes " +"angepaßt. Sie können entweder den Ordner, den Korb oder Beides entfernen. " +"Bitte erinnerin Sie sich jedoch daran, dass Veränderungen am Korb keine " +"Auswirkung mehr auf den Ordner haben, da beides nun voneinander getrennt " +"existiert.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Import einer Ordnerspiegelung" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML-Dokumente" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Exportieren nach HTML ..." + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Exportiere gerade nach HTML. Bitte warten..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_Dateien" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "Symbole" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "Bilder" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "Körbe" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "Daten" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"Erstellt mit %1, einer KDE-Anwendung um Notizen zu verwalten und die Übersicht " +"über Ihre Daten zu behalten." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Standard)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Andere ..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Liste privater Schlüssel" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-Mail" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Wählen Sie einen geheimen Schlüssel:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Auflistung der Schlüssel wurde unerwartet unterbrochen." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Dieser öffentliche Schlüssel ist nicht für eine Verschlüsselung vorgesehen." + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Nicht unterstütztes Verfahren" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Falsches Passwort." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Wähle Symbol" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Durchsuchen ..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Alle Symbole)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(zuletzt verwendete)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Aktionen" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Anwendungen" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Geräte" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Dateisystem" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Dateitypen" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Symboldateien (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Schicken Sie den Entwicklern ein Kommentar zu etwas, dass Sie gemocht haben" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" +"Schicken Sie den Entwicklern ein Kommentar zu etwas, dass Sie nicht gemocht " +"haben" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" +"Schicken Sie den Entwicklern eine Nachricht und berichten Sie einen Fehler " +"der Anwendung" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" +"Schicken Sie den Entwicklern der Anwendung einen Wunsch für eine neue " +"Softwarefunktion" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "Entwicklern ein Kommentar &schicken ..." + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Willkommen bei dieser Testversion von %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Willkommen bei %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "" +"Ihre Kommentare sind wichtig, um uns dabei zu helfen die Anwendung zu " +"verbessern." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Jedes Mal, wenn Sie eine großartigige oder eine frustrierende Erfahrung " +"gemacht haben, klicken Sie auf das entsprechende Gesicht unterhalb der " +"Fenstertitelleiste. Beschreiben Sie bitte kurz, was Sie gemocht oder nicht " +"gemocht haben und klicken abschließend auf Versenden." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Jedes Mal, wenn Sie eine gute Erfahrung gemacht haben, klicken Sie auf das " +"lächelnde Gesicht unterhalb der Fenstertitelleiste. Beschreiben Sie bitte " +"dann kurz, was sie gemocht haben und klicken auf Versenden." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Jedes Mal, wenn Sie eine frustrierende Erfahrung gemacht haben, klicken Sie " +"auf das stirnrunzelnde Gesicht unterhalb der Fenstertitelleiste. Bitte " +"beschreiben Sie dann kurz, was Sie nicht mochten und klicken auf Versenden." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Gehen Sie genauso vor, um schnell einen Fehlerbericht zu verfassen: Klicken " +"Sie auf das Symbol mit dem zebrochenen Gegenstand in der oberen rechten Ecke " +"des Fenster. Beschreiben Sie den Fehler kurz und drücken dann auf Versenden." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Immer wenn Sie einen Fehler in der Anwendung gefunden haben, klicken " +"Sie auf das Symbol mit dem zerbrochenen Objekt unterhalb der " +"Fenstertitelleiste. Beschreiben Sie dann bitte kurz, was nicht wie erwartet " +"funktioniert hat und klicken Sie dann auf Senden." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "Beispiele:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Ich mag die neue Gestaltung. Sehr erfrischend." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Ich mag nicht die Willkommenseite des Assistenten. Sie ist zu " +"unübersichtlich und kostet daher Zeit." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"Die Anwendung verhält sich fehlerhaft. Beim Klicken auf den Knopf " +"Hinzufügen ist nichts passiert." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Ich wünsche mir eine neue Funktion, die es mir erlaubt meine Arbeit " +"als E-Mail zu verschicken." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Helfen Sie die Anwendung zu verbessern" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "E-Mail-Adresse" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Bitte geben Sie Ihre E-Mail-Adresse an." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Sie wird nur verwendet um Sie zu kontaktieren, wenn mehr Informationen zu " +"Ihren Kommentar oder einem Fehlerbericht benötigt werden. Auch können wir " +"Ihnen auf diese Weise eine Korrektur zusenden, damit Sie diese testen können." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"Die Eingabe der E-Mail-Adresse ist freiwillig. Wenn Sie keine angeben, wird " +"Ihr Kommentar anonym versendet." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Sende ein Kommentar zu den Entwicklern" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Sende Sie den Entwicklern ein Kommentar bezüglich:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Etwas das Sie &gemocht haben" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Etwas das Sie &nicht gemocht haben" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Ein fehlerhaftes &Verhalten dieser Anwendung" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Eine neue &Funktion, die Sie sich wünschen" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Zeige Kommentar-Knöpfe unter der &Fenstertitelleiste." + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "Kommentar &versenden" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "&E-Mail-Adresse ..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Bitte beschreiben Sie kurz, was Ihre Meinung über %1 ist." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Bitte schreiben Sie in Englisch." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" +"Vielleicht können Sie ein Online-Übersetzungstool " +"verwenden." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Damit Ihre zugesendeten Kommentare möglichst hilfreich sind, sollten Sie " +"versuchen das die Anzahl von positiven und negativen Kommentaren in etwa " +"gleich hoch ist." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" +"Fragen Sie nicht nach neuen Funktionen - Ihre Anfrage wird ignoriert " +"werden." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Es trat ein Fehler beim Versenden Ihres Berichtes auf.

    Bitte " +"versuchen Sie es später nochmal.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Ãœbertragungsfehler" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Ihr Kommentar wurde erfolgreich versendet. Er wird dazu beitragen die " +"Anwendung zu verbessern.

    Vielen Dank für Ihre Hilfe.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Kommentar versendet" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&Kursiv" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Fett" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Immer" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Nie" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Bei Mauskontakt" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Wenn Mauszeiger außerhalb" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Unterstrichen:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "&Farbe:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "&Farbe bei Mauskontakt:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Größe des S&ymbol:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Keine" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Symbolgröße" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Zweifache Größe des Symbols" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Dreifache Größe des Symbols" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Vorschau:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Sie haben die Vorschau deaktiviert und sehen dennoch Bilder?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    Dies ist normal, da es zahlreiche Notiztypen gibt.
    Die Einstellung " +"wird nur angewendet auf Dateien und lokalen Elementen.
    Die Bilder, die " +"Sie sehen sind Bildnotizen und keine Dateinotizen.
    Dateinotizen sind " +"generische Dokumente. So sind Bildnotizen beispielsweise in Bilder in denen " +"Sie zeichnen können.

    Wenn Sie Dateien in Körbe hineinziehen, erkennt %" +"1 den Dateityp und zeigt Ihnen den Inhalt der Datei.
    Wenn Sie " +"beispielsweise ein Bild- oder eine Textdatei einfügen, wird automatisch eine " +"Bildnotiz und eine Textnotiz für Sie erzeugt.
    Bei Dateien die %2 nicht " +"kennt, werden diese angezeigt als generische Dateinotiz mit einem Symbol, " +"einer Dateivorschau oder dem Dateinamen.

    Wenn Sie nicht wollen, dass " +"die Anwendung Notizen entsprechend ihres Inhaltes erzeugt, gehen Sie zur " +"\"Allgemein\"-Seite und entfernen Sie den Haken bei \"Bild oder Animation\"." +"

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Beispiel" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimieren" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Korb" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Sind Sie sicher, dass Sie %1 beenden wollen?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Ist Ihnen aufgefallen, dass Sie die Anwendung nicht beim Verlassen einer " +"KDE-Sitzung schließen müssen? Wenn sie die Anwendung geöffnet halten, " +"während Sie sich abmelden, wird diese automatisch erneut gestartet, wenn Sie " +"sich wieder bei KDE anmelden.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Verlassen der Anwendung bestätigen" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Neuer Korb" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Hintergrundfarbe" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "Vorlagen ver&walten ..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "einspalting" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "zweispaltig" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "dreispaltig" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Frei" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Vorlage:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Körbe)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "&Erstellen in:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Wofür ist dies gut?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Einen neuen Korb in einem anderem Korb zu erstellen, erlaubt Ihnen eine " +"Hierachie zu bilden und die Inhalte besser zu organisieren. Beispiele:

    " +"
    • Körbe nach Design oder einem Thema gruppieren
    • Körbe in " +"Ordner für unterschiedliche Projekte gruppieren
    • Körbe zum " +"unterteilen nach Kapiteln oder Seiten
    • Körbe gruppieren um den " +"Inhalt zu exportieren (z.B. um sie jemanden zu mailen).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Frei" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mindmap" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Bild)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "einfacher Text" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Text" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Bild" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animation" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Klang" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Verknüpfung" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Starter" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Farbe" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Unbekannt" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Bearbeite diesen einfachen Text" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Diesen Text bearbeiten" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Dieses Bild bearbeiten" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Diese Animation bearbeiten" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Den Dateinamen dieses Klangs bearbeiten" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Den Namen der Datei bearbeiten" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Diese Verknüpfung bearbeiten" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Diesen Anwendungsstarter bearbeiten" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Diese Farbe bearbeiten" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Dieses unbekannte Objekt bearbeiten" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Öffne gerade einfachen Text ..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Öffne gerade einfache Texte ..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Öffne gerade einen einfachen Text mit ..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Öffne gerade einfache Texte mit ..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Öffne einfachen Text mit:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Öffne einfache Texte mit:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Öffne gerade Textelement ..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Öffne gerade Textelemente ..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Öffne gerade Textelement mit ..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Öffne gerade Textelemente mit ..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Öffne Textelement mit:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Öffne Textelemente mit:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Größe" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 mal %2 Pixel" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Öffne gerade Bildelement ..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Öffne gerade Bildelemente ..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Öffne gerade Bildelement ..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Öffne Bildelemente mit ..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Öffne Bildelement mit:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Öffne Bildelemente mit:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Anklicken für eine Ansicht in voller Größe" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Öffne gerade Animationselement ..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Öffne gerade Animationselemente ..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Öffne gerade Animationselement mit ..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Öffne gerade Animationselemente mit ..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Öffne Animationselement mit:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Öffne Animationselemente mit:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Typ" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Öffne diese Datei ..." + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Öffne gerade Datei ..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Öffne gerade Dateien ..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Öffne gerade Datei mit ..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Öffne gerade Dateien mit ..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Öffne Datei mit:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Öffne Textelemente mit:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Öffne diesen Klang" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Öffne gerade Klangelement ..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Öffne gerade Klangelemente ..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Öffne gerade Klangelement mit ..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Öffne gerade Klangelemente mit ..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Öffne Klangelement mit:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Öffne Klangelemente mit:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Ziel" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Öffne diese Verknüpfung" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Die Verknüpfung hat keine URL, die aufgerufen werden kann." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Öffne gerade verknüpftes Ziel ..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Öffne gerade verknüpfte Ziele ..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Öffne gerade Ziel der Verknüpfung mit ..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Öffne gerade Ziel der Verknüpfungen mit ..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Öffne Ziel der Verknüpfung mit ..." + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Öffne Ziel der Verknüpfungen mit ..." + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (in &Terminal starten)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Kommentar" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Befehl" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Starte die Anwendung" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Der Starter hat keinen Befehl, der ausgeführt werden kann." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Starte Anwendung ..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Starte gerade Anwendung ..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Rot: %1, Grün: %2, Blau: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Farbton: %1, Sättigung: %2, Wert: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS Farbname" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Erweiterter CSS Farbname" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Ist eine Webfarbe" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Bilder können aktuell nicht mit dieser Anwendung bearbeitet werden (die " +"nächste Version von BasKet wird einen Bildeditor beinhalten).\n" +"Wollen Sie eine Anwendung öffnen, die dies kann?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Bildnotiz bearbeiten" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Das animierte Bild kann nicht mit dieser Anwendung bearbeitet werden.\n" +"Wollen Sie es eine Anwendung öffnen, die dies kann?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Animationsnotiz bearbeiten" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Farbnotiz bearbeiten" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Dieser Elementtyp ist unbekannt und kann nicht mit dieser Anwendung " +"bearbeitetwerden.\n" +"Sie sollten das Element in eine Anwendung ziehen, die damit umgehen kann." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Unbekannte Notiz bearbeiten" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Verknüpfungsnotiz bearbeiten" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "S&ymbol:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "Ziel:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Titel:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Starternotiz bearbeiten" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Wählen Sie einen Befehl, der ausgeführt werden soll:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Erraten" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "&Befehl:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Name:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Fett" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Unterstrichen" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Linksbündig" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Zentriert" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Rechtsbündig" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Blocksatz" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 unterstützt die von Ihnen abgelegten Daten nicht.
    Es wird ein " +"allgemeine Notiz erzeugt. Sie können diese Notiz in eine Anwendung, die " +"damit umgehen kann, hereinziehen oder kopieren.

    Wenn Sie wünschen, " +"dass %1 dies künftig unterstützt, kontaktieren Sie bitte die Entwickler oder " +"besuchen Sie die BasKet " +"Datenbank.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Nicht unterstützer MIME-Typ" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "An diese Stelle &verschieben\tUmschalt" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "An diese Stelle &kopieren\tStrg" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "An diese Stelle &verknüpfen\tStrg+Umschalt" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Abbrechen\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Symbol als Bild importieren" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Wählen Sie die Größe des Symbols um es als Bild zu importieren." + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Laden eines Dateinhaltes in eine Notiz" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Passwortschutz" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Kein privater Schlüssel wurde ausgewählt." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Korb" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Exportieren" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importieren" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Gehe zu" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Notiz" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Marken" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Textformat-Werkzeugleiste" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<er:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "ALT+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Kein Passwortschutz" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "ALT+K" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Schütze Korb mit einem &Passwort" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "ALT+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Schütze Korb mit einem privaten &Schlüssel:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "ALT+S" + +#: settings.cpp:367 +msgid "On left" +msgstr "Links" + +#: settings.cpp:368 +msgid "On right" +msgstr "Rechts" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Position der Korbansicht:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Oben" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Unten" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Position der &Suchleiste:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "" +"Benutze Systemnachrichten um über das Ergebnis einer globalen Aktion zu " +"&berichten" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Was sind globale Aktionen?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Sie können globale Tastenkürzel definieren, um Aktionen auszuführen ohne " +"dafür das Hauptfenster öffnen zu müssen. Beispielsweise können Sie den " +"Inhalt der Zwischenablage einfügen, eine Farbe vom Bildschirm abgreifen, " +"usw. Wenn der Mauszeiger sich über das Symbol in der Kontrollleiste " +"befindet, können Sie mit Hilfe des Mausrades den aktuellen Korb ändern oder " +"durch einen Klick mit der mittleren Maustaste die aktuelle Selektion " +"einfügen." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Wenn dies aktiviert ist, wird %1 Sie mit kleinen Systemnachrichten darüber " +"informieren, ob die Aktion erfolgreich war. Sie können diese " +"Benachrichtigung deaktivieren." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Nehmen Sie bitte zur Notiz, dass die Nachrichten raffiniert genug sind nicht " +"zu erscheinen, wenn das Hauptfenster sichtbar ist. In diesem Fall haben Sie " +"das Ergebnis der Aktionen bereits im Hauptfenster gesehen." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Kontrollleistensymbol" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "Andocken in der &Kontrollleiste" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Zeige aktuelles &Korbsymbol in der Kontrollleiste" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "&Hauptfenster verstecken, wenn Mauszeiger außerhalb für" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " Zehntelsekunden" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "Zeige Hauptfenster bei &Mauskontakt mit dem Kontrollleistensymbol für" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Änderungen in Körben animieren" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "&Kurzhinweise in Körben anzeigen" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "&Große Notizen" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Verhalten" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "&Wandle Linien, die mit * oder - beginnen in Listen um" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Vor dem &Entfernen von Notizen nach einer Bestätigung verlangen" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "E&xportiere Marken in Texte" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Wann wird dies verwendet?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Dies findet Verwendung, wenn Sie eine Notiz kopieren und einfügen oder sie " +"ziehen und in einem Texteditor ablegen." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Wenn diese Einstellung aktiviert ist, können Sie Marken als einfachen Text " +"darstellen und einfügen." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Beispielsweise wird eine Liste von Notizen mit den Marken Aufgaben " +"und Fertig exportiert als Zeilen beginnend mit [ ] oder [x]" +". Dies repräsentiert ein leeres und ein angekreuztes Kreuzfeld.

    " + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Gruppiere neue Notizen beim Klick rechts auf die Einfügelinie" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Wie kann man neue Notizen gruppieren?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Wenn diese Einstellung aktiv ist, erlaubt die Einfüge-Linie Ihnen nicht " +"nur Notizen an der Cursorposition einzufügen, sondern auch eine neue Notiz " +"mit der unter dem Cursor zu gruppieren:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Bewegen Sie den Mauszeiger zwischen den Notizen, bei denen Sie eine neue " +"Notiz hinzufügen wollen.
    Klicken Sie auf die linken Seite der " +"Einfüge-Linie um eine Notiz einzufügen.
    Klicken Sie auf die " +"rechte Seite um eine Notiz zu gruppieren. Je nachdem, wo der " +"Mauszeiger sich befinden, geschieht dies mit der Notiz darüber oder " +"darunter.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Mache nichts" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Zwischenablage einfügen" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Starternotiz einfügen" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Farbe vom Bildschirm auswählen" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Lade Notiz aus Datei" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "&KDE Menu-Starter importieren" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Symbol importieren" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Umschalt+mittlere Maustaste irgendwohin:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "beim Mauszeiger" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "&Automatisch geschützte Körbe sperren, wenn länger geschlossen als" + +#: settings.cpp:603 +msgid " minutes" +msgstr " Minuten" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" +"Benutze GnuPG-Agenten um Körbe mit privaten/öffentlichen Schlüsseln zu " +"schützen" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Platzierung neuer Notizen:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Bei der aktuellen Notiz" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "&Größe neuer Bilder:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&mal" + +#: settings.cpp:721 +msgid "pixels" +msgstr "Pixel" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "Grafische &Auswahl ..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Zeige den Inhalt von hinzugefügten Dateien folgender Typen" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "Einfacher &Text" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML-Seite" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Bild oder Animation" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Klang" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Audio-Aufnahmen der Konferenz" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Jahresbericht" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Persönlicher Ordner" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Starter %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Klänge" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Dateien" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Verknüpfungen (&lokal)" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "Verknüpfungen (&Netzwerk)" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "S&tarter" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Öffne &Textnotiz mit dieser Anwendung:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Öffne Textnotiz mit:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Öffne &Bildnotiz mit dieser Anwendung:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Öffne Bildnotiz mit:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Öffne &Animationnotiz mit dieser Anwendung:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Öffne Animationsnotiz mit:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Öffne &Klangnotiz mit dieser Anwendung:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Öffne Klangnotiz mit:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Beim Ankreuzen wird die Anwendung, die unten angegeben ist beim Öffnen " +"des Notiztypes verwendet.

    Andernfalls wird die Anwendung verwendet, " +"die Sie im Konqueror angegeben haben.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Bestimmt die Anwendung, die beim Öffnen dieses Notiztypes verwendet " +"werden soll, anstelle der im Konqueror eingestellten.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "" +"Wie kann man die Anwendung bestimmen, die für das Öffnen von " +"Webverknüpfungen verwendet wird?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Wenn Sie eine Verknüpfung ins Web folgen, wird die Datei (je nach Inhalt) " +"in Anwendungen geöffnet als würde sie lokal auf Ihrem Rechner verfügbar sein." +"

    Hier wird beschrieben wie Sie einstellen können, dass jede " +"Verknüpfung in Ihrem Browser geöffnet werden soll. Dies kann für Sie " +"interessant sein, wenn Sie kein KDE verwenden (also beispielsweise GNOME, " +"XFCE etc.).

    • Öffnen Sie das KDE-Kontrollzentrum. Sollte dies " +"nicht verfügbar sein, rufen Sie in einer Konsole \"kcontrol\" auf)
    • " +"
    • Gehen Sie auf \"KDE-Komponenten\" und danach auf \"Komponenten-Auswahl" +"\"
    • Wählen Sie \"Web-Browser\" aus und tragen Sie im Feld \"in den " +"folgenden Browser\" den Namen Ihres Webbrowsers ein (z.B. \"firefox\" oder " +"\"epiphany\")

    Nun wird jede Verknüpfung die mit " +"\"http://...\"beginnt in Ihrem Webbrowser geöffnet.

    Für eine " +"feinkörnigen Konfiguration (z.B. nur Webseiten im Brower zu öffnen), lesen " +"Sie bitten den zweiten Tipp.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "" +"Wie kann man die Anwendungen bestimmen, die für das Öffnen von Dateien und " +"Verknüpfungen verwendet wird?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Es wird hier beschrieben, wie Sie festlegen können mit welcher Anwendung " +"ein spezieller Dateityp benutzt werden soll. Dies betrifft auch " +"Verknüpfungen mit dem Web, wenn Sie nicht systemweit eingestellt haben, " +"diese in einem Browser anzuzeigen (beachten Sie hierbei den ersten " +"Hilfelink). Die Standardeinstellung sollte für die meisten Anwender " +"ausreichend sein, jedoch kann diese Hilfe nützlich sein, wenn Sie GNOME, " +"XFCE oder eine andere Desktopumgebung als KDE verwenden.

    Dieses " +"Beispiel demonstriert, wie man HTML-Seiten in Ihrem Browser anzeigt. " +"Wiederholen Sie die beschriebenen Schritte für jeden Dateitypen, den Sie in " +"einer speziellen Anwendung öffnen möchten.

    • Öffnen Sie das KDE " +"Kontrollzentrum (wenn dies nicht verfügbar ist, versuchen Sie in einer " +"Konsole \"kcontrol\" auszuführen)
    • Gehen Sie auf \"KDE-Komponenten\" " +"und danach auf \"Dateizuordnungen\"
    • Erweitern Sie in der " +"Baumansicht \"text\" und klicken Sie auf \"html\"
    • Fügen Sie Ihren " +"Webbrowser in der Liste der Anwendungsprogramme als ersten Eintrag hinzu
    • Machen Sie das gleiche für den MIME-Typ \"application->xhtml+xml\"
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Hierachie importieren" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Wie kann man Notizen importieren?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Ursprüngliche Hierachie erhalten (alle Notizen in verschiedenen Körben)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&Notizen der ersten Ebene in verschiedene Körbe" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&Alle Notizen in einen Korb" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importiere Textdatei" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Format der Textdatei" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Notizen getrennt durch eine &leere Zeile" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Eine Notiz in jeder Zeile" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Notizen beginnen mit einem &Querstrich (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Notizen beginnen mit einem &Stern (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Benutze eine anderes Trennzeichen:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "&Alles in eine Notiz" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "von KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "von KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "von Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Von Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Aus %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Datei kann nicht importiert werden. Sie ist entweder beschädigt oder keine " +"Datei von TuxCard." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Falsches Dateiformat" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Eine Notiz ist verschlüsselt. Der Importierer unterstüzt momentan leider " +"keine verschlüsselten Notizen. Bitte entfernen Sie die Verschlüsselung mit " +"TuxCard und versuchen Sie es erneut." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Verschlüsselte Notizen werden nicht unterstützt" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Eine Notiz ist verschlüsselt.
    Der Importierer " +"unterstüzt momentan leider keine verschlüsselten Notizen. Bitte entfernen " +"Sie die Verschlüsselung mit TuxCard und versuchen Sie es erneut.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Wenn Sie das Hauptfenster schließen läuft %1 weiterhin und wird in der " +"Kontrollleiste als Symbol angezeigt. Benutze Sie Beenden aus dem Menu " +"Korb um die Anwendung zu verlassen.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "An Kontrollleiste andocken" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Selektion in Korb %1 eingefügt" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimieren" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Wiederherstellen" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (gesperrt)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Aufgabe" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Offen" + +#: tag.cpp:544 +msgid "Done" +msgstr "Fertig" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Fortschritt" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Priorität" + +#: tag.cpp:599 +msgid "Low" +msgstr "Niedrig" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Mittel" + +#: tag.cpp:600 +msgid "High" +msgstr "Hoch" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Vorliebe" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Schlecht" + +#: tag.cpp:601 +msgid "Good" +msgstr "Gut" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Herrvorragend" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Höhepunkt" + +#: tag.cpp:667 +msgid "Important" +msgstr "Wichtig" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Sehr wichtig" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Idee" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Titel" + +#: tag.cpp:669 +msgid "Code" +msgstr "Code" + +#: tag.cpp:669 +msgid "Work" +msgstr "Arbeit" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "A." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Persönlich" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Komisch" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Marken anpassen" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "Neue &Marke" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Neuer &Zustand" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Aufwärts (Strg+Umschalt+Hoch)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Abwärts (Strg+Umschalt+Runter)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Marke" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Entferne" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Tastenkürzel:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "Geer&bt von neuen gleichwertigen Notizen" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Zustand" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&Name:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "&Entferne" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblem:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Hintergrund:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Durchgestrichen" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Text:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "&Farbe:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Schriftart:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Größe:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Text&gegenstück:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Wenn dies ausgefüllt ist, erlaubt diese Eigenschaft Ihnen eine Marke oder " +"einen Zustand als einfachen Text darzustellen." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "in &jeder Zeile" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Was bedeutet dies?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Wenn eine Notiz aus mehren Zeilen besteht, können Sie auswählen, ob die " +"Marke oder der Zustand in der ersten oder in jede Zeile der Notiz exportiert " +"werden soll." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"In diesem Beispiel wird die Marke der oberen Notiz nur in der ersten Zeile " +"exportiert, während die Marke der unteren Notiz in jeder Zeile der Notiz " +"exportiert wird." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Das Entfernen der Marke führt dazu, dass Sie von allen Notizen entfernt " +"wird, der sie momentan zugewiesen wurde." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Entfernung von Marke bestätigen" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Entferne Marke" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Das Entfernen des Zustandes führt dazu, dass der Zustand von jeder Notiz " +"entfernt wird, der er momentan zugewiesen wurde." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Entfernung von Zustand bestätigten" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Zustand entfernen" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 mal 16 Pixel" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 mal 22 Pixel" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 mal 32 Pixel" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 mal 48 Pixel" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 mal 64 Pixel" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 mal 128 Pixel" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Verändern Sie die Größe des Fensters, um eine Bildgröße auszuwählen\n" +"und schließen Sie es mit Escape um Ihre Auswahl zu bestätigen." + diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..37b3519 --- /dev/null +++ b/po/es.po @@ -0,0 +1,3339 @@ +# Translation of es.po to Spanish +# translation of es.po to +# Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. +# +# Sébastien Laoût , 2005. +# Rafael Rodríguez , 2006. +# Rafael Rodríguez Martín , 2006. +# Enrique Matias Sanchez (aka Quique) , 2007. +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-01-23 14:40+0100\n" +"Last-Translator: Enrique Matias Sanchez (aka Quique) \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "José Luis Tallón,Rafael Rodríguez,Enrique Matías Sánchez (Quique)" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "jltallon@adv-solutions.net,rafael.rodriguez.tf@gmail.com,cronopios@gmail.com" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Cuidado de sus ideas.

    Una aplicación para tomar notas que le " +"facilita registrar ideas según se le ocurren, y encontrarlas rápidamente más adelante. " +"¡Organizar sus notas nunca fue tan fácil!

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Blocs de notas BasKet" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autor, mantenedor" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Cifrado de las cestas, integración en Kontact, importador de KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Bloqueo automático de las cestas, icono del estado de guardado, copiar/pegar HTML, " +"consejos sobre el nombre de las cestas, soltar sobre el nombre de las cestas" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Icono" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Guardar como archivo de cestas" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Guardando como archivo de cestas. Por favor, espere..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Este fichero no es un archivo de cestas." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Error del archivo de cestas" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Este fichero está corrupto. No se puede abrir." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Este fichero fue creado con una versión reciente de %1. Se puede abrir, pero puede que falte parte de la información. Por ejemplo, pueden faltar algunas notas porque sean de un tipo que sólo esté disponible en versiones más modernas. Cuando vuelva a grabar el fichero, puede que sea sensato guardarlo en otro fichero, para conservar el original." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Este fichero fue creado con una versión reciente de %1. Por favor, actualice a una versión más moderna para poder abrir ese fichero." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Respaldar y restaurar" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Carpeta donde guardar" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Sus cestas se almacenan actualmente es esta carpeta:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Mover a otra carpeta..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Usar otra carpeta ya existente..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "¿Por qué hacer eso?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    Puede mover la carpeta en la que %1 almacena sus cestas a:

    • Almacenar sus carpetas en un lugar visible de su carpeta personal, como ~/Notas o ~/Cestas, a fin de poder hacer copias de respaldo cuando lo deseea.
    • " +"
    • Almacenar sus cestas en un servidor para compartirlas entre dos computadoras.
      En este caso, monte la carpeta compartida en el sistema de ficheros local y solicite a %2 que use ese punto de montaje.
      Advertencia: no debe ejecutar %3 al mismo tiempo en las dos computadoras, o se arriesgaría a perder datos mientras las dos aplicaciones estén desincronizadas.

    " +"Recuerde que no debe cambiar manualmente el contenido de esta carpeta (por ejemplo añadir un fichero a una carpeta de basket no añadirá ese fichero a una carpeta de cesta no añadirá ese fichero a la cesta.)

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Copias de respaldo" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Copia de respaldo..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Restaurar una copia de respaldo..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Última copia de respaldo: nunca" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Última copia de respaldo: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Elija una carpeta a la que mover las cestas" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "La carpeta %1 no está vacía. ¿Desea sobreescribirla?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "¿Sobreescribir la carpeta?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "S&obreescribir" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Sus cestas se han movido con éxito a %1. %2 va a ser reiniciado para tener en cuenta este cambio." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Elija una carpeta existente en la que almacenar las cestas" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Sus carpeta para guardar las cestas ha sido cambiada con éxito a %1. %2 va a ser reiniciado para tener en cuenta este cambio." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Cestas_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Archivos tar comprimidos con gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Todos los ficheros" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Hacer una copia de respaldo de las cestas" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "El fichero %1 ya existe. ¿Desea sobreescribirlo?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "¿Sobreescribir el fichero?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Haciendo copia de respaldo de las cestas. Por favor, espere..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Abriar un archivo de cestas" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "LEAME.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Ésta es una copia de seguridad de sus cestas, tal y como estaban antes de que empezar a restaurar la copia de respaldo %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Si la restauración ha tenido éxito y ha restaurado lo que quería restaurar, puede eliminar esta carpeta." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Si algo fuera mal durante el proceso de restauración, puede volver a usar esta carpeta para almacenar sus cestas y no se perderá nada." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Seleccione «Basket» -> «Respaldar y restaurar...» -> «Usar otra carpeta existente...» y seleccione esa carpeta." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Restaurando %1. Por favor, espere..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Si algo fuse mal durante el proceso de restauración, lea el fichero %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Restaurar las cestas" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Este archivo no es una copia de respaldo de cestas, o está corrupto. No se puede importar. En su lugar se han conservado sus cestas viejas." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Error de restauración" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Su copia de respaldo ha sido restaurada con éxito en %1. %2 va a ser reiniciado para tener en cuenta este cambio." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Reiniciar" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Cestas antes de la restauración" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Cestas antes de la restauración (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "La nota nueva no coincide con el filtro y está oculta." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Una nota nueva no coincide con el filtro y está oculta." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "" +"Algunas notas nuevas no coinciden con el criterio de filtrado y están " +"ocultas." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Las notas nuevas no coinciden con el criterio de filtrado y están ocultas." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Agrupar" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Insertar" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Soltado en la cesta %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Este mensaje nunca debería aparecer. Si lo hace, ¡el programa tiene un " +"fallo! Por favor, informe del error al desarrollador." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Inserte una nota aquí\n" +"Pulse con el botón derecho para ver más opciones" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Redimensionar esas columnas" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Redimensionar este grupo" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Redimensionar esta nota" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Seleccionar o mover esta nota" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Seleccionar o mover este grupo" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Asignar o eliminar etiquetas de esta nota" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Etiquetas asignadas: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Expandir este grupo" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Contraer este grupo" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Agrupar la nota con la que está debajo\n" +"Pulse con el botón derecho para ver más opciones" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Agrupar la nota con la que está encima\n" +"Pulse con el botón derecho para ver más opciones" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Añadido" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Última modificación" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Pulse en la derecha para agrupar en vez de insertar" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Pulse en la izquierda para insertar en vez de agrupar" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Desbloquear" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Cesta protegida con contraseña." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Pulse «Desbloquear» para acceder a ella." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "" +"Esta versión de %1
    " +"no admite cifrado." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "Para hacer que las cestas permanezcan desbloqueadas, cambie
    la duración del bloqueo automático en las preferencias de la aplicación." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Cargando..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Personalizar..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrar por esta etiqueta" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrar por este e&stado" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Etiquetas" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"¿Realmente desea borrar esta nota?\n" +"¿Desea realmente borrar esas %n notas?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Borrar nota\n" +"Borrar notas" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Nota copiada al portapapeles.\n" +"Notas copiadas al portapapeles." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Nota cortada al portapapeles.\n" +"Notas cortadas al portapapeles." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Nota copiada a la selección.\n" +"Notas copiadas a la selección." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "No se puede abrir esta nota." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "No está autorizado a abrir este fichero." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Guardar en un fichero" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Por favor, introduzca la contraseña para la siguiente clave privada:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Por favor, introduzca la contraseña para la cesta %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Por favor, asigne una contraseña a la cesta %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "No hay suficiente espacio en disco para guardar los datos de la cesta" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Permisos erróneos sobre los ficheros de la cesta" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Por favor, elimine los ficheros del disco %1 para permitir que la " +"aplicación guarde sus cambios de forma segura." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Los permisos del archivo %1 no son válidos. Por favor, compruebe que " +"tiene acceso de escritura sobre él y sobre las carpetas padre." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Error de guardado" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Disculpe, pero la creación de una carpeta para esta nueva cesta ha fallado." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Falló la creación de la cesta" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Disculpe, pero la copia de la plantilla para esta nueva cesta ha fallado." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" +"Disculpe, pero la personalización de la plantilla para esta nueva cesta ha " +"fallado." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Propiedades de la cesta" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Nombre" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Imagen de fondo:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "&Color de fondo:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Color del &texto:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Ninguno)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposición" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Col&umnas:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Forma libre" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mapa mental" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Accesos rápidos de teclado" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Aprenda algunos trucos..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Recordar fácilmente sus accesos rápidos de teclado:" +"
    Con la primera opción, darle a la cesta un acceso rápido de la forma Alt+Letra subrayará esa letra en el árbol de cestas." +"
    Por ejemplo, si asigna el acceso rápido Alt+C a una cesta llamada Consejos, la cesta será mostrada en el árbol como Consejos. Visualizar los accesos rápidos ayuda a recordarlos más rapidamente.

    " +"

    Local vs Global:
    " +"La primera opción le permite mostrar la cesta mientras la ventana principal está activa. Los accesos rápidos globales son válidos desde cualquier sitio, incluso si la ventana está cerrada.

    " +"

    Mostrar vs Cambiar:
    La última opción hace que ésta sea la cesta actual sin abrir la ventana principal. Es útil cuando se añade a los accesos rápidos globales configurables para, por ejemplo, pegar el contenido del portapapeles o la selección en la cesta actual desde cualquier sitio.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "&Mostrar esta cesta" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Mostrar esta cesta (acceso rápido &global)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "&Cambiar a esta cesta (acceso rápido global)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Muestra si hay cambios que todavía no hayan sido guardados." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Ctrl+soltar: copiar, Mayúsculas+soltar: mover, Mayúsculas+Ctrl+soltar: " +"enlazar." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Esta cesta está bloqueada.
    Pulse para desbloquearla.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Esta cesta está desbloqueada.
    Pulse para bloquearla.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "General" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Mostrar/ocultar la ventana principal" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Le permite mostrar la ventana principal si está oculta, y ocultarla si " +"está visible." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Pegar el contenido del portapapeles en la cesta actual" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "Le permite pegar el contenido del portapapeles en la cesta actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Mostrar el nombre de la cesta actual" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Le permite saber qué cesta es la actual sin abrir la ventana principal." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Pegar la selección en la cesta actual" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "Le permite pegar la selección del portapapeles en la cesta actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Crear una nueva cesta" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "Le permite crear una nueva cesta sin necesidad de abrir la ventana principal (a continuación puede usar alguno de los otros accesos rápidos globales para añadir una nota, pegar el contenido del portapapeles o la selección actual en esta nueva cesta)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Ir a la cesta anterior" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "Le permite cambiar la cesta actual a la cesta anterior sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Ir a la siguiente cesta" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "Permite cambiar la cesta actual a la cesta siguiente sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Insertar una nota de texto" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "Añade un texto a la cesta actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Insertar una nota de imagen" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "Añade una imagen a la cesta actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Insertar una nota de enlace" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Añade un enlace a la cesta actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Insertar una nota de color" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Añade un color a la cesta actual sin necesidad de abrir la " +"ventana principal." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Elegir un color de la pantalla" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Añade un color escogido de un píxel de la pantalla a la cesta " +"actual sin necesidad de abrir la ventana principal." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Capturar una zona de la pantalla" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Captura una zona de la pantalla como imagen en la cesta actual sin " +"necesidad de abrir la ventana principal." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Cestas" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Por favor, escriba en inglés o francés." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "

    Ãrbol de cestas

    Aquí está la lista de sus cestas. Puede organizar sus datos poniéndolos en diferentes cestas. Puede agrupar cestas por temática creando nuevas cestas dentro de otras. Puede navegar a través de ellas pulsando en una cesta para abrirla, o reorganizarlas arrastrando y soltando." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Archivo de cestas..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Ocultar la ventana" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "Página web &HTML..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "&Fichero de texto..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Respaldar y restaurar..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Borrar" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Selecciona todas las notas" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Deseleccio&nar todas" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Deselecciona todas las notas seleccionadas" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Invertir la selección" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Invierte la actual selección de notas" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Editar..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Abrir" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Abrir &con..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Guardar en un fichero..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "A&grupar" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "&Desagrupar" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Llevar a lo más al&to" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "S&ubir" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "&Bajar" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Llevar a lo más &bajo" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Texto" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "En&lace" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Imagen" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Color" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "L&anzador" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importar un lanzador del menú de &KDE..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&portar un icono..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Cargar desde un &fichero..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "C&olor desde la pantalla" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Capturar una &zona de la pantalla" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Nueva cesta..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Nueva &subcesta..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Nueva cesta &vecina..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Nuevo" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "Elimina&r" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "&Contraseña..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "B&loquear" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtrar" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrar todas las &cestas" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "Vacia&r el filtro" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "Cesta &anterior" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "Cesta siguie&nte" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Plegar esta cesta" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Expandir esta cesta" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Configurar los accesos rápidos &globales..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "Cestas de &bienvenida" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Conversión de notas en texto simple" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Conversión de notas en texto simple a notas en texto enriquecido..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Bloqueada" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Sin notas" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n nota\n" +"%n notas" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n seleccionada\n" +"%n seleccionadas" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "todas las coincidencias" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "sin filtro" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n coincidencia\n" +"%n coincidencias" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Seleccionado un color para la cesta %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Las notas en texto simple han sido convertidas a notas en texto enriquecido." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Conversión finalizada" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "No hay ninguna nota en texto simple que convertir." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Parece que el fichero basketui.rc no existe o es demasiado antiguo." +"
    %1 no puede ejecutarse sin él y terminará.

    " +"

    Por favor, compruebe su instalación de %2.

    " +"

    Si no tiene privilegios de administrador para instalar la aplicación en todo el sistema, puede copiar el fichero basketui.rc del archivo de instalación a la carpeta %4.

    " +"

    Como último recurso, si está seguro de que la aplicación está bien instalada pero tenía una versión anterior de basketui.rc, trate de eliminar el fichero %5basketui.rc

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Recurso no encontrado" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "No se pudo añadir una nota." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Capturada una zona de la pantalla en la cesta %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Borrar la cesta" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Borrar sólo esa cesta" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Borrar la nota y sus hijos" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "¿Desea realmente eliminar la cesta %1 y su contenido?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Eliminar la cesta" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "Elimina&r la cesta" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "%1 tiene las siguientes cestas hija.
    ¿Desea eliminarlas también?
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Eliminar las cestas hija" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "Elimina&r las cestas hija" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Archivos de cestas" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Contenido del portapeles pegado en la cesta %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Selección pegada en la cesta %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "No se ha añadido ninguna nota." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "La cesta %1 está bloqueada" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Bloqueada)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Asignar una nueva etiqueta..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "Elimina&r todas" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"¡%1 ha dado un error! Disculpe.\n" +"\n" +"¡Pero no todo está perdido! Podría ayudarnos a solucionar el fallo. Debajo hay información que describe el error, así que simplemente pulse Enviar o, si tiene tiempo, escriba una breve descripción de qué estaba haciendo justo antes de que se produjera el error.\n" +"\n" +"Muchas gracias." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "La información que de abajo permitirá a los desarrolladores identificar el problema. Por favor, no la modifique." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"¡%1 ha dado un error! Disculpe.\n" +"\n" +"¡Pero no todo está perdido! Quizá ya haya una actualización disponible que solucione el problema. Por favor, compruebe el repositorio de software de su distribución." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Ventana de depuración" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Exportar la cesta a HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Nombre de fichero para la página HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "Nombre del &fichero:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "&Empotrar los ficheros locales enlazados" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Empotrar las carpetas locales en&lazadas" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Borrar los ficheros anteriores en la car&peta de destino" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&matear para impresión" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Vaciar el filtro" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtrar: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "Etiquet&a: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrar todas las cestas" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(No etiquetada)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Etiquetada)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Corrección ortográfica automática" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Comprobar la ortografía..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Permitir tabulaciones" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    El replicado de carpetas ya no es posible (vea basket.kde.org para más información).

    La carpeta %1 ha sido copiada para las necesidades de la cesta. Puede borrar esta carpeta o la cesta, o utilizar ambas. Pero recuerde que modificar una no modificará la otra, puesto que ahora son dos entidades separadas.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Importación de una carpeta replicada" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "Documentos HTML" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Exportar a HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Exportando a HTML. Por favor, espere..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_ficheros" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "iconos" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "imágenes" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "cestas" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "datos" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "Creado con %1, una herramienta de KDE para tomar notas y mantener información al alcance de la mano." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Predeterminado)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Otro..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Lista de claves privadas" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Correo electrónico" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Seleccione una clave privada:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "El listado de claves terminó inesperadamente." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Esa clave pública no está destinada a cifrado" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Algoritmo no soportado" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Contraseña incorrecta." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Seleccionar un icono" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Explorar..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Todos los iconos)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Iconos recientes)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Acciones" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Aplicaciones" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Dispositivos" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Sistema de ficheros" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Tipos de fichero" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Ficheros de icono (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Enviar a los desarrolladores de la aplicación un comentario sobre algo que le gusta." + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Enviar a los desarrolladores de la aplicación un comentario sobre algo que no le gusta." + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" +"Enviar a los desarrolladores de la aplicación un comentario sobre un " +"comportamiento anómalo del programa." + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "Enviar a los desarrolladores de la aplicación un comentario sobre una nueva característica que le gustaría." + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "Enviar un comentario a los de&sarrolladores" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Bienvenido a esta versión de prueba de %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Bienvenido a %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Para ayudarnos a mejorar, sus comentarios son importantes." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "Cada vez que encuentre algo de la aplicación que le encante o le frustre, por favor, pulse el emoticono apropiado bajo la barra de título de la ventana, describa brevemente lo que le gustó o le disgustó y pulse Enviar." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Cada vez que tenga un experiencia genial, por favor, pulse en la cara " +"sonriente bajo la barra de título de la ventana. Describa brevemente lo " +"que le gustó y pulse Enviar." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Cada vez que tenga una experiencia nefasta, por favor, pulse en la cara " +"enfadada debajo de la barra de título de la ventana. Describa brevemente lo " +"que le disgustó y pulse Enviar." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "Siga la misma mecánica para informar rápidamente de un fallo: simplemente pulse en el icono del objeto roto en la esquina superior derecha de la ventana, descríbalo y pulse Enviar." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Cada vez que descubra un error en la aplicación, por favor, pulse en el " +"icono del objeto rojo bajo la ventana de título de la ventana. Describa " +"brevemente el comportamiento anómalo y pulse Enviar." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Ejemplo:\n" +"Ejemplos:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Me gustan las nuevas imágenes. Muy refrescantes." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "No me gusta la página de bienvenida de este asistente. Consume demasiado tiempo." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"La aplicacion tiene un comportamiento anómalo cuando pulso en el " +"botón Añadir. No ocurre nada." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Me gustaría disponer de una nueva característica que me permitiera " +"enviar mi trabajo por correo electrónico." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Ayudar a mejorar esta aplicación" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Dirección de correo electrónico" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Por favor, introduzca su dirección de correo electrónico." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "Sólo será utilizada para contactar con usted en caso de que se necesite más información sobre sus comentarios, preguntarle cómo reproducir los errores de los cuales nos informa, enviarle correcciones del error para que las pruebe, etc." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"La dirección de correo electrónico es opcional. Si no facilita ninguna, sus " +"comentarios serán enviados anónimamente." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Enviar un comentario a los desarrolladores" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Enviar a los desarrolladores de la aplicación un comentario sobre:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "A&lgo que le gusta" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Algo que le &disgusta" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Un &comportamiento anómalo de esta aplicación" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Una nueva &característica que desearía" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Mostrar los botones de comentario bajo las barras de título de las &ventanas" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Enviar el comentario" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "Dirección de correo &electrónico..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Por favor, describa brevemente su opinión sobre %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Por favor, escriba en inglés." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Podría utilizar una herramienta de traducción en línea." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Para que los comentarios que envía sean más útiles para mejorar la aplicación, " +"intente enviar la misma cantidad de comentarios positivos y negativos." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" +"No pregunte por características nuevas: sus peticiones serán " +"ignoradas." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Error al intentar enviar el informe.

    Por favor, inténtelo de nuevo " +"más tarde.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Error de transmisión" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Su comentario ha sido enviado con éxito. Ayudará a mejorar la aplicación." +"

    Gracias por su tiempo.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Comentario enviado" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&Cursiva" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Negrita" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Siempre" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Nunca" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Cuando el ratón pase por encima" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Cuando el ratón esté fuera" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "S&ubrayado:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Colo&r:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Color cuando el ratón pase por enci&ma:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Tamaño del &icono:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Ninguno" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Del tamaño del icono" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "El doble del tamaño del icono" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "El triple del tamaño del icono" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Previsualizar:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "¿Ha deshabilitado la previsualización pero aún ve imágenes?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    Es normal porque hay varios tipos de notas.
    Esta opción sólo se aplica a las notas de fichero y de enlace local.
    Y las imágenes que ve son notas de imagen, no notas de fichero.
    Las notas de fichero son documentos genéricos, mientras que las notas de imagen son ilustraciones que puede dibujar.

    " +"

    Cuando usted suelta ficheros en las cestas, %1 detecta su tipo y le muestra el contenido de estos ficheros.
    Por ejemplo, cuando suelta ficheros de texto o imagen, se crean para ellos notas de texto o imagen." +"
    Los tipos de ficheros que %2 no entiende se muestran como notas de fichero genérico con sólo un icono o una previsualización del fichero y un nombre de fichero.

    " +"

    Si no desea que la aplicación cree los diferentes tipos de nota dependiendo del contenido de los ficheros que suelta, vaya a la página «General» y desmarque «Imagen o animación» en el grupo «Ver contenido de los ficheros añadidos para los siguientes tipos».

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Ejemplo" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimizar" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Cesta" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    ¿Desea realmente salir de %1?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Tenga en cuenta que no necesita salir de la aplicación antes de " +"terminar su sesión de KDE. Si termina su sesión mientras la aplicación está todavía ejecutándose, se volverá a cargar automáticamente la próxima vez que inicie la sesión.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Confirmación de la salida" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Nueva cesta" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Color de fondo" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "&Gestionar las plantillas..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Una columna" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Dos columnas" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Tres columnas" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Libre" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "Plan&tilla:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Cestas)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "C&rear en:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "¿Por qué es útil?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Crear cestas dentro de otras cestas para formar una jerarquía le permite ser más organizado. Puede por ejemplo:

    " +"
    • Agrupar cestas por temática;
    • " +"
    • Agrupar cestas en carpetas para diferentes proyectos;
    • " +"
    • Hacer secciones con subcestas representando capítulos o páginas;
    • " +"
    • Hacer grupos de cestas para exportarlas juntas (por ejemplo, para " +"enviarlas por correo electrónico).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Forma libre" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mapa mental" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Imagen)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Texto simple" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Texto" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Imagen" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animación" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Sonido" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Enlace" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Lanzador" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Color" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Desconocido" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Editar este texto simple" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Editar este texto" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Editar esta imagen" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Editar esta animación" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Editar el nombre de fichero de este sonido" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Editar el nombre de este fichero" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Editar este enlace" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Editar este lanzador" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Editar este color" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Editar este objeto desconocido" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Apertura del texto simple..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Apertura de textos simples..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Apertura del texto simple con..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Apertura de textos simples con..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Abrir el texto simple con:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Abrir los textos simples con:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Apertura del texto..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Apertura de textos..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Apertura del texto con..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Apertura de textos con..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Abrir este texto con:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Abrir estos textos con:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Tamaño" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 por %2 píxeles" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Apertura de la imagen..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Apertura de imágenes..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Apertura de la imagen con..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Apertura de las imágenes con..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Abrir la imagen con:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Abrir las imágenes con:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Pulse para ver a tamaño completo" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Apertura de la animación..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Apertura de las animaciones..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Apertura de la animación con..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Apertura de las animaciones con..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Abrir la animación con:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Abrir las animaciones con:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Tipo" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Abrir este fichero" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Apertura del fichero..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Apertura de los ficheros..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Apertura del fichero con..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Apertura de los ficheros con..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Abrir el fichero con:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Abrir los ficheros con:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Abrir este sonido" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Apertura del sonido..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Apertura de los sonidos..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Apertura del sonido con..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Apertura de los sonidos con..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Abrir el sonido con:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Abrir los sonidos con:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Destino" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Abrir este enlace" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "El enlace no tiene ninguna URL que abrir." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Apertura del destino del enlace..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Apertura de los destinos de los enlaces..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Apertura del destino del enlace con..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Apertura de los destinos de los enlaces con..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Abrir el destino del enlace con:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Abrir los destinos de los enlaces con:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (ejecutar en una terminal)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Comentario" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Orden" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Lanzar esta aplicación" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "El lanzador no tiene ninguna orden que ejecutar." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Lanzamiento de la aplicación..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Lanzamiento de las aplicaciones..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Rojo: %1, Verde: %2, Azul: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Tono: %1, Saturación: %2, Valor: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Nombre de color CSS" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Nombre de color CSS extendido" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Es un color Web" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Las imágenes todavía no se pueden editar aquí (la próxima versión de Basket incluirá un editor de imágenes).\n" +"¿Desea abrirla con una aplicación que pueda hacerlo?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Edición de la nota de imagen" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Esta animación no puede ser editada aquí.\n" +"¿Desea abrirla con una aplicación que pueda hacerlo?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Edición de la nota de animación" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Edición de la nota de color" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"El tipo de esta nota es desconocido y no puede ser editado aquí.\n" +"Sin embargo, puede arrastrar o copiar esta nota a una aplicación que sea capaz de interpretarla." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Edición de nota desconocida" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Edición de la nota de enlace" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Icono:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Destino:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Título:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Edición de la nota de lanzador" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Elija una orden a ejecutar:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "A&divinar" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Or&den:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Nombre:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Negrita" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Subrayado" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Alinear a la izquierda" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Centrado" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Alinear a la derecha" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Justificado" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 no soporta el tipo de datos que ha arrastrado.
    Sin embargo, se ha creado una nota genérica, que le permitirá arrastrar o copiar los datos a una aplicación que sea capaz de interpretarlos.

    Si desea que Basket soporte estos datos, por favor contacte con el desarrollador o visite la base de datos de tipos admitidos por BasKet .

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Tipo(s) MIME no soportado(s)" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Mover aquí\tMayúsculas" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Copiar aquí\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "En&lazar aquí\tCtrl+Mayúsculas" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "C&ancelar\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importar un icono como imagen" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Elegir el tamaño del icono que se va a importar como imagen:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Cargar el contenido de un fichero en una nota" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Protección por contraseña" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "No se ha seleccionado ninguna clave privada." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Cesta" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Exportar" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importar" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Ir" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Nota" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "E&tiquetas" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Barra de formateo de texto" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<ro:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "Si&n protección" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "&Proteger la cesta con una contraseña" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Proteger la cesta con una &clave privada:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "A la izquierda" + +#: settings.cpp:368 +msgid "On right" +msgstr "A la derecha" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Posición del árbol de cestas:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Encima" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Debajo" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Posición de la barra de &filtrado:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Utilizar globos para informar de los resultados de las acciones globales" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "¿Qué son las acciones globales?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Puede configurar accesos rápidos globales para realizar diversas acciones sin tener que mostrar la ventana principal. Por ejemplo, puede pegar el contenido del portapapeles, tomar un color de un punto de la pantalla, etc. " +"Puede también utilizar la rueda de desplazamiento del ratón sobre la bandeja del sistema para cambiar la cesta actual, o utilizar el botón central del ratón sobre ese icono para pegar la selección actual." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Cuando lo haga, %1 muestra un pequeño mensaje en forma de globo para informarle de que la acción se ha realizado correctamente. Puede " +"deshabilitar dicho globo." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "Tenga en cuenta que dichos mensajes son lo suficientemente inteligentes como para no aparecer si la ventana principal está visible. Esto se debe a que usted ya ve el resultado de sus acciones en la ventana principal." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Icono de la bandeja del sistema" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "Anclar en la ban&deja del sistema" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Mo&strar el icono de la cesta actual en la bandeja del sistema" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "&Ocultar la ventana principal cuando el ratón esté fuera de ella durante" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " décimas de segundo" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "&Mostrar la ventana principal cuando el ratón pase por encima del icono de la bandeja del sistema durante" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Ani&mar los cambios en las cestas" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Mo&strar los consejos en las cestas" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "Notas &grandes" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Comportamiento" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "&Transformar las líneas que empiecen por * o - en listas en los editores de texto" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Pe&dir confirmación antes de borrar notas" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "&Exportar las etiquetas en los textos" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "¿Cuándo se aplica esto?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "Se aplica cuando usted copia y pega, o arrastra y suelta notas a un editor de texto." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "Si está activada, esta propiedad le permite pegar las etiquetas como equivalentes textuales." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Por ejemplo, una lista de notas con las etiquetas Por hacer y " +"Hecho se exportan como líneas precedidas por [ ] o [x], representando una casilla vacía y una casilla marcada." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "A&grupar una nota nueva cuando se pulse a la derecha de la linea de inserción" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "¿Cómo agrupar una nota nueva?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Cuando esta opción está habilitada, la línea de inserción no sólo le " +"permite insertar notas en la posición del cursor, sino también permite " +"agrupar una nota nueva con la que está bajo el cursor:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Coloque su ratón entre dos notas, donde quiera añadir una nueva." +"
    Pulse a la izquierda de la marca central sobre la línea de " +"inserción para insertar una nota.
    Pulse a la derecha para " +"agrupar una nota con la que está debajo o encima, dependiendo de la posición del cursor del ratón.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "No hacer nada" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Pegar el contenido del portapapeles" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Insertar un lanzador" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Insertar un color desde la pantalla" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Cargar una nota desde un fichero" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importar un lanzador del menú de KDE" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importar un icono" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "Mayú&sculas + botón central en cualquier sitio:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "en la posición del cursor del ratón" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "Bloquear a&utomáticamente las cestas protegidas cuando estén cerradas durante" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minutos" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Usar el agente GnuPG para las cestas protegidas con clave &privada/pública" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Lugar de las nuevas notas:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "En la nota actual" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Tamaño de las &nuevas imágenes:" + +#: settings.cpp:718 +msgid "&by" +msgstr "po&r" + +#: settings.cpp:721 +msgid "pixels" +msgstr "píxeles" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Visualizar..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Ver el contenido de los ficheros añadidos para los siguientes tipos" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "Texto sim&ple" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "Página &HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Imagen o animación" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Sonido" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Grabación del sonido de una conferencia" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Informe anual" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Carpeta personal" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Lanzar %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Sonidos" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Ficheros" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Enlaces &locales" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "E&nlaces de red" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "L&anzadores" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Abrir las notas de &texto con una aplicación personalizada:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Abrir las notas de texto con:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Abrir las notas de &imagen con una aplicación personalizada:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Abrir las notas de imagen con:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Abrir las notas de a&nimación con una aplicación personalizada:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Abrir las notas de animación con:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Abrir las notas de sonido con &una aplicación personalizada:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Abrir las notas de sonido con:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "

    Si se marca esta opción, se utilizará la aplicación definida abajo para abrir este tipo de notas.

    Si no, se empleará la aplicación que haya configurado en Konqueror.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Defina la aplicación a utilizar para abrir este tipo de notas en vez de " +"la aplicación configurada en Konqueror.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "¿Cómo cambiar la aplicación empleada para abrir los enlaces web?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Los enlaces web se abren en diferentes aplicaciones, dependiendo del tipo de contenido del enlace (una página web, una imagen, un documento PDF...), como si fueran ficheros de su equipo.

    " +"

    Aquí se explica cómo conseguir que todas las direcciones web se abran en su navegador web. Es útil si no está utilizando KDE (si utiliza GNOME o XFCE, por ejemplo).

    " +"
    • Abra el Centro de control de KDE (si no está disponible, intente escribir «kcontrol» en una terminal de línea de órdenes);
    • " +"
    • Vaya a la sección «Componentes de KDE» y después a «Selector de componentes»;
    • " +"
    • Elija «Navegador web», marque «en el siguiente navegador:» e introduzca el nombre de su navegador web (como «firefox» o «epiphany»).
    " +"

    Ahora, cuando pulse cualquier enlace que empiece con «http://...», se abrirá en su navegador web (como Mozilla " +"Firefox, o Epiphany, o...).

    " +"

    Para una configuración más precisa (como abrir sólo las páginas web en su navegador web), lea el segundo enlace de ayuda.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "¿Cómo cambiar las aplicaciones utilizadas para abrir los ficheros y enlaces?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Aquí se explica cómo definir la aplicación que se empleará para cada tipo de fichero. Esto también se aplica a los enlaces web si elige no abrirlos sistemáticamente en un navegador web (vea el primer enlace de ayuda). Las opciones predeterminadas deberían ser lo suficientemente buenas, pero este consejo es útil si utiliza GNOME, XFCE u otro entorno que no sea KDE.

    " +"

    Esto es un ejemplo de cómo abrir páginas HTML en su navegador web (y seguir usando las otras aplicaciones para otras direcciones o ficheros). Repita estos pasos para cada tipo de fichero que desee abrir con una aplicación específica.

    " +"
    • Abra el Centro de control de KDE (si no está disponible, intente escribir «kcontrol» en un terminal de línea de órdenes);
    • " +"
    • Vaya a la sección «Componentes de KDE» y después a «Asociaciones de fichero»;
    • " +"
    • En el árbol, expanda «texto» y pulse en «html»;
    • " +"
    • En la lista de aplicaciones, añada su navegador web como la primera entrada de la lista;
    • " +"
    • Haga lo mismo para el tipo «application -> xhtml+xml».
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importar la jerarquía" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "¿Cómo importar las notas?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Mantener jerarquía original (todas las notas en cestas separadas)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Colocar las notas de &primer nivel en cestas separadas" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "Tod&as las notas en una sola cesta" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importar un fichero de texto" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Formato del fichero de texto" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Notas s&eparadas por una línea vacía" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Una ¬a por línea" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Las notas comienzan con un &guión (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Las notas comienzan con un a&sterisco (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Usar otro separador:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "Todo en una not&a" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Desde KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Desde KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Desde Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Desde Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Desde %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "No se puede importar ese fichero. O está corrupto, o no es un fichero de TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Formato de fichero incorrecto" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Una nota está cifrada. El importador no soporta aún notas cifradas. " +"Por favor, elimine el cifrado con TuxCards y vuelva a importar el " +"fichero." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Las notas cifradas no están soportadas todavía" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Nota cifrada.
    El importador no soporta aún notas cifradas. Por favor, elimine el cifrado con TuxCards y vuelva " +"a importar el fichero.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Cerrar la ventana principal mantendrá %1 ejecutándose en la bandeja del " +"sistema. Utilice Salir desde el menú Cesta para salir de la " +"aplicación.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Anclaje en la bandeja del sistema" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Selección pegada en la cesta %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimizar" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Restaurar" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Bloqueado)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Por hacer" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Sin marcar" + +#: tag.cpp:544 +msgid "Done" +msgstr "Hecho" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Progreso" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Prioridad" + +#: tag.cpp:599 +msgid "Low" +msgstr "Baja" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Media" + +#: tag.cpp:600 +msgid "High" +msgstr "Alta" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Preferencia" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Malo" + +#: tag.cpp:601 +msgid "Good" +msgstr "Bueno" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Excelente" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Destacado" + +#: tag.cpp:667 +msgid "Important" +msgstr "Importante" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Muy importante" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Idea" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Título" + +#: tag.cpp:669 +msgid "Code" +msgstr "Código" + +#: tag.cpp:669 +msgid "Work" +msgstr "Trabajo" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "T." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Personal" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Divertido" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Personalizar las etiquetas" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "Nue&va etiqueta" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Nuevo est&ado" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Mover hacia arriba (Ctrl+Mayúsculas+Arriba)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Mover hacia abajo (Ctrl+Mayúsculas+Abajo)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Etiqueta" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "Elimina&r" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "Acceso &rápido:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "&Heredado por las nuevas notas vecinas" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Estado" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "No&mbre:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "Eli&minar" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblema:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "Color de &fondo:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Tachado" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Texto:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "Co&lor:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Tipo de letra:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Tamaño:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Te&xto equivalente:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "Si la rellena, esta propiedad le permite pegar esta etiqueta o este estado como equivalente textual." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "&En cada una de las líneas" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "¿Qué significa eso?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "Cuando una nota tiene varias líneas, puede elegir exportar la etiqueta o el estado sobre la primera línea o sobre cada línea de la nota." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"En el ejemplo anterior, la etiqueta de la nota superior sólo se exporta en " +"la primera línea, mientras que la etiqueta de la nota inferior se exporta en todas las líneas de la nota." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Eliminar la etiqueta la borrará de todas las notas a las que esté asignada " +"actualmente." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Confirmar la eliminación de una etiqueta" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Borrar la etiqueta" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Borrar el estado eliminará la etiqueta de todas las notas a las que el " +"estado esté asignado actualmente." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Confirmar la eliminación de un estado" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Borrar el estado" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 por 16 píxeles" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 por 22 píxeles" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 por 32 píxeles" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 por 48 píxeles" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 por 64 píxeles" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 por 128 píxeles" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Redimensione la ventana para escoger el tamaño de la imagen\n" +"y ciérrela o pulse Escape para aceptar los cambios." + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..3cef7ba --- /dev/null +++ b/po/fr.po @@ -0,0 +1,3483 @@ +# translation of basket_fr.po to +# translation of fr.po to +# Translation of basket.pot to Français +# This file is distributed under the same license as the BasKet package. +# Copyright (C) 2003-2005. +# +# Sébastien Laoût , 2004, 2005, 2006, 2007. +# Yann Verley , 2007. +msgid "" +msgstr "" +"Project-Id-Version: basket_fr\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-02-26 23:10+0100\n" +"Last-Translator: Yann Verley \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.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Sébastien Laoût" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "slaout@linux62.org" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Prendre soin de vos idées.

    Une application de prises de " +"notes qui facilite la mise à plat de vos idées comme vous pensez, et de " +"les retrouver rapidement plus tard. Organiser vos notes n'a jamais été aussi " +"facile.

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Blocs notes BasKet" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Auteur, mainteneur" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Cryptage des paniers, intégration dans Kontact, importateur KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Verrouillage automatique des paniers, icône de statut de la sauvegarde, " +"copier / coller HTML, info-bulle sur le nom des paniers, déposer sur le nom " +"des paniers" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Icône" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Enregistrer en tant qu'archive de paniers" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Enregistrer en tant qu'archive de paniers. Veuillez patienter..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Ce fichier n'est pas une archive de paniers." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Erreur d'archive de paniers" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Ce fichier est corrompu. Il ne peut pas être ouvert." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" +"Ce fichier a été créé avec une version récente de %1. Il peut être ouvert " +"mais il se peut que certaines informations soient manquantes. Par exemple, " +"quelques notes peuvent manquer car elles sont d'un type disponible " +"uniquement dans des nouvelles versions. En enregistrant ce fichier, il peut " +"être judicieux de l'enregistrer dans un autre fichier, pour préserver " +"l'original." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" +"Ce fichier a été créé avec une version récente de %1. Veuillez installer une " +"nouvelle version pour pouvoir ouvrir ce fichier." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Sauvegarder et restaurer" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Dossier d'enregistrement" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Vos paniers sont actuellement stockés dans ce dossier :
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Déplacer dans un autre dossier..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Utiliser un autre dossier existant..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Pourquoi faire cela ?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    Vous pouvez déplacer le dossier dans lequel %1 stocke vos paniers pour :

    • Stocker " +"vos paniers dans endroit visible de votre dossier personnel, comme ~/Notes or ~/" +"Paniers, afin de pouvoir les sauvegarder manuellement lorsque vous le souhaitez.
    • " +"
    • Stocker vos paniers sur un serveur pour les partager entre deux ordinateurs.
      Dans ce cas, " +"montez le dossier partagé dans le système de fichier local et demandez à %2 d'utiliser ce " +"point de montage.
      Attention : vous ne devez pas lancer %3 en même temps sur les deux " +"ordinateurs, ou vous risquez de perdre des données lorsque que les deux applications seront désynchronisées." +"

    Veuillez noter que vous ne devez pas changer le contenu de ce dossier manuellement " +"(par exemple, ajouter un fichier dans un dossier d'un panier n'ajoutera pas ce fichier dans ce panier).

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Sauvegardes" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Sauvegarder..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Restaurer une sauvegarde..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Dernière sauvegarde : jamais" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Dernière sauvegarde : %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Choix d'un dossier où déplacer les paniers" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "Le dossier %1 n'est pas vide. Voulez-vous vraiment l'écraser ?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Écraser le dossier ?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "Écras&er" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Vos paniers ont été déplacés avec succès dans %1. %2 va être redémarré pour prendre en compte ces changements." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Choix d'un dossier existant où enregistrer les paniers" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Votre dossier d'enregistrement a été changé avec succès pour %1. %2 va être redémarré pour prendre en compte ces changements." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Paniers_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Archive Tar compactée par Gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Tous les fichiers" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Sauvegarder les paniers" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Un fichier %1 existe déjà. Voulez-vous vraiment l'écraser ?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Écraser le fichier ?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Sauvegarde des paniers. Veuillez patienter..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Ouvrir une archive de paniers" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "LISEZMOI.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Ceci est une copie de sécurité de vos paniers comme ils étaient avant le démarrage de la restauration de la sauvegarde %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Si la restauration a été un succès et que vous avez restauré ce que vous vouliez restaurer, vous pouvez supprimer ce dossier." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Si quelque chose s'est mal passé durant le processus de restauration, vous pouvez réutiliser ce dossier pour enregistrer vos paniers et rien ne sera perdu." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Choisissez \"Panier\" -> \"Sauvegarder et restaurer...\" -> \"Utiliser un autre dossier existant...\" et sélectionnez ce dossier." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Restauration de %1. Veuillez patienter..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Si quelque chose se passe mal durant la restauration, lisez le fichier %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Restaurer les paniers" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Soit cette archive n'est pas une sauvegarde de paniers, soit elle est corrompue. Elle ne peut pas être importée. Vos anciens paniers ont été préservés à la place." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Erreur de restauration" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Votre sauvegarde a été restaurée avec succès dans %1. %2 va être redémarré pour prendre en compte ces changements." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Redémarrage" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Paniers avant restauration" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Paniers avant restauration (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "La nouvelle note ne correspond pas au filtre et est cachée." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Une nouvelle note ne correspond pas au filtre et est cachée." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Certaines nouvelles notes ne correspondent pas au filtre et sont cachées." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Les nouvelles notes ne correspondent pas au filtre et sont cachées." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Grouper" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Insérer" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Déposé dans le panier %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Ce message ne devrait jamais apparaître. Si c'est le cas, cette application " +"est boguée ! Merci de rapporter ce bogue au développeur." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Insérer une note ici\n" +"Clic droit pour plus d'options" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Redimensionner ces colonnes" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Redimensionner ce groupe" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Redimensionner cette note" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Sélectionner ou déplacer cette note" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Sélectionner ou déplacer ce groupe" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Attribuer ou retirer des marques de cette note" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Marques attribuées : %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Développer ce groupe" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Replier ce groupe" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Regrouper une note avec celle en dessous\n" +"Clic droit pour plus d'options" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Regrouper une note avec celle au-dessus\n" +"Clic droit pour plus d'options" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Ajouté" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Dernière modification" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1 : %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Cliquez sur la droite pour grouper au lieu d'insérer" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Cliquez sur la gauche pour insérer au lieu de grouper" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Déverrouiller" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Panier protégé par mot de passe." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Cliquez Déverrouiller pour le consulter." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "La cryptographie n'est pas supportée par
    cette version de %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"Pour que les paniers restent déverrouillés, changez le temps
    de " +"verrouillage automatique dans les options de l'application.
    " + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Chargement..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Personnaliser..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrer cette marque" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrer cet &état" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Marques" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Voulez-vous réellement supprimer cette note ?\n" +"Voulez-vous réellement supprimer ces %n notes ?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Supprimer une note\n" +"Supprimer des notes" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Note copiée dans le presse-papiers.\n" +"Notes copiées dans le presse-papiers." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Note coupée dans le presse-papiers.\n" +"Notes coupées dans le presse-papiers." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Note copiée dans la sélection.\n" +"Notes copiées dans la sélection." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Impossible d'ouvrir cette note." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Vous n'êtes pas autorisé à ouvrir ce fichier." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Enregistrer dans un fichier" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Veuillez saisir le mot de passe pour la clef privée suivante :" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Veuillez saisir le mot de passe pour le panier %1 :" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Veuillez assigner un mot de passe au panier %1 :" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Espace disque insuffisant pour enregistrer le panier" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Mauvaises permissions sur les fichiers du panier" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Veuillez supprimer des fichiers sur le disque %1 afin de permettre à " +"l'application de sauvegarder vos changements en toute sécurité." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Les permissions du fichier %1 sont mauvaises. Veuillez vérifier que " +"vous avez les droits en écriture sur celui-ci, ainsi que sur les dossiers " +"parents." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Erreur d'enregistrement" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Désolé, mais la création d'un dossier pour ce nouveau panier a échoué." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Échec de la création de panier" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Désolé, mais la copie du modèle pour ce nouveau panier a échoué." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Désolé, mais la personnalisation du modèle pour ce nouveau panier a échoué." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Propriétés du panier" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Nom" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Image d'arrière-plan :" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "&Couleur d'arrière-plan :" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Couleur du &texte :" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Aucune)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposition" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Colo&nnes :" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "Lib&re" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "Carte &mentale" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Raccourci clavier" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Apprendre quelques astuces..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Mémoriser facilement vos raccourcis:
    Avec la première " +"option, donner au panier un raccourci de la forme Alt+Lettre soulignera cette lettre dans l'arborescence des paniers.
    Par " +"exemple, si vous assignez le raccourci Alt+A au panier nommé " +"Astuces, le panier sera affiché ainsi dans l'arborescence : Astuces. Cela vous aide à visualiser les raccourcis pour les mémoriser " +"plus rapidement.

    Local / Global :
    La première " +"option vous permet de montrer le panier alors que la fenêtre principale est " +"active. Les raccourcis globaux sont valides depuis n'importe où, même si la " +"fenêtre est cachée.

    Montrer / Basculer :
    La " +"dernière option fait de ce panier le panier courant sans ouvrir la fenêtre " +"principale. Ceci est utile si vous utilisez les raccourcis globaux " +"configurables pour, par exemple, coller le presse-papiers ou la sélection " +"dans le panier courant depuis n'importe où.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "Montrer ce &panier" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Montrer ce panier (raccourci &global)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "&Basculer vers ce panier (raccourci global)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Indique s'il y a des changements qui n'ont pas encore été sauvegardés." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+déposer : copier, Maj+déposer : déplacer, Maj+Ctrl+déposer : lier." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Ce panier est verrouillé.
    Cliquez pour le déverrouiller.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Ce panier est déverrouillé.
    Cliquez pour le verrouiller.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Général" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Montrer / cacher la fenêtre principale" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Vous permet de montrer la fenêtre principale si elle était cachée, et de la " +"cacher si elle était affichée." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Coller le contenu du presse-papiers dans le panier courant" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Vous permet de coller le contenu du presse-papiers dans le panier courant " +"sans avoir à ouvrir la fenêtre principale." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Montrer le nom du panier courant" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"Vous permet de connaître quel est le panier courant sans ouvrir la fenêtre " +"principale." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Coller la sélection dans le panier courant" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Vous permet de coller la sélection dans le panier courant sans avoir à " +"ouvrir la fenêtre principale." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Crée un nouveau panier" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Vous permet de créer un nouveau panier sans avoir à ouvrir la fenêtre " +"principale (vous pouvez alors utiliser les autres raccourcis clavier globaux " +"pour ajouter un objet, coller le contenu du presse-papiers ou coller la " +"sélection dans le panier courant)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Aller au panier précédent" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Vous permet de changer le panier courant pour le précédent sans avoir à " +"ouvrir la fenêtre principale." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Aller au panier suivant" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Vous permet de changer le panier courant pour le suivant sans avoir à ouvrir " +"la fenêtre principale." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Insérer une note texte" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "Ajouter un texte au panier courant sans avoir à ouvrir la fenêtre principale." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Insérer une note image" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Ajouter une image au panier courant sans avoir à ouvrir la fenêtre " +"principale." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Insérer une note lien" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Ajouter un lien au panier courant sans avoir à ouvrir la fenêtre principale." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Insérer une note couleur" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Ajouter une couleur au panier courant sans avoir à ouvrir la fenêtre " +"principale." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Puiser une couleur sur l'écran" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Ajouter une couleur puisée sur un pixel à l'écran dans le panier courant " +"sans avoir à ouvrir la fenêtre principale." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Capturer une zone de l'écran" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Capturer une zone de l'écran en tant qu'image dans le panier courant sans " +"avoir à ouvrir la fenêtre principale." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Paniers" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Veuillez écrire en anglais ou en français." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Arborescence des paniers

    Ceci est la liste de vos paniers. Vous " +"pouvez organiser vos données en les mettant dans différents paniers. Vous " +"pouvez grouper les paniers par sujet en créant de nouveaux paniers dans " +"d'autres. Vous pouvez naviguer entre eux en cliquant sur un panier pour " +"l'ouvrir, ou les réorganiser en utilisant le glisser / déposer." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Archive de paniers..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Cacher la fenêtre" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "&Page Web HTML..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "&Fichier texte..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Sauvegarder et restaurer..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "Suppri&mer" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Sélectionner toutes les notes" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Tout &désélectionner" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Désélectionne toutes les notes sélectionnées" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "In&verser la sélection" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Inverse la sélection des notes" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Éditer..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Ouvrir" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Ouvrir &avec..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Enregistrer dans un fichier..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Grouper" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Dég&rouper" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Déplacer en &haut" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Déplacer au-&dessus" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Déplacer en desso&us" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Déplacer en &bas" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Texte" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Lien" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Image" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Couleur" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "L&anceur" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importer un lanceur depuis le menu &KDE..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&porter une icône..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Charger depuis un &fichier..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "C&ouleur sur l'écran" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Capturer une &zone de l'écran" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Nouveau panier..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Nouveau &sous-panier..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Nouveau panier &voisin..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Nouveau" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "S&upprimer" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "&Mot de passe..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "&Verrouiller" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtrer" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrer tous les &paniers" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "Vider le filt&re" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Panier précédent" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "Panier &suivant" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Replier ce panier" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Développer ce panier" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Configurer les raccourcis clavier &globaux..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "Paniers de &bienvenue" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Conversion des notes au format texte brut" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Conversion des notes au format texte brut en notes au format texte enrichi..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Verrouillé" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Pas de note" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n note\n" +"%n notes" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n sélectionnée\n" +"%n sélectionnées" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "toutes correspondent" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "pas de filtre" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n correspondance\n" +"%n correspondances" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Une couleur puisée dans le panier %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Les notes au format texte brut ont été converties en notes au format texte enrichi." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Conversion terminée" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Il n'y a pas de notes au format texte brut à convertir." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Le fichier basketui.rc semble ne pas exister ou est trop vieux.
    %1 " +"ne peut pas s'exécuter sans lui et va s'arrêter.

    Veuillez vérifier " +"votre installation de %2.

    Si vous n'avez pas les droits administrateur " +"pour installer l'application pour tout le système, vous pouvez copier le " +"fichier basketui.rc depuis l'archive d'installation vers le dossier %4.

    En dernier recours, si vous êtes sûr que " +"l'application est bien installée mais que vous aviez une version précédente, " +"essayez de supprimer le fichier %5basketui.rc

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Ressource non trouvée" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Impossible d'ajouter une note." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Une zone de l'écran capturée dans le panier %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Supprimer le panier" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Supprimer seulement ce panier" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Supprimer la note avec ses fils" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "" +"Voulez-vous réellement supprimer le panier %1 et son contenu ?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Supprimer le panier" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Supprimer le panier" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" +"%1 a les paniers fils suivants.
    Voulez-vous les supprimer " +"aussi ?
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Supprimer les paniers fils" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "&Supprimer les paniers fils" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Archives de paniers" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Contenu du presse-papiers collé dans le panier %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Sélection collée dans le panier %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Aucune note n'a été ajoutée." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Le panier %1 est verrouillé" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Verrouillé)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Attribuer une nouvelle marque..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Tout supprimer" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 a planté ! Nous en sommes désolé.\n" +"\n" +"Mais tout n'est pas perdu ! Vous pouvez potentiellement nous aider à fixer " +"ce problème. Des informations décrivant le problème sont disponibles ci-" +"dessous. Cliquez simplement sur Envoyer ou, si vous avez le temps, écrivez " +"une courte description de ce que vous étiez en train de faire juste avant le " +"crash.\n" +"\n" +"Merci beaucoup." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Les informations ci-dessous permettront aux développeurs d'identifier le " +"problème, merci de ne pas les modifier." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 a planté ! Nous en sommes désolé.\n" +"\n" +"Mais tout n'est pas perdu ! Peut-être existe-t-il une mise à jour qui règle " +"le problème. Veuillez vérifier le dépôt de paquetages pour votre " +"distribution." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Fenêtre de déboguage" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Exporter le panier en HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Nom de la page HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "Nom du &fichier :" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "&Embarquer les fichiers locaux liés" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Embarquer &les dossiers locaux liés" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "&Supprimer les fichiers précédents dans le dossier cible" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&mater pour l'impression" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Vider le filtre" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtrer : " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "Marqu&e : " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrer tous les paniers" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Non marqué)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Marqué)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Vérification orthographique automatique" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Vérifier l'orthographe..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Autoriser les tabulations" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    Le reflet de dossier n'est plus possible (voyez basket.kde.org pour plus d'informations).

    Le dossier %" +"1 a été copié pour les besoins du panier. Vous pouvez soit supprimer ce " +"dossier ou le panier, ou utiliser les deux. Mais souvenez-vous qu'en " +"modifiant l'un des deux, l'autre ne sera plus modifié car ils sont " +"maintenant deux entités séparées.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Importation d'un dossier reflété" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "Documents HTML" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Exporter en HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Exportation en HTML. Veuillez patienter..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_fichiers" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "icônes" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "images" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "paniers" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "données" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "Fait avec %1, un outil KDE pour prendre des notes et garder ses informations sous la main." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Par défaut)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Autre..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Liste des clefs publiques" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-mail" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Choisissez une clef secrète :" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "La liste des clefs privées est incomplète." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Cette clef publique n'est pas destinée pour le cryptage" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Algorithme non supporté" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Mauvais mot de passe." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Sélectionner une icône" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Parcourir..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Toutes les icônes)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Icônes récentes)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Actions" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Applications" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Périphériques" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Système de fichiers" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Types de fichiers" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Fichiers d'icônes (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" +"Envoyer un commentaire aux développeurs de l'application à propos de quelque " +"chose que vous aimez." + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" +"Envoyer un commentaire aux développeurs de l'application à propos de quelque " +"chose que vous n'aimez pas." + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" +"Envoyer un commentaire aux développeurs de l'application à propos d'un " +"mauvais comportement de l'application." + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" +"Envoyer un commentaire aux développeurs de l'application à propos d'une " +"nouvelle fonctionnalité que vous désirez." + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "&Envoyer un commentaire aux développeurs" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Bienvenue dans cette version de test de %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Bienvenue dans %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Pour nous aider à l'améliorer, vos remarques sont importantes." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Chaque fois que vous appréciez quelque chose ou que vous êtes frustré par " +"l'application, merci de cliquez sur l'émoticône appropriée sous la barre de " +"titre de la fenêtre, décrivez rapidement ce que vous aimez ou pas et cliquez sur " +"Envoyer." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Chaque fois que vous appréciez quelque chose, merci de cliquez sur l'émoticône " +"appropriée sous la barre de titre de la fenêtre, décrivez rapidement ce que " +"vous aimez et cliquez sur Envoyer." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Chaque fois que vous êtes frustré par l'application, merci de cliquez sur " +"l'émoticône appropriée sous la barre de titre de la fenêtre, décrivez " +"rapidement ce que vous n'aimez pas et cliquez sur Envoyer." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Suivez le même principe pour reporter rapidement un bogue : cliquez " +"simplement sur l'icône d'objet cassé en haut à droite de la fenêtre, " +"décrivez-le et cliquez sur Envoyer." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Chaque fois que vous découvrez un bogue dans l'application, merci de cliquez sur " +"l'objet cassé sous la barre de titre de la fenêtre, décrivez-le rapidement et " +"cliquez sur Envoyer." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Exemple :\n" +"Exemples :" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "J'aime les nouvelles images. Très rafraîchissant." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Je n'aime pas la page de bienvenue de cet assistant. Elle fait perdre trop " +"de temps." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"L'application a un mauvais comportement en cliquant sur le bouton " +"Ajouter. Rien ne se passe." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Je désire une nouvelle fonctionnalité me permettant d'envoyer mon " +"travail par e-mail." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Aider à l'amélioration de cette application" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Adresse e-mail" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Veuillez saisir votre adresse e-mail." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Elle sera uniquement utilisée pour vous contacter si plus d'informations " +"sont nécessaires à propos de vos commentaires, pour savoir comment " +"reproduire les bogues que vous reportez, vous envoyer des corrections de " +"bogue pour que vous les testiez, etc." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"L'adresse e-mail est optionnelle. Si vous n'en fournissez pas, vos " +"commentaires seront envoyés anonymement." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Envoyer un commentaire aux développeurs" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Envoyer un commentaire aux développeurs de l'application à propos de :" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Quelque chose que vous ai&mez" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Quelque chose que vous n'aimez &pas" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Un ma&uvais comportement de l'application" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Une &nouvelle fonctionnalité que vous désirez" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "" +"Afficher les &boutons de commentaire en dessous des barres de titre des " +"fenêtres" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Envoyer le commentaire" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "Adresse &e-mail..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Veuillez décrire brièvement votre opinion sur %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Veuillez écrire en anglais." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Vous pouvez utiliser un outil de traduction en ligne." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Pour rendre les commentaires que vous envoyez plus utiles à l'amélioration " +"de cette application, essayez d'envoyer la même quantité de commentaires " +"positifs et négatifs." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" +"Ne demandez pas de nouvelles fonctionnalités : vos requêtes seront " +"ignorées." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Une erreur s'est produite lors de l'envoi du rapport.

    Merci de " +"réessayer plus tard.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Erreur de transmission" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Votre commentaire a été envoyé avec succès. Il permettra d'aider à " +"améliorer cette application.

    Merci pour votre temps.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Commentaire envoyé" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "I&talique" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Gras" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Toujours" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Jamais" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Lors du survol de la souris" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Quand la souris est à l'extérieur" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "So&ulignement :" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "&Couleur :" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Couleu&r lors du survol de la souris :" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Taille de l'&icône :" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Aucun" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "De la taille de l'icône" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Deux fois la taille de l'icône" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Trois fois la taille de l'icône" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "A&perçu :" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Vous avez désactivé l'aperçu mais voyez-vous toujours des images ?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    Ceci est normal car il y a plusieurs types de notes.
    Cette option " +"s'applique seulement aux notes fichiers et liens locaux.
    Et les images que " +"vous voyez sont des notes images, pas des notes fichiers.
    Les notes " +"fichiers sont des documents génériques, tandis que les notes images sont des " +"images sur lesquelles vous pouvez dessiner.

    Lorsque vous déposez des " +"fichiers dans des paniers, %1 détecte leur type et vous montre le contenu de " +"ces fichiers.
    Par exemple, lorsque vous déposez des fichiers images ou " +"textes, des notes images ou textes sont créés pour ceux-ci.
    Pour les " +"types de fichiers que %2 ne comprend pas, ils sont montrés en tant que " +"notes fichiers génériques avec juste une icône ou un aperçu et un nom de " +"fichier.

    Si vous ne voulez pas que l'application crée des notes en " +"fonction du contenu des fichiers que vous déposez, ouvrez la page \"Général" +"\" et décochez \"Image ou animation\" dans le groupe \"Voir le contenu des " +"fichiers ajoutés pour les types suivants\".

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Exemple" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Réduire" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Panier" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Voulez-vous réellement quitter %1 ?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Notez que vous n'avez pas besoin de quitter l'application avant de clore " +"votre session KDE. Si vous fermez votre session alors que l'application " +"s'exécute encore, l'application sera redémarrée la prochaine fois que vous " +"démarrerez votre session.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Confirmer pour quitter" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Nouveau panier" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Couleur d'arrière-plan" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "&Gérer les modèles..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Une colonne" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Deux colonnes" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Trois colonnes" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Libre" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Modèle :" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Paniers)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "&Créer dans :" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "En quoi est-ce utile ?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Créer des paniers à l'intérieur d'autres paniers pour former une " +"hiérarchie vous permet d'être plus organisé. Par exemple, vous pouvez :

    • Grouper des paniers par thèmes ou sujets ;
    • Grouper des " +"paniers dans des dossiers pour différents projets ;
    • Créer des " +"sections avec des sous-paniers représentant des chapitres ou des pages ;
    • Créer des groupes de paniers à exporter ensemble (par exemple, pour " +"les envoyer par e-mail à un groupe de personnes).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Libre" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Carte mentale" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Image)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Texte brut" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Texte" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Image" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animation" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Son" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Lien" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Lanceur" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Couleur" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Inconnu" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Éditer ce texte brut" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Éditer ce texte" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Éditer cette image" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Éditer cette animation" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Éditer le nom de fichier de ce son" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Éditer le nom de ce fichier" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Éditer ce lien" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Éditer ce lanceur" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Éditer cette couleur" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Éditer cet objet inconnu" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Ouverture du texte brut..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Ouverture des textes bruts..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Ouverture du texte brut avec..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Ouverture des textes bruts avec..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Ouvrir le texte brut avec :" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Ouvrir les textes bruts avec :" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Ouverture du texte..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Ouverture des textes..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Ouverture du texte avec..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Ouverture des textes avec..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Ouvrir ce texte avec :" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Ouvrir ces textes avec :" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Taille" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 par %2 pixels" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Ouverture de l'image..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Ouverture des images..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Ouverture de l'image avec..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Ouverture des images avec..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Ouvrir l'image avec :" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Ouvrir les images avec :" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Cliquez pour voir en taille réelle" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Ouverture de l'animation..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Ouverture des animations..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Ouverture de l'animation avec..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Ouverture des animations avec..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Ouvrir l'animation avec :" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Ouvrir les animations avec :" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Type" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Ouvrir ce fichier" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Ouverture du fichier..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Ouverture des fichiers..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Ouverture du fichier avec..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Ouverture des fichiers avec..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Ouvrir le fichier avec :" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Ouvrir les fichiers avec :" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Ouvrir ce son" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Ouverture du son..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Ouverture des sons..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Ouverture du son avec..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Ouverture des sons avec..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Ouvrir le son avec :" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Ouvrir les sons avec :" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Cible" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Ouvrir ce lien" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Le lien n'a pas d'URL à ouvrir." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Ouverture de la cible du lien..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Ouverture de la cible des liens..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Ouverture de la cible du lien avec..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Ouverture de la cible des liens avec..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Ouvrir la cible du lien avec :" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Ouvrir de la cible des liens avec :" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (exécuter dans un terminal)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Commentaire" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Commande" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Lancer cette application" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Le lanceur n'a pas de commande à exécuter." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Lancement de l'application..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Lancement des applications..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RVB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Rouge : %1, Vert : %2, Bleu : %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "TSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Teinte : %1, Saturation : %2, Valeur : %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Nom de couleur CSS" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Nom de couleur CSS étendu" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Est une couleur Web" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Les images ne peuvent pas encore être éditées ici (la prochaine version de " +"Blocs notes BasKet inclura un éditeur d'image).\n" +"Voulez-vous ouvrir une application qui comprend cet objet ?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Édition de la note image" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Les images animées ne peuvent pas être éditées ici.\n" +"Voulez-vous ouvrir une application qui comprend cet objet ?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Édition de la note animation" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Édition de la note couleur" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Le type de cette note est inconnu et ne peut pas être édité ici.\n" +"Vous pouvez par contre glisser ou copier cette note dans une application qui " +"la comprend." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Édition de la note inconnue" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Édition de la note lien" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Icône :" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Cible :" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Titre :" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Édition de la note lanceur" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Choisissez une commande à exécuter :" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Deviner" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "&Commande :" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Nom :" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Gras" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Souligné" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Aligner à gauche" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Centrer" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Aligner à droite" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Justifier" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 ne supporte pas les données que vous avez déposées.
    Il a tout de " +"même créé une note générique, vous permettant de la glisser ou de la copier " +"vers une application qui la comprend.

    Si vous désirez le support de " +"ces données, veuillez contacter le développeur ou visiter la base de données des types supportés par " +"BasKet.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Type(s) MIME non supporté(s)" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Déplacer ici\tMaj" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Copier ici\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "&Lier ici\tCtrl+Maj" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Annuler\tEchap." + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importer une icône en tant qu'image" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Choisissez la taille de l'icône à importer en tant qu'image :" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Charger le contenu d'un fichier dans une note" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Protection par mot de passe" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Aucune clef privée sélectionnée." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Panier" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Exporter" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importer" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "A&ller" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Note" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Marques" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Mise en forme de texte" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "&Filtre :" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Pas de protection" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Protéger par &mot de passe" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+M" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Protéger par &clef privée :" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+C" + +#: settings.cpp:367 +msgid "On left" +msgstr "À gauche" + +#: settings.cpp:368 +msgid "On right" +msgstr "À droite" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Position de l'arborescence des paniers :" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "En haut" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "En bas" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Position de la &barre de filtrage :" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Utiliser des bulles pour rapporter le résultat des actions globales" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Que sont les actions globales ?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Vous pouvez configurer des raccourcis claviers globaux pour faire quelques " +"actions sans avoir à afficher la fenêtre principale. Par exemple, vous " +"pouvez coller le contenu du presse-papiers, récupérer une couleur sur " +"l'écran, etc. Vous pouvez aussi utiliser la molette de la souris sur " +"l'icône de notification pour changer le panier courant ; ou utiliser le " +"bouton du milieu de la souris sur cette icône pour coller la sélection " +"courante." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"En faisant cela, %1 affiche une petite bulle pour vous informer que l'action " +"s'est bien déroulée. Vous pouvez désactiver cette bulle." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Notez que ces messages sont assez intelligents pour ne pas apparaître si la " +"fenêtre principale est visible. C'est parce que vous voyez déjà le résultat " +"de vos actions dans la fenêtre principale." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Icône de notification" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Incruster dans la boîte à miniatures" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "&Montrer l'icône du panier courant dans l'icône de notification" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "&Cacher la fenêtre principale quand la souris sort pendant" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " dixièmes de secondes" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"Montrer la &fenêtre principale lorsque la souris survole l'icône de " +"notification pendant" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Ani&mer les changements dans les paniers" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Montr&er les info-bulles dans les paniers" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "&Grosses notes" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Comportement" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" +"&Transformer les lignes commençant par * ou - en des listes dans les " +"éditeurs de texte" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "&Demander confirmation avant de supprimer des notes" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "E&xporter les marques dans les textes" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Quand cela s'applique-t-il ?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Cela s'applique lorsque vous copiez / collez, ou glissez / déposez des notes " +"dans un éditeur de texte." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Si cette propriété est activée, elle vous permet de coller les marques en " +"tant qu'équivalents texte." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Par exemple, une liste de notes avec les marques À faire et Fait est exportée en tant que lignes précédées de [ ] ou [x], " +"représentant des boîtes à cocher." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Grouper une nouvelle note en cliquant sur la droite de la ligne d'insertion" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Comment grouper une nouvelle note ?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Lorsque cette option est activée, la ligne d'insertion ne vous permet " +"plus seulement d'insérer des notes à la position du curseur de la souris, " +"mais elle vous permet aussi de grouper une nouvelle note avec celle sous le " +"curseur de la souris :

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Placez le curseur de la souris entre deux notes, où vous souhaitez " +"ajouter une nouvelle note.
    Cliquez sur la gauche de la marque " +"centrale sur la ligne d'insertion pour insérer une note.
    Cliquez " +"sur la droite pour grouper une note, avec celle du dessus " +"ou du dessous, en fonction de la position du curseur de la souris.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Ne rien faire" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Coller le presse-papiers" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Insérer un lanceur" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Puiser une couleur sur l'écran" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Charger une note depuis un fichier" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importer un lanceur depuis le menu KDE" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importer une icône" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Maj+clic-milieu n'importe où :" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "à la position du curseur de la souris" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "&Verrouiller automatiquement les paniers fermés pendant" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minutes" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Utiliser l'agent GnuPG pour les paniers prot&égés par clef privée / publique" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Place des nouvelles notes :" + +#: settings.cpp:693 +msgid "At current note" +msgstr "À la note courante" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Taille des &nouvelles images :" + +#: settings.cpp:718 +msgid "&by" +msgstr "pa&r" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixels" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Visualiser..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Voir le contenu des fichiers ajoutés pour les types suivants" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "&Texte brut" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&Page HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "Image ou &animation" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Son" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Enregistrement audio de la conférence" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Rapport annuel" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Dossier personnel" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Lancer %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Sons" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Fichiers" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Liens locau&x" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "Lie&ns réseaux" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "L&anceurs" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Ouvrir les notes &textes avec une application personnalisée :" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Ouvrir les notes textes avec :" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Ouvrir les notes &images avec une application personnalisée :" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Ouvrir les notes images avec :" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Ouvrir les notes &animations avec une application personnalisée :" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Ouvrir les notes animations avec :" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Ouvrir les notes &sons avec une application personnalisée :" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Ouvrir les notes sons avec :" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Si coché, l'application définie ci-dessous sera utilisée pour ouvrir ce " +"type de note.

    Sinon, l'application configurée dans Konqueror sera " +"utilisée.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Définir l'application à utiliser pour ouvrir ce type de note au lieu de " +"celle configurée dans Konqueror.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Comment changer l'application utilisée pour ouvrir les liens Web ?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Lorsque vous ouvrez des liens Web, ils sont ouverts dans différentes " +"applications, en fonction du contenu du lien (une page Web, une image, un " +"document PDF...), comme si c'était des fichiers sur votre ordinateur.

    Voici comment faire si vous voulez que toutes les adresses Web soient " +"ouvertes dans votre navigateur Web. C'est utile si vous n'utilisez pas KDE " +"(si vous utilisez GNOME ou XFCE, par exemple...).

    • Ouvrez le " +"centre de configuration de KDE (si ce n'est pas disponible, essayez de saisir " +"\"kcontrol\" dans un terminal) ;
    • Allez dans la section \"Composants " +"de KDE\" puis \"Sélecteur de composants\" ;
    • Choisissez \"Navigateur " +"Web\", cochez \"dans le navigateur suivant :\" et entrez le nom de votre " +"navigateur Web (comme \"firefox\" ou \"epiphany\").

    Maintenant, " +"lorsque vous cliquerez sur n'importe quel lien qui commence par " +"\"http://...\", il sera ouvert dans votre navigateur Web (comme Mozilla " +"Firefox ou Epiphany, ou...).

    Pour une configuration mieux dosée (comme " +"ouvrir uniquement les pages Web dans votre navigateur Web), lisez le second " +"lien d'aide.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "" +"Comment changer les applications utilisées pour ouvrir les fichiers et les " +"liens ?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Voici comment définir l'application à utiliser pour chaque type de " +"fichier. Cela s'applique aussi aux liens Web si vous choisissez de ne pas " +"les ouvrir systématiquement dans un navigateur Web (voyez le premier lien " +"d'aide). La configuration par défaut devrait être bonne pour vous, mais " +"cette astuce est utile si vous utilisez GNOME, XFCE, ou un autre " +"environnement que KDE.

    Ceci est un exemple montrant comment ouvrir une " +"adresse de page HTML dans votre navigateur Web (et continuer d'utiliser les " +"autres applications pour les autres adresses ou fichiers). Répétez ces étapes " +"pour chaque type de fichier que vous voulez ouvrir dans une application " +"spécifique.

    • Ouvrez le centre de configuration de KDE (si ce n'est " +"pas disponible, essayez de taper \"kcontrol\" dans un terminal) ;
    • Allez dans la section \"Composants de KDE\" puis \"Associations de " +"fichiers\" ;
    • Dans l'arbre, développez \"text\" et cliquez \"html\" ;" +"
    • Dans la liste des applications, ajoutez votre navigateur Web en " +"tant que première entrée ;
    • Faites la même chose pour le type " +"\"application -> xhtml+xml\".
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importer la hiérarchie" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Comment importer les notes ?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Garder la hiérarchie originale (toutes les notes dans des dossiers séparés)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&Placer les notes de premier niveau dans des paniers séparés" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&Toutes les notes dans un seul panier" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importer un fichier texte" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Format du fichier texte" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Notes séparées par des lignes &vides" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Une ¬e par ligne" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Les notes commencent par un &tiret (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Les notes commencent par une &étoile (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Utiliser un autre séparateur :" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "Tout &dans une note" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Depuis KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Depuis KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Depuis Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Depuis Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Depuis %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Impossible d'importer ce fichier. Il corrompu, ou ce n'est peut-être pas un " +"fichier TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Mauvais format de fichier" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Une note est cryptée. L'importateur ne supporte pas encore les notes " +"cryptées. Merci de supprimer le cryptage avec TuxCards et réimporter le " +"fichier." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Notes cryptées non supportées pour le moment" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Note cryptée.
    L'importateur ne supporte pas " +"encore les notes cryptées. Merci de supprimer le cryptage avec TuxCards et " +"réimporter le fichier.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Fermer la fenêtre principale gardera %1 dans la boîte à miniatures. " +"Utilisez Quitter depuis le menu Panier pour quitter " +"l'application.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Incruster dans la boîte à miniatures" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Sélection collée dans le panier %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Réduire" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Restaurer" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Verrouillé)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1 : %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "À faire" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Non coché" + +#: tag.cpp:544 +msgid "Done" +msgstr "Fait" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Progression" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Priorité" + +#: tag.cpp:599 +msgid "Low" +msgstr "Faible" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Moyenne" + +#: tag.cpp:600 +msgid "High" +msgstr "Haute" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Préférence" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Mauvais" + +#: tag.cpp:601 +msgid "Good" +msgstr "Bon" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Excellent" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Surligner" + +#: tag.cpp:667 +msgid "Important" +msgstr "Important" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Très important" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Idée" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Titre" + +#: tag.cpp:669 +msgid "Code" +msgstr "Code" + +#: tag.cpp:669 +msgid "Work" +msgstr "Travail" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "T." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Personnel" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Amusant" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Personnaliser les marques" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "Nouvelle &marque" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Nouvel &état" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Déplacer au-dessus (Ctrl+Maj+Haut)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Déplacer en dessous (Ctrl+Maj+Bas)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Marque" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "S&upprimer" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Raccourci :" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "&Hérité par les nouvelles notes voisines" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "État" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&Nom :" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "&Supprimer" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblème :" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Arrière-plan :" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Barré" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Texte :" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "&Couleur :" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Police :" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Taille :" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Équivalent te&xte :" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Si renseignée, cette propriété vous permet de coller les marques en tant " +"qu'équivalents textes." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "Sur cha&que ligne" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Qu'est-ce que cela signifie ?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Lorsqu'une note a plusieurs lignes, vous pouvez choisir d'exporter la marque " +"ou l'état sur la première ligne ou sur chaque ligne de la note." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"Dans l'exemple ci-dessus, la marque de la note du haut est seulement " +"exportée sur la première ligne, alors que la marque de la note du bas est " +"exportée sur chaque ligne de la note." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "Supprimer cette marque l'enlèvera de chaque note où elle est assignée." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Confirmer la suppression d'une marque" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Supprimer la marque" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "Supprimer cet état enlèvera la marque de chaque note où cet état est assigné." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Confirmer la suppression d'un état" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Supprimer l'état" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 par 16 pixels" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 par 22 pixels" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 par 32 pixels" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 par 48 pixels" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 par 64 pixels" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 par 128 pixels" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Redimensionnez la fenêtre pour sélectionner la taille de l'image\n" +"et fermez la ou pressez Entrée pour valider." + diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..4b2fa01 --- /dev/null +++ b/po/it.po @@ -0,0 +1,3486 @@ +# translation of it.po to italian +# +# Luigi Toscano , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-01-31 20:31+0100\n" +"Last-Translator: Luigi Toscano \n" +"Language-Team: italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Luigi Toscano" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "luigi.toscano@tiscali.it" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Ci prendiamo cura delle tue idee.

    Un'applicazione per " +"gestire gli appunti che rende semplice annotare le idee per come le pensi, e " +"ritrovarle rapidamente. Organizzare le tue note non è mai stato così facile." +"

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Blocco appunti BasKet" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autore, responsabile" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Cifratura dati, integrazione in Kontact, importazione da KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Bloccaggio automatico dei canestri, icona del salvataggio di stato, copia da/" +"incolla su HTML, suggerimenti con il nome del canestro, trascinamento sul " +"nome del canestro" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Icona" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Salva come archivio basket" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Salvataggio come archivio basket in corso. Attendere prego..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Questo file non è un archivio basket." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Errore nell'archivio basket" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Questo file è danneggiato. Non può essere aperto." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" +"Questo file è stato creato con una versione recente di %1. Può essere aperto " +"ma non tutte le informazioni potrebbero essere disponibili. Ad esempio " +"alcune note potrebbero mancare perché di un tipo presente solo nelle nuove " +"versioni. Quando salvi il file tieni in considerazione la possibilità di " +"salvarne uno nuovo per preservare quello originale." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" +"Questo file è stato creato con una versione recente di %1. Per piacere, " +"aggiorna ad una versione più recente se vuoi aprire questo file." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Salva e ripristina" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Salva cartella" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Il canestro è attualmente memorizzato nella cartella:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "S&posta in un'altra cartella..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Usa un'altra cartella esistente..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Perché fare questo?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    Puoi spostare la cartella dove %1 memorizza i tuoi canestri per:

    • Memorizzare " +"i canestri in una posizione visibile della tua cartella home, come ~/Note o ~/Canestri, " +"in modo da effettuarne una copia manualmente all'occorrenza.
    • Memorizzare i " +"canestri su un server per condividerli tra due computer.
      In questo caso, monta la " +"cartella condivisa nel file system locale e chiedi a %2 di utilizzare quel punto di " +"montaggio.
      Attenzione: non dovresti eseguire %3 contemporaneamente sui due computer, " +"o potresti perdere dei dati quando le due applicazioni sono non sincronizzate.

    Ricorda " +"che non dovresti cambiare manualmente il contenuto di quella cartella (ad esempio " +"l'aggiunta di un file in una cartella di un canestro non causerà l'aggiunta di " +"quel file al canestro).

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Copie di sicurezza" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Salva..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Ripristina salvataggio..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Ultima copia effettuata: mai" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Ultima copia effettuata: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Scegli la cartella in cui spostare i canestri" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "La cartella %1 non è vuota. Vuoi veramente sostituirla?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Sostituisci la cartella?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "S&ostituisci" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"Il canestro è stato spostato correttamente in %1. %2 sta per essere " +"riavviato per tenere in considerazione questo cambiamento." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Scegli una cartella esistente per memorizzare i canestri" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" +"La cartella di salvataggio dei canestri è stata modificata con successo in %1. " +"%2 sta per essere riavviato per tenere in considerazione questo cambiamento." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Canestri_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Archivi tar compressi con gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Tutti i file" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Salvataggio canestri" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Il file %1 esiste già. Vuoi veramente sostituirlo?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Sostituisci il file?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Salvataggio canestri in corso. Attendere prego..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Apri archivio basket" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "LEGGIMI.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" +"Questa è la copia di sicurezza dei tuoi canestri esattamente come erano di iniziare " +"il ripristino dell'archivio %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" +"Se la procedura di ripristino è andata a buon fine ed hai ripristinato ciò che volevi " +"ripristinare, puoi rimuovere questa cartella." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" +"Se qualcosa è andato storto durante la procedura di ripristino puoi riutilizzare " +"questa cartella per memorizzare i tuoi canestri e niente andrà perso." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" +"Scegli \"Canestro\"->\"Salva e ripristina...\"->\"Usa un'altra cartella " +"esistente...\" e seleziona quella cartella." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Ripristino di %1 in corso. Attendere prego..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" +"Se qualcosa dovesse andar male durante la procedura di ripristino, leggi il " +"file %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Ripristina canestri" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" +"Questo archivio non è una copia di sicurezza di canestri, oppure è rovinato. " +"Non può essere importato. I canestri preesistenti sono stati preservati." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Errore di ripristino" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"La copia di sicurezza è stata ripristinata correttamente in %1. %2 sta " +"per essere riavviato per tenere in considerazione questo cambiamento." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Riavvio" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Canestri prima del ripristino" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Canestri prima del ripristino (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "La nuova nota non corrisponde al criterio di ricerca ed è nascosta." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Una nota nuova non corrisponde al criterio di ricerca ed è nascosta." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Alcune note nuove non corrispondono al criterio di ricerca e sono nascoste." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Le nuove note non corrispondono al criterio di ricerca e sono nascoste." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Raggruppa" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Inserisci" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Trascinato sul canestro %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Questo messaggio non dovrebbe mai comparire. Se è questo il caso, il " +"programma contiene degli errori! Segnala l'errore allo sviluppatore." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Inserisci qui una nota\n" +"Fai clic con il pulsante destro per ulteriori opzioni" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Ridimensiona quelle colonne" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Ridimensiona questo gruppo" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Ridimensiona questa nota" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Seleziona o sposta questa nota" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Seleziona o sposta questo gruppo" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Assegna o rimuovi etichette a questa nota" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Etichette assegnate: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Espandi questo gruppo" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Chiudi questo gruppo" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Raggruppa la nota con quella sottostante\n" +"Fai clic con il pulsante destro per ulteriori opzioni" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Raggruppa la nota con quella sovrastante\n" +"Fai clic con il pulsante destro per ulteriori opzioni" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Aggiunto in data" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Ultima modifica" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Fai clic a destra per raggruppare invece di inserire" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Fai clic a sinistra per inserire invece di raggruppare" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "S&blocca" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Canestro protetto da password." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Premi Sblocca per accedere." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "Cifratura non supportata da
    questa versione di %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"Per far sì che il canestro resti sbloccato, cambia la durata
    del " +"bloccaggio automatico nelle impostazioni dell'applicazione." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Caricamento..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "Pe&rsonalizza..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtra secondo questa etichetta" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtra secondo questo &stato" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Etichette" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Vuoi veramente cancellare questa nota?\n" +"Vuoi veramente cancellare queste %n note?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Elimina nota\n" +"Elimina note" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Nota copiata negli appunti.\n" +"Note copiate negli appunti." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Taglia nota e metti negli appunti.\n" +"Taglia note e metti negli appunti." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Nota copiata nella selezione.\n" +"Note copiata nella selezione." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Impossibile aprire la nota." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Non sei autorizzato ad aprire questo file." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Salva su file" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Inserisci password della seguente chiave privata:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Inserisci password del canestro %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Assegna una password al canestro %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Spazio su disco insufficiente per salvare i dati di Basket" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Permessi errati per il file del canestro" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Rimuovi il file %1 dal disco per far sì che l'applicazione possa " +"salvare in modo sicuro i tuoi cambiamenti." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"I permessi di accesso a %1 non sono corretti. Controlla di avere i " +"permessi di scrittura sul file e sulle cartelle superiori." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Errore nel salvataggio" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Spiacente, ma la creazione della cartella per il nuovo canestro è fallita." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Creazione del canestro fallita" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "" +"Spiacente, l'operazione di copia del modello per il nuovo canestro non è " +"andata a buon fine." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" +"Spiacente, l'operazione di personalizzazione del modello per il nuovo " +"canestro non è andata a buon fine." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Proprietà del canestro" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Nome" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Immagine di sfondo:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "C&olore di sfondo:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Colore del &testo:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Nessuna)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposizione" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Colo&nne:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "Senza &vincoli" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mappa mentale" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Scorciatoia di tastiera" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Alcuni suggerimenti..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Ricorda facilmente le scorciatorie:
    Con la prima " +"opzione, assegnando al canestro una scorciatoia della forma Alt" +"+lettera, tale lettera sarà sottolineata nell'albero dei canestri." +"
    Ad esempio, se assegni la scorciatoia Alt+S ad un canestro " +"chiamato Suggerimenti, esso verrà mostrato come Suggerimenti nell'albero. Aiuta a visualizzare le scorciatoie per " +"memorizzarle più velocemente.

    Locale Vs globale:" +"
    La prima opzione consente di mostrare il canestro mentre la finestra " +"principale è attiva. Le scorciatorie globali sono valide ovunque, anche se " +"la finestra è nascosta.

    Mostra Vs Passa a:" +"
    L'ultima opzione rende attivo questo canestro senza aprire la finestra " +"principale. È utile in aggiunta alla scorciatoria globale configurabile, " +"ad esempio per incollare il contenuto degli appunti o la selezione nel canestro " +"corrente da qualsiasi parte.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "M&ostra questo canestro" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Mostra questo canestro (scorciatoia &globale)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "&Passa a questo canestro (scorciatoia globale)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Mostra se ci sono modifiche che non sono state ancora salvate." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+rilascia: copia, Shift+rilascia: sposta, Shift+Ctrl+rilascia: collega." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Questo canestro è bloccato.
    Fai clic per sbloccarlo.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Questo canestro è sbloccato.
    Fai clic per bloccarlo.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Generale" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Mostra/nascondi la finestra principale" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Consente di mostrare la finestra principale se è nascosta, e nasconderla se " +"è visibile." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Incolla il contenuto degli appunti nel canestro corrente" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Ti permette di incollare il contenuto degli appunti nel canestro corrente " +"senza dover aprire la finestra principale." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Mostra il nome del canestro corrente" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"Ti permette di conoscere il nome del canestro corrente senza dover aprire la " +"finestra principale." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Incolla la selezione nel canestro corrente" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Ti permette di incollare la selezione degli appunti nel canestro corrente " +"senza dover aprire la finestra principale." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Crea un nuovo canestro" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Ti permette di creare un nuovo canestro senza dover aprire la finestra " +"principale (dopo puoi usare le altre scorciatoie globali per aggiungere una " +"nota, incollare il contenuto degli appunti o della selezione nel nuovo " +"canestro)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Vai al canestro precedente" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Ti permette di passare al canestro precedente senza dover aprire la finestra " +"principale." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Vai al canestro successivo" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Ti permette di passare al canestro successivo senza dover aprire la finestra " +"principale." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Inserisci nota di testo" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "" +"Inserisci una nota di testo nel canestro corrente senza dover aprire la " +"finestra principale." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Inserisci nota di tipo immagine" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Inserisci una nota di tipo immagine nel canestro corrente senza dover aprire " +"la finestra principale." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Inserisci nota di tipo collegamento" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "" +"Inserisci una nota di tipo collegamento nel canestro corrente senza dover " +"aprire la finestra principale." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Inserisci nota di tipo colore" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Inserisci una nota di tipo colore nel canestro corrente senza dover aprire " +"la finestra principale." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Seleziona colore dallo schermo" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Inserisci una nota di colore, prelevato da un pixel dello schermo, nel " +"canestro corrente senza dover aprire la finestra principale." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Cattura zona di schermo" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Cattura una zona di schermo come immagine nel canestro corrente senza dover " +"aprire la finestra principale." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Canestri" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Per favore, scrivi in inglese o in francese." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Albero dei canestri

    Qui c'è la lista dei canestri. Puoi organizzare " +"i dati ponendoli in differenti canestri. Puoi raggruppare i canestri per " +"oggetto creando nuovi canestri al loro interno. Puoi sfogliarli, " +"selezionando un canestro per aprirlo, o riorganizzarli trascinandoli in una " +"diversa posizione." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "Archivio &basket..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Nascondi la finestra" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "Pagina &HTML..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "Note ade&sive" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "&File di testo..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Salva e ripristina..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Elimina" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Seleziona tutte le note" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Deselezio&na tutto" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Deseleziona tutte le note selezionate" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Inverti la selezione" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Inverti la selezione di note corrente" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Modifica..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Apri" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "A&pri con..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Salva su file..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "Ra&ggruppa" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Sepa&ra" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Sposta in ci&ma" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Sposta in &alto" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Sposta in &basso" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Sposta in &fondo" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Testo" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "Co&llegamento" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Immagine" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Colore" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "Esec&utore" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importa Esecutore dal menu &KDE..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&porta icona..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Carica da &file..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "C&olore da schermo" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Cattura &zona di schermo" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Nuovo canestro..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Nuovo &sottocanestro..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Nuovo canestro allo stesso li&vello..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Nuovo" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Rimuovi" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Pass&word..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "B&locca" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtro" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtra tutti i &canestri" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "Annulla filt&ro" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "Canestro &precedente" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "Ca&nestro successivo" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "C&hiudi canestro" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Espandi canestro" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Configura scorciatoie &globali..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "Canestri di &benvenuto" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Conversione delle note in testo semplice" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Conversione delle note di testo semplice in testo arricchito..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Bloccato" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Nessuna nota" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n nota\n" +"%n note" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n selezionata\n" +"%n selezionate" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "corrispondono tutte" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "nessun filtro" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n corrisponde\n" +"%n corrispondono" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Selezionato colore nel basket %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Le note di testo semplice sono state convertite in note arricchite." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Conversione terminata" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Non ci sono note di testo semplice da convertire." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Sembra che il file basketui.rc non esista o sia troppo vecchio.
    %1 " +"non può funzionare senza e si fermerà.

    Per favore, controlla la tua " +"installazione di %2.

    Se non hai i privilegi amministrativi per " +"installare l'applicazione a livello di sistema puoi copiare il file basketui.rc " +"dall'archivio di installazione nella cartella %4." +"

    Come ultima risorsa, se sei sicuro che l'applicazione è installata " +"correttamente ma se in precedenza hai installato ed usato una versione non " +"definitiva, prova a rimuovere il file %5basketui.rc

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Risorsa non trovata" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Impossibile aggiungere la nota." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Catturata zona di schermo nel canestro %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Cancella canestro" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Cancella solo quel canestro" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Cancella con tutti quelli contenuti" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Vuoi veramente rimuovere il canestro %1 ed il suo contenuto?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Rimuovi canestro" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Rimuovi canestro" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" +"%1 contiene i seguenti canestri.
    Vuoi rimuovere anche questi?" + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Rimuovi sottocanestri" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "&Rimuovi sottocanestri" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Archivi basket" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Il contenuto degli appunti è stato incollato nel canestro %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Il contenuto della selezione è stato incollato nel canestro %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Nessuna nota è stata aggiunta." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Il canestro %1 è bloccato" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(bloccato)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Assegna nuova etichetta..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Rimuovi tutte" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 è andato in crash! Siamo terribilmente spiacenti.\n" +"\n" +"Ma nulla è perduto! Puoi potenzialmente aiutarci a riparare il difetto. Le " +"informazioni che descrivono il crash sono riportate di seguito, ti basta " +"premere per inviarla o, se hai tempo, scrivi una breve descrizione di come è " +"avvenuto il crash.\n" +"\n" +"Grazie mille." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Le seguenti informazioni servono ad aiutare gli sviluppatori a identificare " +"il problema, non modificarle." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 è andato in crash! Siamo terribilmente spiacenti.\n" +"\n" +"Ma nulla è perduto! Forse è già disponibile un aggiornamento che risolve il " +"problema. Controlla tra i pacchetti aggiornati disponibili per la tua " +"distribuzione." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Finestra di debug" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Esporta canestro in HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Nome del file HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "Nome del &file:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Includi fil&e locali collegati" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Inc&ludi cartelle locali collegate" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Cancella i file già &presenti nella cartella selezionata" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "I&mpagina per presentazione" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Azzera filtro" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtro: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "Etichett&a: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtra tutti i canestri" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(non etichettato)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(etichettato)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Controllo ortografico automatico" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Controlla l'ortografia..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Consenti tabulazioni" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    L'operazione di mirror su cartelle non è più possibile (si veda basket.kde.org per maggiori informazioni)." +"

    La cartella %1 è stata copiata per essere utilizzata dal " +"canestro. Puoi cancellarla, oppure cancellare il canestro, o utilizzarle " +"entrambe. In ogni caso ricorda che la modifica di una non influenzerà più " +"l'altra perché si tratta di entità separate.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Importa mirror di cartella" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "Documenti HTML" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Esporta in HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Esportazione in HTML in corso. Attendere prego..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_file" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "icone" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "immagini" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "canestri" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "dati" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"Creato con %1, uno strumento KDE per prendere note e tenere sottomano una " +"grande quantità di dati." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(predefinito)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Altro..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Elenco delle chiavi private" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Indirizzo di posta elettronica" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Scegli una chiave segreta:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Lista chiavi troncata in modo inaspettato." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "La chiave pubblica non è adatta alla cifratura" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Algoritmo non supportato" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Password errata." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Seleziona l'icona" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Sfoglia..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Tutte le icone)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Recenti)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Azioni" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Applicazioni" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Dispositivi" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Filesystem" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Tipi di file" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|File icone (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Manda un commento agli sviluppatori su qualcosa che ti piace" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Manda un commento agli sviluppatori su qualcosa che non ti piace " + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" +"Manda un commento agli sviluppatori su un comportamento non corretto del " +"programma" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" +"Manda un commento agli sviluppatori su una nuova funzionalità che vorresti " +"nel programma" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "Invia un commento agli &sviluppatori" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Benvenuto nella versione di test di %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Benvenuto in %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Per aiutarci a migliorarlo, i tuoi commenti sono importanti." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Ogni volta che sperimenti qualcosa di positivo o frustrante, fai clic sulla " +"faccina appropriata sotto la barra del titolo della finestra, descrivi in " +"sintesi quello che ti piace o non ti piace e fai clic su Invia." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Ogni volta che sperimenti qualcosa di positivo, fai clic sulla faccina " +"sorridente sotto la barra del titolo della finestra, descrivi in sintesi " +"quello che ti piace e fai clic su Invia." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Ogni volta che sperimenti qualcosa di frustrante, fai clic sulla faccina " +"scontenta sotto la barra del titolo della finestra, descrivi in sintesi " +"quello che non ti piace e fai clic su Invia." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Segui lo stesso procedimento per segnalare velocemente un bug: semplicemente " +"fai clic sull'icona che rappresenta un'oggetto rotto nell'angolo in alto a " +"destra della finestra, descrivilo e fai clic su Invia." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Ogni volta che trovi un bug nel programma, fai clic sull'icona che " +"rappresenta un'oggetto rotto sotto la barra del titolo della finestra, " +"descrivi il comportamento errato e fai clic su Invia." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Esempio:\n" +"Esempi:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Mi piace la nuova grafica. Molto piacevole." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Non mi piace la pagina di benvenuto di quell'assistente. Fa perdere " +"troppo tempo." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"L'applicazione si comporta in modo errato quando si fa clic sul " +"pulsante Aggiungi. Non accade nulla." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Desidero una nuova funzionalità che mi consenta di spedire il mio " +"lavoro via posta elettronica." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Aiuta a migliorare il programma" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Indirizzo di posta elettronica" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Per favore inserisci il tuo indirizzo di posta elettronica." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Sarà utilizzato solo per ricontattarti se dovessero essere necessarie " +"ulteriori informazioni sul tuo commento, per chiederti di riprodurre i bug " +"che hai segnalato, per inviarti correzioni da provare, ecc." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"L'indirizzo di posta elettronica è opzionale. Se non ne fornisci alcuno, i " +"tuoi commenti verranno spediti in modo anonimo." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Invia un commento agli sviluppatori" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Invia un commento agli sviluppatori su:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Qualcosa che ti &piace" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Qualcosa che &non ti piace" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Un &comportamento non corretto del programma" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Una nuova &funzionalità che vorresti nel programma" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Mostra i &pulsanti di commento sotto le barre del titolo della finestra" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Invia commento" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "Indirizzo di posta &elettronica..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Per favore inserisci una breve descrizione." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Per favore, scrivi in inglese." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Potresti usare uno strumento di traduzione online." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Per rendere i commenti che invii più utili al fine di migliorare questo " +"programma, cerca di inviare lo stesso quantitativo di commenti positivi e " +"negativi." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" +"Non chiedere di nuove funzionalità: le tue richieste verranno " +"ignorate." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Si è verificato un errore durante la spedizione della segnalazione.

    Riprova più tardi.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Errore di trasferimento" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Il commento è stato inviato con successo. Ci aiuterà a migliorare il " +"programma.

    Grazie per il tempo che hai speso.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Commento inviato" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "Cors&ivo" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Grassetto" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Sempre" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Mai" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Al passaggio del mouse" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Quando il mouse è fuori" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Sottolineato:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Colo&re:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Colore al passaggio del &mouse:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Dimensione &icona:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Nessuno" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Dimensione dell'icona" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Due volte la dimensione dell'icona" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Tre volte la dimensione dell'icona" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "Ante&prima:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Hai disabilitato l'anteprima ma vedi ancora le immagini?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    È normale perché ci sono vari tipi di note.
    Questa impostazione si " +"applica solamente alle note di tipo file e collegamento locale.
    E le " +"immagini che vedi sono note di tipo immagine, non note di tipo file.
    La " +"note di tipo file sono documenti generici mentre le note di tipo immagine " +"sono figure su cui puoi disegnare.

    Quando trascini dei file sui " +"canestri, %1 ne identifica il tipo e ti mostra il loro contenuto.
    Ad " +"esempio quando trascini un'immagine o un file di testo saranno create una " +"nota di tipo immagine o una nota di tipo testo rispettivamente.
    I tipi di " +"file che %2 non comprende sono mostrati come note generiche semplicemente " +"con un'icona o l'anteprima, e il nome del file.

    Se non vuoi che " +"l'applicazione crei delle note che dipendono dal contenuto dei file che " +"trascini, vai nella pagina \"Generale\" e marca \"Immagine o animazione\" " +"nel gruppo \"Visualizza il contenuto dei file aggiunti per i seguenti tipi\"." +"

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Esempio" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimizza" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Basket" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Vuoi veramente uscire da %1?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Nota che non devi necessariamente chiudere il programma prima della " +"chiusura della sessione KDE. Se chiudi la sessione mentre il programma è " +"ancora in esecuzione, questo sarà caricato nuovamente quando accederai al " +"sistema.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Conferma chiusura" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Nuovo canestro" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Colore di sfondo" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "Gestisci &modelli..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Una colonna" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Due colonne" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Tre colonne" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Senza vincoli" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "Mo&dello:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Canestri)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "C&rea in:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "In che modo è utile?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Creare canestri all'interno di altri canestri a formare una gerarchia ti " +"consente di essere più organizzato, ad esempio:

    • Raggruppando i " +"canestri per temi o argomenti;
    • Raggruppando i canestri in cartelle " +"per progetti differenti;
    • Creando sezioni con sottocanestri che " +"rappresentano capitoli o pagine;
    • Creando gruppi di canestri da " +"esportare insieme (ad esempio per inviarli ad altre persone).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Senza vincoli" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mappa mentale" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Immagine)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Testo semplice" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Testo" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Immagine" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animazione" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Suono" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Collegamento" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Esecutore" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Colore" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Sconosciuto" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Modifica testo semplice" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Modifica testo" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Modifica immagine" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Modifica animazione" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Cambia il file audio" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Modifica il nome del file" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Modifica collegamento" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Modifica esecutore" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Modifica colore" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Modifica oggetto sconosciuto" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Apertura di testo semplice..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Apertura di testo semplice..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Apertura di testi semplici con..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Apertura di testi semplici con..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Apri testo semplice con:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Apri testi semplici con:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Apertura testo..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Apertura testi..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Apertura testo con..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Apertura testi con..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Apri testo con:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Apri testi con:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Dimensione" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 per %2 pixel" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Apertura immagine..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Apertura immagini..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Apertura immagine con..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Apertura immagini con..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Apri immagine con:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Apri immagini con:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Fai clic per visualizzare a dimensione intera" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Apertura animazione..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Apertura animazioni..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Apertura animazione con..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Apertura animazioni con..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Apri animazione con:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Apri animazioni con:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Tipo" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Apri file" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Apertura file..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Apertura file..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Apertura file con..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Apertura file con..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Apri file con:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Apri file con:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Apri suono" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Apertura suono..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Apertura suoni..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Apertura suono con..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Apertura suoni con..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Apri suono con:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Apri suoni con:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Destinazione" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Apri collegamento" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Al collegamento non è associata alcuna URL." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Apertura collegamento..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Apertura collegamenti..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Apertura collegamento con..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Apertura collegamenti con..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Apri collegamento con:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Apri collegamenti con:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (esegui in un terminale)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Commento" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Comando" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Esegui questa applicazione" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Nessun comando associato all'esecutore." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Esecuzione applicazione..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Esecuzione applicazioni..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Rosso: %1, verde: %2, blu: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Tinta: %1, saturazione: %2, valore: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Nome del colore (CSS)" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Nome del colore (CSS esteso)" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "È un colore web" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Le immagini non possono essere modificate al momento (la prossima versione " +"di Blocco appunti BasKet includerà un editor di immagini).\n" +"Vuoi aprirla con un programma in grado di modificarla?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Modifica nota di tipo immagine" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"L'animazione non può essere modificata da questo programma.\n" +"Vuoi aprirla con un programma in grado di modificarla?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Modifica nota di tipo animazione" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Modifica nota di tipo colore" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Il tipo di questa nota è sconosciuto, e pertanto essa non può essere " +"modificata qui.\n" +"Puoi comunque trascinarla in un'applicazione in grado di gestirne il tipo." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Modifica nota di tipo sconosciuto" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Modifica nota di tipo collegamento" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Icona:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Destinazione:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Titolo:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Modifica nota di tipo esecuzione" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Scegli il comando da eseguire:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Deduci" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Coman&do:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Nome:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Grassetto" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Sottolineato" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Allineato a sinistra" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Centrato" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Allineato a destra" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Giustificato" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 non supporta i dati che hai trascinato.
    Ha comunque creato una nota " +"generica, in questo modo puoi trascinarla o copiarla in un'applicazione " +"capace di gestirla.

    Se vuoi che questo tipo di dati sia supportato " +"contatta gli sviluppatori o visita il database del trascinamento di BasKet.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Tipo/i MIME non supportato/i" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Sposta qui\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Copia qui\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "Co&llega qui\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Annulla\tEsc" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importa icona come immagine" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Scegli la dimensione dell'icona da importare come immagine:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Carica il contenuto del file in una nota" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Proteggi con password" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Nessuna chiave privata selezionata." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Canestro" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Esporta" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importa" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Vai" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Nota" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "E&tichette" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Barra degli strumenti di formattazione del testo" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<ro:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Nessuna protezione" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Proteggi il canestro con &password" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Proteggi il canestro con c&hiave privata:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+H" + +#: settings.cpp:367 +msgid "On left" +msgstr "A sinistra" + +#: settings.cpp:368 +msgid "On right" +msgstr "A destra" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "Posizione dell'al&bero dei canestri:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "In alto" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "In basso" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Posizione della barra dei &filtri:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Usa i fumetti per informare dei risultati delle azioni globali" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Cosa sono le azioni globali?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Puoi configurare le scorciatoie globali per compiere alcune azioni senza " +"dover mostrare la finestra principale. Per esempio, puoi incollare il " +"contenuto degli appunti, estrarre un colore da un punto dello schermo, ecc. " +"Puoi anche utilizzare la rotellina del mouse sull'icona nel vassoio di " +"sistema per cambiare il canestro corrente. O utilizzare il pulsante centrale " +"del mouse su quell'icona per incollare la selezione corrente." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"In questo caso, %1 mostrerà un piccolo fumetto per informarti che l'azione è " +"stata completata correttamente. Puoi disabilitare il fumetto." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Nota che quei messaggi sono sufficientemente furbi da non comparire se la " +"finestra principale è visibile. Questo perché hai già potuto vedere il " +"risultato delle tue azioni nella finestra principale." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Icona nel vassoio di sistema" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Aggiungi nel vassoio di sistema" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Mo&stra l'icona del canestro corrente come icona nel vassoio di sistema" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "&Nascondi la finestra principale quando il mouse rimane fuori da essa per" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " decimi di secondo" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"&Mostra la finestra principale quando il mouse resta sopra il vassoio di " +"sistema per" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Ani&ma i cambiamenti nei canestri" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Mo&stra suggerimenti per i canestri" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "Note &grandi" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Comportamento" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "&Trasforma le righe che cominciano per * o - in liste negli editor di testo" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Chiedi conferma &prima di eliminare le note" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "&Esporta etichette come testo" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Quando questo si applica?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Si applica quando copi e incolli, o trascini delle note in un editor di " +"testo." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Se abilitata, questa proprietà ti consente di incollare gli equivalenti " +"testuali delle etichette." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Ad esempio, una serie di note con le etichette Da fare e Fatto " +"sarà esportata come una serie di righe precedute da [ ] o [x] " +"che rappresentano rispettivamente una casella vuota ed una marcata." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "Ra&ggruppa una nuova nota facendo clic a destra della riga di inserimento" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Come raggruppare una nuova nota?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Quando questa opzione è abilitata la riga di inserimento ti consente non " +"solo di inserire note in corrispondenza della posizione del cursore, ma " +"anche di raggruppare una nuova nota con quella sotto il cursore:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Posiziona il mouse tra le note, dove ne vuoi aggiungere una nuova.
    Fa " +"clic a sinistra del segnaposto centrale nella riga di inserimento " +"per inserire una nota.
    Fai clic a destra per " +"raggruppare una nota con la nota sottostante o sovrastante in " +"base alla posizione del mouse.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Non fare nulla" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Incolla dagli appunti" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Inserisci nota di esecuzione" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Inserisci colore dallo schermo" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Carica nota da file" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importa esecutore dal menu KDE" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importa icona" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+pulsante centrale del mouse ovunque:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "alla posizione del cursore" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "Blocca a&utomaticamente i canestri protetti se chiusi da" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minuti" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Usa GnuPG Agent per i canestri protetti con chiave &privata/pubblica" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Posizione delle nuove note:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Alla nota corrente" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Dime&nsione nuove immagini:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&per" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixel" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Visualizza..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Visualizza il contenuto dei file aggiunti per i seguenti tipi" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "Testo sem&plice" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "Pagina &HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Immagine o animazione" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Suono" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Audio della conferenza" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Resoconto annuale" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Cartella home" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Esegui %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Suoni" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&File" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Collegamenti &locali" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "Collegame&nti di rete" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "Esec&utori" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Apri note di &testo con un'applicazione personalizzata:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Apri note di testo con:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Apri note di tipo &immagine con un'applicazione personalizzata:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Apri note di tipo immagine con:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Apri note di tipo a&nimazione con un'applicazione personalizzata:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Apri note di tipo animazione con:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Apri note di tipo &suono con un'applicazione personalizzata:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Apri note di tipo suono con:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Se marcata, l'applicazione impostata di seguito verrà utilizzata per aprire " +"quel tipo di nota.

    Altrimenti verrà utilizzata l'applicazione che hai " +"configurato in Konqueror.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Definisci l'applicazione da utilizzare per aprire quel tipo di nota al " +"posto dell'applicazione configurata in Konqueror.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Come modificare l'applicazione usata per aprire collegamenti Web?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Aprendo dei collegamenti Web, questi verranno aperti con differenti " +"applicazioni in base al contenuto del collegamento (una pagina Web, " +"un'immagine, un documento PDF...) come se fossero dei file presenti sul tuo " +"computer.

    Qui viene illustrato come fare se non vuoi che ogni " +"indirizzo Web sia aperto nel tuo browser. È utile se non stai utilizzando " +"KDE (se utilizzi ad esempio GNOME, XFCE...).

    • Apri il Centro di " +"Controllo di KDE (se non è disponibile, prova a digitare \"kcontrol\" in un " +"terminale);
    • Vai nella sezione \"Componenti di KDE\" e poi in " +"\"Scelta componenti\";
    • Scegli \"Navigazione Web\", marca \"nel " +"seguente browser:\" ed inserisci il nome del tuo browser (come \"firefox\" o " +"\"epiphany\").

    Adesso, quando fai clic su un qualsiasi " +"collegamento che inizia per \"http://...\", questo verrà aperto nel tuo " +"browser (ad esempio Mozilla Firefox o Epiphany o ...).http://...

    Per " +"una configurazione più accurata (come aprire solo le pagine Web nel " +"browser), leggere il secondo collegamento di aiuto.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Come modificare le applicazioni usate per aprire file e collegamenti?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Di seguito le istruzioni per impostare l'applicazione da utilizzare per " +"ogni tipo di file. Si applica anche ai collegamenti web se scegli di non " +"aprirli sistematicamente in un browser web (vedi il primo collegamento di " +"aiuto). Le impostazioni predefinite normalmente sono sufficienti, ma questo " +"consiglio è utile se usi GNOME, XFCE o un altro ambiente diverso da KDE.

    Questo è un esempio di come aprire pagine HTML nel browser web (e " +"continuare ad utilizzare le altre applicazioni per altri indirizzi o file). " +"Ripeti questi passi per ogni tipo di file che vuoi associare ad una " +"particolare applicazione.

    • Apri il Centro di controllo di KDE (se " +"non è disponibile prova a scrivere \"kcontrol\" in un terminale);
    • Vai nella sezione \"Componenti di KDE\" e quindi \"Associazioni file" +"\";
    • Nell'albero espandi la voce \"text\" e fai clic su \"html\";
    • Nella lista delle applicazioni aggiungi il tuo browser web come prima " +"voce;
    • Ripeti il procedimento per il tipo \"application -> xhtml+xml" +"\".
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importa gerarchia" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Come importare le note?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "Mantieni la ge&rarchia originale (tutte le note in canestri separati)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Note di &primo livello in un canestro separato" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "T&utte le note nello stesso canestro" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importa file di testo" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Formato del file di testo" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Note separat&e da una riga vuota" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Una ¬a per riga" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "La note iniziano con un &trattino (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Le note iniziano con un a&sterisco (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Usa un'altro separatore:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "Tutto in una not&a" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Da KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Da KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Da Note adesive" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Da Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Da %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Impossibile importare il file specificato. Potrebbe essere rovinato o non " +"essere un file TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Formato del file errato" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Una nota è cifrata. Il processo di importazione non supporta ancora le note " +"cifrate. Disattiva la cifratura con TuxCards e reimporta il file." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Le note cifrate non sono ancora supportate" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Nota cifrata.
    Il processo di importazione non " +"supporta ancora le note cifrate. Disattiva la cifratura con TuxCards e " +"reimporta il file.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Chiudendo la finestra principale %1 resterà aperto nel vassoio di " +"sistema. Usa Esci dal menu Canestro per chiudere " +"l'applicazione.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Aggiungi al vassoio di sistema" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Incolla selezione nel canestro %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimizza" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Ripristina" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (bloccato)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Da fare" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Non controllato" + +#: tag.cpp:544 +msgid "Done" +msgstr "Fatto" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Progresso" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Priorità" + +#: tag.cpp:599 +msgid "Low" +msgstr "Bassa" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Media" + +#: tag.cpp:600 +msgid "High" +msgstr "Alta" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Preferenza" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Cattiva" + +#: tag.cpp:601 +msgid "Good" +msgstr "Buona" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Eccellente" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Evidenzia" + +#: tag.cpp:667 +msgid "Important" +msgstr "Importante" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Molto importante" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Idea" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Titolo" + +#: tag.cpp:669 +msgid "Code" +msgstr "Codice" + +#: tag.cpp:669 +msgid "Work" +msgstr "Lavoro" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "L." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Personale" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Divertente" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Personalizza le etichette" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "N&uova etichetta" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Nuovo st&ato" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Sposta in alto (Ctrl+Shift+Freccia su)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Sposta in basso (Ctrl+Shift+Freccia giù)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Etichetta" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Rimuovi" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "Sc&orciatoia:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "Ered&itato dalla nuove note di pari livello" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Stato" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "No&me:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "Rimuo&vi" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "Sim&bolo:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "S&fondo:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Sbarrato" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Testo:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "Co&lore:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "Ca&rattere:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "Dimen&sione:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "E&quivalente testuale:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Se riempita, questa proprietà ti consente di incollare questa etichetta o " +"stato come il suo equivalente testuale." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "Su o&gni riga" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Cosa significa?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Quando una nota è costituita da differenti righe puoi scegliere di esportare " +"l'etichetta o lo stato solo sulla prima riga o su ogni riga della nota." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"Nell'esempio riportato precedente l'etichetta della nota superiore è esportata " +"solo nella prima riga, mentre l'etichetta della nota inferiore è esportata " +"su ogni riga della nota." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Cancellando l'etichetta ne verranno rimosse tutte le occorrenze dalle note a " +"cui è stata assegnata." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Conferma cancellazione dell'etichetta" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Cancella etichetta" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Cancellando lo stato verranno rimosse tutte le relative etichette da ogni " +"nota a cui tale stato è associato." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Conferma cancellazione dello stato" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Cancella stato" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 per 16 pixel" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 per 22 pixel" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 per 32 pixel" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 per 48 pixel" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 per 64 pixel" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 per 128 pixel" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Ridimensiona la finestra per selezionare la dimensione dell'immagine\n" +"e chiudila o premi Esc per rendere definitivi i cambiamenti." + diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..9467c11 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,3440 @@ +# translation of basket.pot to Japanese +# Yukiko Bando , 2006, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: basket-ja\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-04-25 23:00+0900\n" +"Last-Translator: Yukiko Bando \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Yukiko Bando" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "ybando@k6.dion.ne.jp" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    ã‚ãªãŸã®ã‚¢ã‚¤ãƒ‡ã‚¢ã®ãŠä¸–話をã—ã¾ã™ã€‚

    æ€ã„ã¤ã„ãŸã‚¢ã‚¤ãƒ‡ã‚¢ã‚’ã™ãã«ãƒ¡ãƒ¢ã—" +"ã¦ã€å¾Œã§ç°¡å˜ã«è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚メモã®æ•´ç†ãŒä»Šã¾ã§ã«ãªã楽ã«ãªã‚Šã¾ã™ã€‚" +"

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "BasKet メモパッド" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "作者ã€ãƒ¡ãƒ³ãƒ†ãƒŠ" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã®æš—å·åŒ–ã€Kontact ã¸ã®çµ±åˆã€KnowIt ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"ãƒã‚¹ã‚±ãƒƒãƒˆã®è‡ªå‹•ãƒ­ãƒƒã‚¯ã€çŠ¶æ…‹ä¿å­˜ã‚¢ã‚¤ã‚³ãƒ³ã€HTML コピー/貼り付ã‘ã€ãƒã‚¹ã‚±ãƒƒãƒˆå" +"ã®ãƒ„ールãƒãƒƒãƒ—ã€ãƒã‚¹ã‚±ãƒƒãƒˆåã«ãƒ‰ãƒ­ãƒƒãƒ—" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "アイコン" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨ã—ã¦ä¿å­˜" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨ã—ã¦ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ã‚¨ãƒ©ãƒ¼" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯å£Šã‚Œã¦ã„ã¾ã™ã€‚é–‹ã‘ã¾ã›ã‚“。" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" +"ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ€è¿‘ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® %1ã§ä½œæˆã•ã‚Œã¦ã„ã¾ã™ã€‚ファイルを開ãã“ã¨ã¯ã§" +"ãã¾ã™ãŒã€ã™ã¹ã¦ã®æƒ…報を見るã“ã¨ã¯ã§ãã¾ã›ã‚“。例ãˆã°ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã®ã¿" +"利用å¯èƒ½ãªã‚¿ã‚¤ãƒ—ã§ã‚ã‚‹ãŸã‚ã«ã€ä¸€éƒ¨ã®ãƒ¡ãƒ¢ãŒæ¬ ã‘ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã“ã®ãƒ•ã‚¡" +"イルをä¿å­˜ã™ã‚‹ã¨ãã¯ã€å…ƒã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿æŒã™ã‚‹ãŸã‚ã«ã€åˆ¥ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«ä¿å­˜ã™ã‚‹ã‚ˆã†" +"ã«ã—ã¦ãã ã•ã„。" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" +"ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ€è¿‘ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® %1ã§ä½œæˆã•ã‚Œã¦ã„ã¾ã™ã€‚ファイルを開ããŸã‚ã«" +"ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¨å¾©å…ƒ" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "ä¿å­˜ãƒ•ã‚©ãƒ«ãƒ€" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "ã‚ãªãŸã®ãƒã‚¹ã‚±ãƒƒãƒˆã¯ç¾åœ¨ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ã«ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "ä»–ã®ãƒ•ã‚©ãƒ«ãƒ€ã«ç§»å‹•(&M)..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "ä»–ã®æ—¢å­˜ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’使ã†(&U)..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "何ã®ãŸã‚ã«ï¼Ÿ" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    %1ãŒãƒã‚¹ã‚±ãƒƒãƒˆã‚’ä¿å­˜ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªç›®çš„ã§å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾" +"ã™:

    • 手動ã§ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§ãるよã†ã«ã€ãƒ›ãƒ¼ãƒ ãƒ•ã‚©ãƒ«ãƒ€ã®ã‚" +"ã‹ã‚Šã‚„ã™ã„場所 (例ãˆã° ~/Notes ã‚„ ~/Baskets) ã«ä¿å­˜ã—ã¦ãŠã。
    • 二ã¤ã®" +"コンピュータã§å…±æœ‰ã§ãるよã†ã«ãƒã‚¹ã‚±ãƒƒãƒˆã‚’サーãƒä¸Šã«ä¿å­˜ã™ã‚‹ã€‚
      ã“ã®å ´åˆã€" +"共有フォルダをローカルファイルシステムã«ãƒžã‚¦ãƒ³ãƒˆã—ã€%2ãŒãã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆ" +"を使用ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¦ãã ã•ã„。
      注æ„: 二ã¤ã®ã‚³ãƒ³ãƒ”ュータã§åŒæ™‚ã« %3を実" +"è¡Œã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。二ã¤ã®ã‚¢ãƒ—リケーション間ã§åŒæœŸãŒå–ã‚Œãªããªã£ãŸå ´åˆã€ãƒ‡ãƒ¼" +"ã‚¿ãŒæ¶ˆå¤±ã™ã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚

    フォルダã®å†…容を手動ã§å¤‰æ›´ã—ãªã„ã§ã" +"ã ã•ã„ (ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¿å­˜ãƒ•ã‚©ãƒ«ãƒ€ã«ç›´æŽ¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã—ã¦ã‚‚ã€ãƒã‚¹ã‚±ãƒƒãƒˆã«ã¯è¿½" +"加ã•ã‚Œã¾ã›ã‚“)。

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(&B)..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元(&R)..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "å‰å›žã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—: ãªã—" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "å‰å›žã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’移動ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠž" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "フォルダ %1 ã¯ç©ºã§ã¯ã‚ã‚Šã¾ã›ã‚“。上書ãã—ã¾ã™ã‹ï¼Ÿ" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "フォルダを上書ãã—ã¾ã™ã‹ï¼Ÿ" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "上書ã(&O)" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ %1 ã«ç§»å‹•ã—ã¾ã—ãŸã€‚ã“ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ãŸã‚ã« %2ã‚’å†èµ·å‹•ã—" +"ã¾ã™ã€‚" + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ä¿å­˜ã™ã‚‹æ—¢å­˜ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠž" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" +"ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¿å­˜ãƒ•ã‚©ãƒ«ãƒ€ã‚’ %1 ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ãŸã‚" +"ã« %2ã‚’å†èµ·å‹•ã—ã¾ã™ã€‚" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Baskets_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Gzip ã«ã‚ˆã£ã¦åœ§ç¸®ã•ã‚ŒãŸ TAR アーカイブ" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "ファイル %1 ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚本当ã«ä¸Šæ›¸ãã—ã¾ã™ã‹ï¼Ÿ" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "ファイルを上書ãã—ã¾ã™ã‹ï¼Ÿ" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‚’é–‹ã" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "README.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "ã“ã‚Œã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— %1 ã®å¾©å…ƒã‚’開始ã™ã‚‹å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ã‚³ãƒ”ーã§ã™ã€‚" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" +"ã™ã¹ã¦ãŒæœŸå¾…ã©ãŠã‚Šã«å¾©å…ƒã•ã‚ŒãŸå ´åˆã€ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ã¯å‰Šé™¤ã—ã¦ã‹ã¾ã„ã¾ã›ã‚“。" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" +"復元中ã«ä½•ã‹å•é¡ŒãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’å†åˆ©ç”¨ã™ã‚‹ã“ã¨ã§ã€ä½•ã‚‚失ã‚ãš" +"ã«å¾©å…ƒå‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" +"メニューã‹ã‚‰ã€Œãƒã‚¹ã‚±ãƒƒãƒˆã€->「ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¨å¾©å…ƒ...ã€->「他ã®æ—¢å­˜ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’" +"使ã†ã€ã‚’é¸æŠžã—ã€ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’指定ã—ã¦ãã ã•ã„。" + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "%1 を復元ã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "復元中ã«ä½•ã‹å•é¡ŒãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€%1 ファイルをãŠèª­ã¿ãã ã•ã„。" + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’復元" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" +"ã“ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¯å£Šã‚Œã¦ã„ã‚‹ã‹ã€ãƒã‚¹ã‚±ãƒƒãƒˆã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§ã¯ã‚ã‚Šã¾ã›ã‚“。イン" +"ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。元ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ä¿æŒã—ã¾ã—ãŸã€‚" + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "復元エラー" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" +"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚’ %1 ã«å¾©å…ƒã—ã¾ã—ãŸã€‚変更をé©ç”¨ã™ã‚‹ãŸã‚ã« %2ã‚’å†èµ·å‹•ã—ã¾" +"ã™ã€‚" + +#: backup.cpp:338 +msgid "Restart" +msgstr "å†èµ·å‹•" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "復元å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆ" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "復元å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆ (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "æ–°ã—ã„メモã¯ãƒ•ã‚£ãƒ«ã‚¿ã«ãƒžãƒƒãƒã—ãªã„ã®ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "æ–°ã—ã„メモã®ã²ã¨ã¤ãŒãƒ•ã‚£ãƒ«ã‚¿ã«ãƒžãƒƒãƒã—ãªã„ã®ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "æ–°ã—ã„メモã®ã„ãã¤ã‹ãŒãƒ•ã‚£ãƒ«ã‚¿ã«ãƒžãƒƒãƒã—ãªã„ã®ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "æ–°ã—ã„メモã¯ãƒ•ã‚£ãƒ«ã‚¿ã«ãƒžãƒƒãƒã—ãªã„ã®ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "グループ化" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "挿入" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«ãƒ‰ãƒ­ãƒƒãƒ—ã—ã¾ã—ãŸ" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯å‡ºã¦ã¯ãªã‚‰ãªã„ã‚‚ã®ã§ã™ã€‚出ãŸã¨ã—ãŸã‚‰ã€ã“ã®ãƒ—ログラムã¯ãƒã‚®ãƒ¼" +"ã§ã™! 開発者ã«ãƒã‚°ã‚’報告ã—ã¦ãã ã•ã„。" + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"ã“ã“ã«ãƒ¡ãƒ¢ã‚’挿入\n" +"å³ã‚¯ãƒªãƒƒã‚¯ã§ã‚ªãƒ—ションを表示" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "列ã®ã‚µã‚¤ã‚ºã‚’変更" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚µã‚¤ã‚ºã‚’変更" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "ã“ã®ãƒ¡ãƒ¢ã®ã‚µã‚¤ã‚ºã‚’変更" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "ã“ã®ãƒ¡ãƒ¢ã‚’é¸æŠžã¾ãŸã¯ç§»å‹•" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã¾ãŸã¯ç§»å‹•" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "ã“ã®ãƒ¡ãƒ¢ã«ã‚¿ã‚°ã‚’追加ã¾ãŸã¯å‰Šé™¤" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "ã‚¿ã‚°: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1ã€%2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を展開" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ãŸãŸã‚€" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"メモを下ã®ã‚‚ã®ã¨ã‚°ãƒ«ãƒ¼ãƒ—化\n" +"å³ã‚¯ãƒªãƒƒã‚¯ã§ã‚ªãƒ—ションを表示" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"メモを上ã®ã‚‚ã®ã¨ã‚°ãƒ«ãƒ¼ãƒ—化\n" +"å³ã‚¯ãƒªãƒƒã‚¯ã§ã‚ªãƒ—ションを表示" + +#: basket.cpp:2818 +msgid "Added" +msgstr "追加" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "最終更新" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "å˜ãªã‚‹æŒ¿å…¥ã§ã¯ãªãグループ化ã™ã‚‹ã«ã¯å³å´ã‚’クリック" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "グループ化ã›ãšã«æŒ¿å…¥ã™ã‚‹ã«ã¯å·¦å´ã‚’クリック" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "ロック解除(&U)" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã¯ãƒ‘スワードã§ä¿è­·ã•ã‚Œã¦ã„ã¾ã™ã€‚" + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "アクセスã™ã‚‹ã«ã¯ã€Œãƒ­ãƒƒã‚¯è§£é™¤ã€ã‚’押ã—ã¦ãã ã•ã„。" + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "æš—å·åŒ–ã¯ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® %1 ã§ã¯
    サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。" + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"ãƒã‚¹ã‚±ãƒƒãƒˆãŒãƒ­ãƒƒã‚¯ã•ã‚Œãªã„よã†ã«ã™ã‚‹ã«ã¯ã€è¨­å®šãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®
    「ãƒã‚¹ã‚±ãƒƒãƒˆã€" +"ã®ãƒšãƒ¼ã‚¸ã§è‡ªå‹•ãƒ­ãƒƒã‚¯ã®æ™‚間を変更ã—ã¦ãã ã•ã„。" + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "読ã¿è¾¼ã¿ä¸­..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "カスタマイズ(&C)..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "ã“ã®ã‚¿ã‚°ã§ãƒ•ã‚£ãƒ«ã‚¿(&F)" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "ã“ã®çŠ¶æ…‹ã§ãƒ•ã‚£ãƒ«ã‚¿(&S)" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "ã‚¿ã‚°" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "本当ã«ã“れら %n 個ã®ãƒ¡ãƒ¢ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "メモを削除" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "メモをクリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚" + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "メモをクリップボードã«åˆ‡ã‚Šå–ã‚Šã¾ã—ãŸã€‚" + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "メモをé¸æŠžã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚" + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "ã“ã®ãƒ¡ãƒ¢ã‚’é–‹ã‘ã¾ã›ã‚“。" + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã権é™ãŒã‚ã‚Šã¾ã›ã‚“。" + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "ファイルã«ä¿å­˜" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "以下ã®ç§˜å¯†éµã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã®ãƒ‘スワードを設定ã—ã¦ãã ã•ã„:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ãŒè¶³ã‚Šã¾ã›ã‚“" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "ä¸æ­£ãªãƒã‚¹ã‚±ãƒƒãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã®è¨±å¯å±žæ€§" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"アプリケーションãŒå®‰å…¨ã«ã‚ãªãŸã®å¤‰æ›´ã‚’ä¿å­˜ã§ãるよã†ã«ã€ãƒ‡ã‚£ã‚¹ã‚¯ %1 上" +"ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¦ãã ã•ã„。" + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"ファイル %1 ã®è¨±å¯å±žæ€§ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨è¦ªãƒ•ã‚©ãƒ«ãƒ€ã«å¯¾" +"ã—ã¦æ›¸ãè¾¼ã¿æ¨©é™ãŒã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。" + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "ä¿å­˜ã‚¨ãƒ©ãƒ¼" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "" +"ã”ã‚ã‚“ãªã•ã„ã€ã“ã®æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã®ãŸã‚ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã®ä½œæˆã«å¤±æ•—" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "" +"ã”ã‚ã‚“ãªã•ã„ã€ã“ã®æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã®ãŸã‚ã«ãƒ†ãƒ³ãƒ—レートをコピーã§ãã¾ã›ã‚“ã§ã—" +"ãŸã€‚" + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" +"ã”ã‚ã‚“ãªã•ã„ã€ã“ã®æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã®ãŸã‚ã«ãƒ†ãƒ³ãƒ—レートをカスタマイズã§ãã¾ã›" +"ã‚“ã§ã—ãŸã€‚" + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã®ãƒ—ロパティ" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "åå‰" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "背景画åƒ(&I):" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "背景色(&B):" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "文字色(&T):" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(ãªã—)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "é…ç½®" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "列(&U):" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "自由(&F)" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "マインドマップ(&M)" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "キーボードショートカット(&K)" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "使用上ã®ãƒ’ント..." + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    ショートカットを早ã覚ãˆã‚‹æ–¹æ³•
    最åˆã®ã‚ªãƒ—ションをé¸æŠžã—ã¦ãƒã‚¹" +"ケット㫠[Alt+アルファベット] ã¨ã„ã†ãµã†ã«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’割り当ã¦ã‚‹ã¨ã€ãƒã‚¹" +"ケットツリーã§ãã®æ–‡å­—ã«ä¸‹ç·šãŒä»˜ãã¾ã™ã€‚
    例ãˆã°ã€ã€ŒTipsã€ã¨ã„ã†åå‰ã®ãƒã‚¹" +"ケット㫠[Alt+T] を割り当ã¦ã‚‹ã¨ã€ãã®ãƒã‚¹ã‚±ãƒƒãƒˆã¯ãƒ„リーã«ã€ŒTipsã€ã¨è¡¨" +"示ã•ã‚Œã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’視覚化ã™ã‚‹ã“ã¨ã§ã€æ—©ãショートカットを" +"覚ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

    ローカル vs グローãƒãƒ«
    最åˆã®ã‚ªãƒ—ショ" +"ンã¯ã€ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹ã¨ãã«ã®ã¿ãƒã‚¹ã‚±ãƒƒãƒˆã‚’表示ã—ã¾" +"ã™ã€‚ã“ã‚Œã«å¯¾ã—ã¦ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ã€ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒè¡¨ç¤ºã•ã‚Œã¦ã„" +"ãªã„ã¨ãã«ã‚‚有効ã§ã€ã©ã“ã‹ã‚‰ã§ã‚‚使ãˆã¾ã™ã€‚

    表示 vs 切り替ãˆ
    " +"最後ã®ã‚ªãƒ—ションã¯ã€ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã‹ãšã«ãƒã‚¹ã‚±ãƒƒãƒˆã‚’アクティブã«ã—ã¾" +"ã™ã€‚ã“ã‚Œã¯ã€åŒã˜ãメインウィンドウを開ã‹ãšã«ã‚¯ãƒªãƒƒãƒ—ボードã®å†…容やé¸æŠžã‚’ç¾åœ¨" +"ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«è²¼ã‚Šä»˜ã‘るグローãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’使ã†ã¨ãã«å½¹ç«‹ã¡ã¾ã™ã€‚

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’表示(&H)" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’表示(&G) (グローãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«åˆ‡ã‚Šæ›¿ãˆ(&W) (グローãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "未ä¿å­˜ã®å¤‰æ›´ãŒã‚ã‚Œã°è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Ctrl+ドロップ: コピー, Shift+ドロップ: 移動, Shift+Ctrl+ドロップ: リンク" + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "" +"

    ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
    ロックを解除ã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã" +"ã ã•ã„。

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "" +"

    ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã¯ãƒ­ãƒƒã‚¯è§£é™¤ã•ã‚Œã¦ã„ã¾ã™ã€‚
    ロックã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã " +"ã•ã„。

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "General" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "メインウィンドウを表示/éš ã™" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"メインウィンドウãŒéžè¡¨ç¤ºã«ãªã£ã¦ã„ã‚‹å ´åˆã¯è¡¨ç¤ºã—ã€è¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹å ´åˆã¯éš ã—ã¾" +"ã™ã€‚" + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "クリップボードã®å†…容をç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«è²¼ã‚Šä»˜ã‘" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ã‚¯ãƒªãƒƒãƒ—ボードã®å†…容を貼り付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆåを表示" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆãŒã‚ã‹ã‚Šã¾ã™ã€‚" + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "é¸æŠžã‚’ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«è²¼ã‚Šä»˜ã‘" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ã‚¯ãƒªãƒƒãƒ—ボードã®é¸æŠžã‚’貼り付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆ" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"メインウィンドウを開ã‹ãšã«æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã—ã¦ã€" +"ä»–ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’使ã£ã¦ã€ãã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ãƒ¡ãƒ¢ã‚’追加ã—ãŸã‚Šã‚¯ãƒªãƒƒ" +"プボードã®å†…容やé¸æŠžã—ãŸã‚‚ã®ã‚’貼り付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆã¸ç§»å‹•" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "メインウィンドウを開ã‹ãšã«å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "次ã®ãƒã‚¹ã‚±ãƒƒãƒˆã¸ç§»å‹•" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "メインウィンドウを開ã‹ãšã«æ¬¡ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "テキストメモを挿入" + +#: bnpview.cpp:265 +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ¢ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ã" +"ã¾ã™ã€‚" + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "ç”»åƒãƒ¡ãƒ¢ã‚’挿入" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ç”»åƒãƒ¡ãƒ¢ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾" +"ã™ã€‚" + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "リンクメモを挿入" + +#: bnpview.cpp:273 +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ãƒªãƒ³ã‚¯ãƒ¡ãƒ¢ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾" +"ã™ã€‚" + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "色メモを挿入" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«è‰²ãƒ¡ãƒ¢ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "スクリーンã‹ã‚‰è‰²ã‚’採å–" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ä¸Šã® 1 ピクセルã‹ã‚‰æŽ¡å–" +"ã—ãŸè‰²ã‚’メモã¨ã—ã¦è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "スクリーンã®é ˜åŸŸã‚’å–り込む" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"メインウィンドウを開ã‹ãšã«ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã®é ˜åŸŸã‚’ç”»åƒã¨ã—ã¦å–ã‚Š" +"込むã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆ" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "英語ã¾ãŸã¯ãƒ•ãƒ©ãƒ³ã‚¹èªžã§ãŠé¡˜ã„ã—ã¾ã™ã€‚" + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    ãƒã‚¹ã‚±ãƒƒãƒˆãƒ„リー

    ã‚ãªãŸã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ãƒªã‚¹ãƒˆã§ã™ã€‚別々ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«å…¥" +"れるã“ã¨ã«ã‚ˆã£ã¦ãƒ‡ãƒ¼ã‚¿ã‚’æ•´ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¸­ã«æ–°ã—ã„ãƒã‚¹" +"ケットを作æˆã™ã‚Œã°ã€ãƒã‚¹ã‚±ãƒƒãƒˆã‚’テーマã”ã¨ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒ" +"スケットを切り替ãˆã‚‹ã«ã¯ã€ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¸Šã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦é–‹ãã¾ã™ã€‚ãƒã‚¹ã‚±ãƒƒãƒˆã¯" +"「ドラッグ&ドロップã€ã‚’使ã£ã¦å†ç·¨æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–(&B)..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "ウィンドウを隠ã™(&H)" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "HTML ウェブページ(&H)..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "テキストファイル(&F)..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¨å¾©å…ƒ(&B)..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "削除(&E)" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã‚’é¸æŠž" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "ã™ã¹ã¦é¸æŠžè§£é™¤(&N)" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã®é¸æŠžã‚’解除" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "é¸æŠžå転(&I)" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "ç¾åœ¨ã®ãƒ¡ãƒ¢ã®é¸æŠžçŠ¶æ…‹ã‚’å転" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "編集(&E)..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "é–‹ã(&O)" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "アプリケーションã§é–‹ã(&W)..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "ファイルã«ä¿å­˜(&S)..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "グループ化(&G)" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "グループ解除(&N)" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "一番上ã«ç§»å‹•(&T)" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "上ã«ç§»å‹•(&U)" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "下ã«ç§»å‹•(&D)" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "一番下ã«ç§»å‹•(&B)" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "テキスト(&T)" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "リンク(&L)" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "ç”»åƒ(&I)" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "色(&C)" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "ランãƒãƒ£ãƒ¼(&A)" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "KDE メニューã‹ã‚‰ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã‚’インãƒãƒ¼ãƒˆ(&K)..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "アイコンをインãƒãƒ¼ãƒˆ(&P)..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "ファイルã‹ã‚‰èª­ã¿è¾¼ã‚€(&F)..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "スクリーンã‹ã‚‰è‰²ã‚’採å–(&O)" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "スクリーンã®é ˜åŸŸã‚’å–り込む(&Z)" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆ(&N)..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "æ–°ã—ã„å­ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆ(&S)..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "æ–°ã—ã„兄弟ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆ(&B)..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "æ–°è¦(&N)" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "削除(&R)" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "パスワードä¿è­·(&W)..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "ロック(&L)" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "フィルタ(&F)" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "ã™ã¹ã¦ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’フィルタ(&B)" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "フィルタをリセット(&R)" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "å‰ã®ãƒã‚¹ã‚±ãƒƒãƒˆ(&P)" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "次ã®ãƒã‚¹ã‚±ãƒƒãƒˆ(&N)" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ãŸãŸã‚€(&F)" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’展開(&E)" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "グローãƒãƒ«ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’設定(&G)..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "BasKet ã¸ã‚ˆã†ã“ã(&W)" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "プレーンテキストメモã®å¤‰æ›" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "プレーンテキストã®ãƒ¡ãƒ¢ã‚’リッãƒãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ¢ã«å¤‰æ›..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "ロック中" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "メモã¯ã‚ã‚Šã¾ã›ã‚“" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "%n 件ã®ãƒ¡ãƒ¢" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "%n 件é¸æŠž" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "ã™ã¹ã¦ãƒžãƒƒãƒ" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "フィルタãªã—" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "%n 件マッãƒ" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1ã€%2ã€%3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«è‰²ã‚’採å–ã—ã¾ã—ãŸ" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "プレーンテキストã®ãƒ¡ãƒ¢ã‚’リッãƒãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›ã—ã¾ã—ãŸã€‚" + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "変æ›å®Œäº†" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "変æ›ã™ã‚‹ãƒ—レーンテキストメモãŒã‚ã‚Šã¾ã›ã‚“。" + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    ファイル basketui.rc ãŒå­˜åœ¨ã—ãªã„ã‹ã€å¤ã™ãŽã‚‹ã‚ˆã†ã§ã™ã€‚
    %1 ã¯ãã‚ŒãŒãªã„" +"ã¨å®Ÿè¡Œã§ããªã„ã®ã§ä¸­æ­¢ã—ã¾ã™ã€‚

    %2 ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’確èªã—ã¦ãã ã•ã„。

    システム全体ã«ã‚¢ãƒ—リケーションをインストールã™ã‚‹ç®¡ç†è€…権é™ãŒãªã„å ´åˆã¯ã€" +"ファイル basketui.rc をインストールã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‹ã‚‰ãƒ•ã‚©ãƒ«ãƒ€ %4 ã«ã‚³ãƒ”ーã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

    アプリケーションã¯æ­£ã—ãインス" +"トールã•ã‚Œã¦ã„ã‚‹ã‘ã‚Œã©ã‚‚ã€ä»¥å‰ã«ãƒ—レビューãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã—ã¦ã„ãŸå ´" +"åˆã¯ã€æœ€å¾Œã®æ‰‹æ®µã¨ã—ã¦ã€ãƒ•ã‚¡ã‚¤ãƒ« %5basketui.rc を削除ã—ã¦ã¿ã¦ãã ã•ã„。

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "メモを追加ã§ãã¾ã›ã‚“。" + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "スクリーンã®é ˜åŸŸã‚’ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«å–ã‚Šè¾¼ã¿ã¾ã—ãŸ" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’削除" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "ã“ã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ã¿å‰Šé™¤" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "メモã¨ãã®å­ã‚’削除" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "本当ã«ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã¨ãã®å†…容を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’削除" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’削除(&R)" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" +"「%1ã€ã«ã¯ä»¥ä¸‹ã®å­ãƒã‚¹ã‚±ãƒƒãƒˆãŒã‚ã‚Šã¾ã™ã€‚
    ãれらもåŒæ™‚ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ" +"
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "å­ãƒã‚¹ã‚±ãƒƒãƒˆã‚’削除" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "å­ãƒã‚¹ã‚±ãƒƒãƒˆã‚’削除(&R)" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚¢ãƒ¼ã‚«ã‚¤ãƒ–" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "クリップボードã®å†…容をãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«è²¼ã‚Šä»˜ã‘ã¾ã—ãŸ" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "é¸æŠžã‚’ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«è²¼ã‚Šä»˜ã‘ã¾ã—ãŸ" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "追加ã•ã‚ŒãŸãƒ¡ãƒ¢ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(ロック中)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "æ–°ã—ã„タグを付ã‘ã‚‹(&A)..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "ã™ã¹ã¦å‰Šé™¤(&R)" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 ã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚本当ã«ç”³ã—訳ã‚ã‚Šã¾ã›ã‚“。\n" +"\n" +"ã—ã‹ã—解決策ãŒå…¨ããªã„訳ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" +"ã‚ãªãŸã¯æˆ‘々ãŒã“ã®ãƒã‚°ã‚’修正ã™ã‚‹ã®ã‚’手助ã‘ã§ãã¾ã™ã€‚\n" +"下ã«ã“ã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’説明ã™ã‚‹æƒ…å ±ãŒã‚ã‚Šã¾ã™ã€‚\n" +"é€ä¿¡ã‚’クリックã™ã‚‹ã ã‘ã§ã‚‚構ã„ã¾ã›ã‚“ã—ã€æ™‚é–“ãŒã‚ã‚‹ãªã‚‰ã€\n" +"ã©ã®ã‚ˆã†ã«ã—ã¦ã“ã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãŒèµ·ã“ã£ãŸã®ã‹ç°¡æ½”ãªèª¬æ˜Žã‚’書ã„ã¦é ‚ã‘ã‚Œã°å¹¸ã„ã§" +"ã™ã€‚" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"下ã®æƒ…å ±ã¯é–‹ç™ºè€…ãŒå•é¡Œã‚’çªãæ­¢ã‚ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚変更ã•ã‚Œãªã„よã†ã«ãŠé¡˜ã„ã—" +"ã¾ã™ã€‚" + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 ã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚本当ã«ç”³ã—訳ã‚ã‚Šã¾ã›ã‚“。\n" +"\n" +"ã—ã‹ã—解決策ãŒå…¨ããªã„訳ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" +"アップグレードã™ã‚‹ã“ã¨ã§å•é¡ŒãŒè§£æ±ºã™ã‚‹ã“ã¨ã‚‚ã‚ã‚Šã¾ã™ã€‚\n" +"ãŠä½¿ã„ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒªãƒã‚¸ãƒˆãƒªã‚’確èªã—ã¦ã¿ã¦ãã ã•" +"ã„。" + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "デãƒãƒƒã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’ HTML ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "HTML ページã®ãƒ•ã‚¡ã‚¤ãƒ«å" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "ファイルå(&F):" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "リンクã•ã‚ŒãŸãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’埋ã‚込む(&E)" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "リンクã•ã‚ŒãŸãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ã‚©ãƒ«ãƒ€ã‚’埋ã‚込む(&L)" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "è¡Œã先フォルダã®ä»¥å‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’消去ã™ã‚‹(&P)" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "å°åˆ·ç”¨ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ(&M)" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "フィルタをリセット" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "フィルタ(&F): " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "ã‚¿ã‚°(&A): " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "ã™ã¹ã¦ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’フィルタ" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(ã‚¿ã‚°ãªã—)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(ã‚¿ã‚°ã‚ã‚Š)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "自動スペルãƒã‚§ã‚¯" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "スペルãƒã‚§ãƒƒã‚¯..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "タブを許å¯" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    フォルダã®åŒæœŸã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã‚‚ã†ã§ãã¾ã›ã‚“ (詳細ã«ã¤ã„ã¦ã¯ basket.kde.org ã‚’ã”覧ãã ã•ã„)。

    ãƒã‚¹ã‚±ãƒƒãƒˆãŒå¿…è¦" +"ã¨ã™ã‚‹ãŸã‚ã€ãƒ•ã‚©ãƒ«ãƒ€ %1 ã‚’ãƒã‚¹ã‚±ãƒƒãƒˆã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚フォルダã¾ãŸã¯ãƒ" +"スケットを削除ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯ä¸¡æ–¹ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ãµãŸã¤ã¯åˆ¥" +"ã®å®Ÿä½“ã«ãªã£ãŸã®ã§ã€ä¸€æ–¹ã‚’変更ã—ã¦ã‚‚ã€ã‚‚ã†ä¸€æ–¹ã¯åŒæ™‚ã«å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "フォルダã®åŒæœŸã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML ドキュメント" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "HTML ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "HTML ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_files" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "icons" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "images" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "baskets" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "data" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "%1 ã§ä½œæˆ (メモをã¨ã£ã¦æƒ…報を手元ã«ç½®ã„ã¦ãŠããŸã‚ã® KDE ツール)" + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(デフォルト)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "ãã®ä»–..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "秘密éµã®ãƒªã‚¹ãƒˆ" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Eメール" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "秘密éµã‚’é¸æŠž:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "éµã®ãƒªã‚¹ãƒˆã¯å®Œå…¨ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "ãã®å…¬é–‹éµã¯æš—å·åŒ–用ã§ã¯ã‚ã‚Šã¾ã›ã‚“" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„アルゴリズム" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "ä¸æ­£ãªãƒ‘スワード。" + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "アイコンをé¸æŠž" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "ブラウズ(&B)..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(ã™ã¹ã¦ã®ã‚¢ã‚¤ã‚³ãƒ³)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(最近)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "アクション" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "アプリケーション" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "デãƒã‚¤ã‚¹" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "ファイルシステム" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "ファイルタイプ" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|アイコンファイル (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "æ°—ã«å…¥ã£ãŸç‚¹ã«ã¤ã„ã¦é–‹ç™ºè€…ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "æ°—ã«å…¥ã‚‰ãªã„点ã«ã¤ã„ã¦é–‹ç™ºè€…ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "アプリケーションã®èª¤ã£ãŸæŒ™å‹•ã«ã¤ã„ã¦é–‹ç™ºè€…ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "希望ã™ã‚‹æ–°ã—ã„機能ã«ã¤ã„ã¦é–‹ç™ºè€…ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "開発者ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹(&S)" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "%1ã®ãƒ†ã‚¹ãƒˆãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¸ã‚ˆã†ã“ã。" + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "%1ã¸ã‚ˆã†ã“ã。" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "ã‚ãªãŸã®ã‚³ãƒ¡ãƒ³ãƒˆã¯ã‚¢ãƒ—リケーションã®æ”¹è‰¯ã«å½¹ç«‹ã¡ã¾ã™ã€‚" + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"素晴らã—ã„ã¨æ€ã£ãŸã¨ãã‚„ã€é€†ã«ã„らã„らã—ãŸã¨ãã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ã®" +"下ã«ã‚る感情を表ã™é¡”ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã€æ°—ã«å…¥ã£ãŸç‚¹ã¾ãŸã¯æ°—ã«å…¥ã‚‰ãªã„点" +"ã‚’ç°¡å˜ã«æ›¸ã„ã¦é€ä¿¡ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"素晴らã—ã„ã¨æ€ã£ãŸã¨ãã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ã®ä¸‹ã«ã‚る笑顔ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’" +"クリックã—ã€æ°—ã«å…¥ã£ãŸç‚¹ã‚’ç°¡å˜ã«æ›¸ã„ã¦é€ä¿¡ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"ã„らã„らã—ãŸã¨ãã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ã®ä¸‹ã«ã‚ã‚‹ã—ã‹ã‚é¢ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’ク" +"リックã—ã€æ°—ã«å…¥ã‚‰ãªã„点を簡å˜ã«æ›¸ã„ã¦é€ä¿¡ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"ãƒã‚°ã‚’報告ã—ã¦é ‚ãå ´åˆã‚‚åŒæ§˜ã§ã™ã€‚ウィンドウã®å³ä¸Šã«ã‚る壊れãŸã‚ªãƒ–ジェクトã®" +"アイコンをクリックã—ã€ãƒã‚°ã®å†…容を書ã„ã¦é€ä¿¡ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"アプリケーションã«ãƒã‚°ã‚’発見ã—ãŸã¨ãã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ã®ä¸‹ã«ã‚る壊" +"ã‚ŒãŸã‚ªãƒ–ジェクトã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã€èª¤ã£ãŸæŒ™å‹•ã®èª¬æ˜Žã‚’ç°¡å˜ã«æ›¸ã„ã¦é€ä¿¡ãƒœ" +"タンを押ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "例:" + +# DO NOT TRANSLATE: This is an example of how to write reports. +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "I like the new artwork. Very refreshing." + +# DO NOT TRANSLATE: This is an example of how to write reports. +#: likeback.cpp:469 +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"I dislike the welcome page of that assistant. Too time consuming." + +# DO NOT TRANSLATE: This is an example of how to write reports. +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." + +# DO NOT TRANSLATE: This is an example of how to write reports. +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "I desire a new feature allowing me to send my work by email." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "アプリケーションã®æ”¹è‰¯ã«å”力" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "メールアドレス" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"ã“ã‚Œã¯ã€ã‚ãªãŸã®ã‚³ãƒ¡ãƒ³ãƒˆã«ã¤ã„ã¦ã•ã‚‰ã«æƒ…å ±ãŒå¿…è¦ãªã¨ãã‚„ã€å ±å‘Šã•ã‚ŒãŸãƒã‚°ã®å†" +"ç¾æ–¹æ³•ã‚’å°‹ã­ãŸã‚Šã€ãƒã‚°ã®ä¿®æ­£ã‚’é€ã£ã¦ãƒ†ã‚¹ãƒˆã—ã¦é ‚ãã¨ã„ã£ãŸå ´åˆã«ã®ã¿ä½¿ç”¨ã—ã¾" +"ã™ã€‚" + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"メールアドレスã¯å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。入力ãŒãªã‘ã‚Œã°ã‚³ãƒ¡ãƒ³ãƒˆã¯åŒ¿åã§é€ä¿¡ã•ã‚Œã¾" +"ã™ã€‚" + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "開発者ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ã‚‹" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "アプリケーションã®é–‹ç™ºè€…ã«é€ã‚‹ã‚³ãƒ¡ãƒ³ãƒˆã®å†…容:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "æ°—ã«å…¥ã£ãŸç‚¹(&L)" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "æ°—ã«å…¥ã‚‰ãªã„点(&D)" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "アプリケーションã®èª¤ã£ãŸæŒ™å‹•(&B)" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "希望ã™ã‚‹æ–°ã—ã„機能(&F)" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "ウィンドウã®ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ã®ä¸‹ã«ã‚³ãƒ¡ãƒ³ãƒˆãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹(&W)" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "コメントをé€ä¿¡(&S)" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "メールアドレス(&E)..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "%1ã«é–¢ã™ã‚‹ã‚ãªãŸã®æ„見を簡å˜ã«æ›¸ã„ã¦ãã ã•ã„。" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "英語ã§ãŠé¡˜ã„ã—ã¾ã™ã€‚" + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "オンライン翻訳ツールãŒåˆ©ç”¨ã§ãã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"ã‚ãªãŸã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’ã“ã®ã‚¢ãƒ—リケーションã®æ”¹è‰¯ã«ã‚ˆã‚Šå½¹ç«‹ãŸã›ã‚‹ãŸã‚ã«ã€è‚¯å®šçš„ãª" +"æ„見ã¨å¦å®šçš„ãªæ„見をåŒã˜ãらã„é€ã£ã¦ãã ã•ã„。" + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "æ–°ã—ã„機能ã¯è¦æ±‚ã—ãªã„ã§ãã ã•ã„: ã‚ãªãŸã®è¦æœ›ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚" + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    報告ã®é€ä¿¡ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚

    後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。" + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "転é€ã‚¨ãƒ©ãƒ¼" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    ã‚ãªãŸã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚アプリケーションã®æ”¹è‰¯ã«å½¹ç«‹ã¡ã¾ã™ã€‚

    ã”å”力ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã—ãŸã€‚

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "コメントをé€ä¿¡ã—ã¾ã—ãŸ" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "イタリック(&T)" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "ボールド(&B)" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "常ã«" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "ãªã—" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "マウスãŒä¸Šã«ã‚ã‚‹ã¨ã" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "マウスãŒé›¢ã‚Œã¦ã„ã‚‹ã¨ã" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "下線(&U):" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "色(&R):" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "マウスãŒä¸Šã«ã‚ã‚‹ã¨ãã®è‰²(&M):" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "アイコンサイズ(&I):" + +#: linklabel.cpp:600 +msgid "None" +msgstr "ãªã—" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "アイコンサイズ" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "アイコンサイズã®äºŒå€" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "アイコンサイズã®ä¸‰å€" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "プレビュー(&P):" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "プレビューを無効ã«ã—ãŸã®ã«ç”»åƒãŒè¡¨ç¤ºã•ã‚Œã¾ã™..." + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    メモã«ã¯ã„ãã¤ã‹ã®ç¨®é¡žãŒã‚ã‚‹ã®ã§ã€ç•°å¸¸ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®è¨­å®šã¯ãƒ•ã‚¡ã‚¤ãƒ«ã¨" +"ローカルリンクã®ãƒ¡ãƒ¢ã«ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚ç”»åƒãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãã‚Œã¯ç”»åƒ" +"メモã§ãƒ•ã‚¡ã‚¤ãƒ«ãƒ¡ãƒ¢ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ファイルメモãŒä¸€èˆ¬çš„ãªãƒ¡ãƒ¢ã§ã‚ã‚‹ã®ã«å¯¾ã—" +"ã¦ã€ç”»åƒãƒ¡ãƒ¢ã¯ãã®ä¸­ã«æç”»ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ç”»åƒã§ã™ã€‚

    ファイルをãƒã‚¹ã‚±ãƒƒ" +"トã«ãƒ‰ãƒ­ãƒƒãƒ—ã™ã‚‹ã¨ã€%1ã¯ãã®ã‚¿ã‚¤ãƒ—を検出ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を表示ã—ã¾ã™ã€‚例ãˆ" +"ã°ã€ç”»åƒã‚’ドロップã™ã‚‹ã¨ç”»åƒãƒ¡ãƒ¢ã‚’ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’ドロップã™ã‚‹ã¨ãƒ†ã‚­ã‚¹ãƒˆ" +"メモを作æˆã—ã¾ã™ã€‚%2ãŒèªè­˜ã§ããªã„ファイルタイプã«ã¤ã„ã¦ã¯ã€ä¸€èˆ¬çš„ãªãƒ•ã‚¡ã‚¤ãƒ«" +"メモã¨ã—ã¦ã€ã‚¢ã‚¤ã‚³ãƒ³ã®ã¿ã€ã¾ãŸã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ—レビューã¨ãƒ•ã‚¡ã‚¤ãƒ«åを表示ã—ã¾" +"ã™ã€‚

    ドロップã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¿ã‚¤ãƒ—ã«å¿œã˜ãŸãƒ¡ãƒ¢ã‚’作æˆã•ã›ãŸããªã„å ´åˆã¯ã€" +"「新ã—ã„メモã€ã®ãƒšãƒ¼ã‚¸ã‚’é–‹ã„ã¦ã€ã€Œä»¥ä¸‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¿½åŠ ã•ã‚ŒãŸã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容" +"を表示ã™ã‚‹ã€ã§ã€Œç”»åƒã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã€ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãã ã•ã„。

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "例" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "最å°åŒ–" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆ" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    本当㫠%1を終了ã—ã¾ã™ã‹ï¼Ÿ

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    KDE ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’終了ã™ã‚‹å‰ã«ã‚¢ãƒ—リケーションを終了ã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。" +"セッション終了時ã«å®Ÿè¡Œã•ã‚Œã¦ã„ãŸã‚¢ãƒ—リケーションã¯æ¬¡å›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«å†ã³èµ·å‹•ã•" +"ã‚Œã¾ã™ã€‚

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "終了ã®ç¢ºèª" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "æ–°ã—ã„ãƒã‚¹ã‚±ãƒƒãƒˆ" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "背景色" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "テンプレートã®ç®¡ç†(&M)..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "一列" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "二列" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "三列" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "自由" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "テンプレート(&T):" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(ãƒã‚¹ã‚±ãƒƒãƒˆ)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "次ã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¸­ã«ä½œæˆ(&R):" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "ã“ã‚Œã¯ä½•ã®ãŸã‚?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    ä»–ã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ä¸­ã«ãƒã‚¹ã‚±ãƒƒãƒˆã‚’作æˆã—ã¦éšŽå±¤æ§‹é€ ã«ã™ã‚‹ã¨ã€ä¾‹ãˆã°ä»¥ä¸‹ã®ã‚ˆã†" +"ã«ãƒ‡ãƒ¼ã‚¿ã‚’より系統的ã«ç®¡ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:

    • ãƒã‚¹ã‚±ãƒƒãƒˆã‚’テーマã¾" +"ãŸã¯ãƒˆãƒ”ック別ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã™ã‚‹ã€‚
    • ãƒã‚¹ã‚±ãƒƒãƒˆã‚’プロジェクト別ã®ãƒ•ã‚©ãƒ«ãƒ€" +"ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã™ã‚‹ã€‚
    • 章やページをå­ãƒã‚¹ã‚±ãƒƒãƒˆã¨ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™" +"る。
    • ä»–ã®äººã«ãƒ¡ãƒ¼ãƒ«ã§é€ã‚‹å ´åˆãªã©ã«ã€ãƒã‚¹ã‚±ãƒƒãƒˆã‚’グループ化ã—ã¦ä¸€åº¦ã«" +"エクスãƒãƒ¼ãƒˆã™ã‚‹ã€‚
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "自由" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "マインドマップ" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(ç”»åƒ)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "プレーンテキスト" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "テキスト" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "ç”»åƒ" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "アニメーション" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "サウンド" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "リンク" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "ランãƒãƒ£ãƒ¼" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "色" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "ä¸æ˜Ž" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "ã“ã®ãƒ—レーンテキストを編集" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’編集" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "ã“ã®ç”»åƒã‚’編集" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’編集" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "ã“ã®ã‚µã‚¦ãƒ³ãƒ‰ã®ãƒ•ã‚¡ã‚¤ãƒ«åを編集" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®åå‰ã‚’編集" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "ã“ã®ãƒªãƒ³ã‚¯ã‚’編集" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "ã“ã®ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã‚’編集" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "ã“ã®è‰²ã‚’編集" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "ã“ã®ä¸æ˜Žãªã‚ªãƒ–ジェクトを編集" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "プレーンテキストを開ãã¾ã™..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "プレーンテキストを開ãã¾ã™..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "プレーンテキストをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "プレーンテキストをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "プレーンテキストを以下ã§é–‹ã:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "プレーンテキストを以下ã§é–‹ã:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "テキストを開ãã¾ã™..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "テキストを開ãã¾ã™..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "テキストをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "テキストをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "テキストを以下ã§é–‹ã:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "テキストを以下ã§é–‹ã:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "サイズ" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 x %2 ピクセル" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "ç”»åƒã‚’é–‹ãã¾ã™..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "ç”»åƒã‚’é–‹ãã¾ã™..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "ç”»åƒã‚’アプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "ç”»åƒã‚’アプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "ç”»åƒã‚’以下ã§é–‹ã:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "ç”»åƒã‚’以下ã§é–‹ã:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "クリックã—ã¦å®Ÿéš›ã®ã‚µã‚¤ã‚ºã§è¡¨ç¤º" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "アニメーションを開ãã¾ã™..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "アニメーションを開ãã¾ã™..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "アニメーションをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "アニメーションをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "アニメーションを以下ã§é–‹ã:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "アニメーションを以下ã§é–‹ã:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "タイプ" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "ファイルを開ãã¾ã™..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "ファイルを開ãã¾ã™..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "ファイルをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "ファイルをアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "ファイルを以下ã§é–‹ã:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "ファイルを以下ã§é–‹ã:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "ã“ã®ã‚µã‚¦ãƒ³ãƒ‰ã‚’å†ç”Ÿ" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "サウンドをå†ç”Ÿã—ã¾ã™..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "サウンドをå†ç”Ÿã—ã¾ã™..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "サウンドをアプリケーションã§å†ç”Ÿã—ã¾ã™..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "サウンドをアプリケーションã§å†ç”Ÿã—ã¾ã™..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "サウンドを以下ã§å†ç”Ÿ:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "サウンドを以下ã§å†ç”Ÿ:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "リンク先" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "ã“ã®ãƒªãƒ³ã‚¯ã‚’é–‹ã" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "ã“ã®ãƒªãƒ³ã‚¯ã«ã¯é–‹ã URL ãŒã‚ã‚Šã¾ã›ã‚“。" + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "リンク先を開ãã¾ã™..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "リンク先を開ãã¾ã™..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "リンク先をアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "リンク先をアプリケーションã§é–‹ãã¾ã™..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "リンク先を以下ã§é–‹ã:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "リンク先を以下ã§é–‹ã:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (端末ã§å®Ÿè¡Œ)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "コメント" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "コマンド" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "ã“ã®ã‚¢ãƒ—リケーションを起動" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "ã“ã®ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã«ã¯å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“。" + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "アプリケーションを起動..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "アプリケーションを起動..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "赤 (%1) ç·‘ (%2) é’ (%3) " + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "色相 (%1) 彩度 (%2) 明度 (%3) " + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS 色å" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "CSS 拡張色å" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "ウェブ色" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"今ã®ã¨ã“ã‚ç”»åƒã‚’ã“ã“ã§ç·¨é›†ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。\n" +"Basket ノートパッドã®æ¬¡ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ç”»åƒã‚¨ãƒ‡ã‚£ã‚¿ãŒå«ã¾ã‚Œã¾ã™ã€‚\n" +"編集ã§ãã‚‹ä»–ã®ã‚¢ãƒ—リケーションã§é–‹ãã¾ã™ã‹ï¼Ÿ" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "ç”»åƒãƒ¡ãƒ¢ã‚’編集" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"アニメーション画åƒã‚’ã“ã“ã§ç·¨é›†ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。\n" +"編集ã§ãã‚‹ä»–ã®ã‚¢ãƒ—リケーションã§é–‹ãã¾ã™ã‹ï¼Ÿ" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "アニメーションメモを編集" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "色メモを編集" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"ã“ã®ãƒ¡ãƒ¢ã¯ã‚¿ã‚¤ãƒ—ãŒä¸æ˜ŽãªãŸã‚ã€ã“ã“ã§ç·¨é›†ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ãŒã€\n" +"メモをèªè­˜ã™ã‚‹ä»–ã®ã‚¢ãƒ—リケーションã«ãƒ‰ãƒ©ãƒƒã‚°ã¾ãŸã¯ã‚³ãƒ”ーã§ãã¾ã™ã€‚" + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "ä¸æ˜Žãªãƒ¡ãƒ¢ã‚’編集" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "リンクメモを編集" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "自動" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "アイコン(&I):" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "リンク先(&R):" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "タイトル(&T):" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "ランãƒãƒ£ãƒ¼ãƒ¡ãƒ¢ã‚’編集" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "実行ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã‚’é¸æŠž:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "推測(&G)" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "コマンド(&D):" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "åå‰(&N):" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "ボールド" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "下線" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "å·¦æƒãˆ" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "中央æƒãˆ" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "å³æƒãˆ" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "å·¦å³ä¸¡ç«¯æƒãˆ" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1ã¯ã‚ãªãŸãŒãƒ‰ãƒ­ãƒƒãƒ—ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。
    ã—ã‹ã—ãªãŒã‚‰ã€ä¸€" +"般的ãªãƒ¡ãƒ¢ãŒä½œæˆã•ã‚Œã¦ã„ã‚‹ã®ã§ã€ãれをèªè­˜ã™ã‚‹ã‚¢ãƒ—リケーションã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦" +"コピーã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã€‚

    ã“れらã®ãƒ‡ãƒ¼ã‚¿ã®ã‚µãƒãƒ¼ãƒˆã‚’希望ã•ã‚Œã‚‹å ´åˆã¯ã€" +"開発者ã«é€£çµ¡ã™ã‚‹ã‹ BasKet Drop " +"Database ã‚’ã”覧ãã ã•ã„。

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„MIMEタイプ" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "ã“ã“ã«ç§»å‹•(&M)\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "ã“ã“ã«ã‚³ãƒ”ー(&C)\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "ã“ã“ã«ãƒªãƒ³ã‚¯(&L)\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "キャンセル(&A)\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "アイコンを画åƒã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "ç”»åƒã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã‚¢ã‚¤ã‚³ãƒ³ã®ã‚µã‚¤ã‚ºã‚’é¸æŠž:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "ファイルã®å†…容をメモã«èª­ã¿è¾¼ã‚€" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "パスワードä¿è­·" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "秘密éµãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆ(&B)" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "エクスãƒãƒ¼ãƒˆ(&E)" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "インãƒãƒ¼ãƒˆ(&I)" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "移動(&G)" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "メモ(&N)" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "ã‚¿ã‚°(&T)" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "書å¼ãƒ„ールãƒãƒ¼" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "フィルタ(&L):" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "ä¿è­·ã—ãªã„(&N)" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’パスワードã§ä¿è­·ã™ã‚‹(&P)" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆã‚’秘密éµã§ä¿è­·ã™ã‚‹(&K):" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "å·¦" + +#: settings.cpp:368 +msgid "On right" +msgstr "å³" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆãƒ„リーã®ä½ç½®(&B):" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "上" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "下" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "フィルタãƒãƒ¼ã®ä½ç½®(&F):" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "グローãƒãƒ«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®çµæžœã‚’ãƒãƒ«ãƒ¼ãƒ³ã‚’使ã£ã¦é€šçŸ¥ã™ã‚‹(&U)" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "グローãƒãƒ«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã£ã¦ä½•ï¼Ÿ" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"一部ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示ã•ã›ãšã«å®Ÿè¡Œã™ã‚‹ãŸã‚ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«" +"ショートカットを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚例ãˆã°ã€ã‚¯ãƒªãƒƒãƒ—ボードã®å†…容を貼り付" +"ã‘ãŸã‚Šã€ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã®ã‚る場所ã‹ã‚‰è‰²ã‚’採å–ã—ãŸã‚Šã§ãã¾ã™ã€‚システムトレイアイコ" +"ンã®ä¸Šã§ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’å‹•ã‹ã—ã¦ä»–ã®ãƒã‚¹ã‚±ãƒƒãƒˆã‚’アクティブã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾" +"ã™ã€‚ã¾ãŸã€ãã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’マウスã®ä¸­ãƒœã‚¿ãƒ³ã§ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ç¾åœ¨é¸æŠž" +"ã•ã‚Œã¦ã„ã‚‹ã‚‚ã®ã‚’ãã®ãƒã‚¹ã‚±ãƒƒãƒˆã«è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"グローãƒãƒ«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ã¨ã€%1ã¯ãã‚ŒãŒæ­£ã—ã実行ã•ã‚ŒãŸã“ã¨ã‚’知らã›ã‚‹ãŸ" +"ã‚ã«å°ã•ãªãƒãƒ«ãƒ¼ãƒ³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ãƒãƒƒãƒ—アップã—ã¾ã™ã€‚ã“ã®ãƒãƒ«ãƒ¼ãƒ³ã¯è¨­å®šã§ç„¡åŠ¹ã«" +"ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"ã“れらã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹ã¨ãã«ã¯å‡ºãªã„よã†ã«" +"ãªã£ã¦ã„ã¾ã™ã€‚ãªãœãªã‚‰ã€ã‚ãªãŸãŒå®Ÿè¡Œã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®çµæžœãŒæ—¢ã«ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰" +"ウã«è¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚" + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "システムトレイアイコン" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "システムトレイã«ãƒ‰ãƒƒã‚­ãƒ³ã‚°(&D)" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "ç¾åœ¨ã®ãƒã‚¹ã‚±ãƒƒãƒˆã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’システムトレイã«è¡¨ç¤ºã™ã‚‹(&S)" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "マウスãŒé›¢ã‚ŒãŸå¾Œã€æ¬¡ã®æ™‚é–“ãŒçµŒéŽã—ãŸã‚‰ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’éš ã™(&H)" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "/10 秒" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "マウスãŒæ¬¡ã®æ™‚間アイコンã®ä¸Šã«ã‚ã£ãŸã‚‰ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示ã™ã‚‹(&M)" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆå†…ã®å¤‰æ›´ã‚’アニメーション表示ã™ã‚‹(&M)" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "ãƒã‚¹ã‚±ãƒƒãƒˆå†…ã§ãƒ„ールãƒãƒƒãƒ—を表示ã™ã‚‹(&S)" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "大ããªãƒ¡ãƒ¢(&B)" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "挙動" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "* ã¾ãŸã¯ - ã§å§‹ã¾ã‚‹è¡Œã‚’テキストエディタã§ãƒªã‚¹ãƒˆã«å¤‰æ›ã™ã‚‹(&T)" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "メモを削除ã™ã‚‹å‰ã«ç¢ºèªã™ã‚‹(&D)" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "タグをテキストã¨ã—ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹(&E)" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "ã“ã‚ŒãŒé©ç”¨ã•ã‚Œã‚‹ã®ã¯..." + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"ã“ã‚Œã¯ãƒ¡ãƒ¢ã‚’テキストエディタã«ã€Œã‚³ãƒ”ー&ペーストã€ã¾ãŸã¯ã€Œãƒ‰ãƒ©ãƒƒã‚°&ドロップã€" +"ã—ãŸã¨ãã«é©ç”¨ã•ã‚Œã¾ã™ã€‚" + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚¿ã‚°ã‚’テキストã«ç½®ãæ›ãˆã¦è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ãŒã§ã" +"ã¾ã™ã€‚" + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"例ãˆã°ã€ã€ŒTo Doã€ã¨ã€Œå®Œäº†ã€ã‚¿ã‚°ã®ä»˜ã„ãŸãƒ¡ãƒ¢ã‚’エクスãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€è¡Œã®å…ˆé ­ã« " +"[ ] ã¾ãŸã¯ [x] ãŒä»˜ãã¾ã™ã€‚ã“ã‚Œã¯ãã‚Œãžã‚Œã€ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãŒå…¥ã£" +"ã¦ã„ãªã„ボックスã¨å…¥ã£ã¦ã„るボックスを表ã—ã¾ã™ã€‚" + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "挿入ラインã®å³å´ã‚’クリックã—ãŸã¨ãã¯æ–°ã—ã„メモをグループ化ã™ã‚‹(&G)" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "æ–°ã—ã„メモをグループ化ã™ã‚‹ã«ã¯..." + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã«ãƒ¡ãƒ¢ã‚’挿入ã™ã‚‹ã ã‘ã§ãªãã€åŒæ™‚" +"ã«ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã«ã‚る既存ã®ãƒ¡ãƒ¢ã¨ã‚°ãƒ«ãƒ¼ãƒ—化ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    æ–°ã—ã„メモを挿入ã—ãŸã„ä½ç½® (メモã¨ãƒ¡ãƒ¢ã®é–“) ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’ç½®ãã¾ã™ã€‚
    メモ" +"を普通ã«ã€ŒæŒ¿å…¥ã€ã™ã‚‹ã¨ãã¯ã€æŒ¿å…¥ãƒ©ã‚¤ãƒ³ã®ä¸­å¤®ã®ç›®å°ã®ã€Œå·¦å´ã€ã‚’クリックã—ã¾" +"ã™ã€‚
    既存ã®ã‚‚ã®ã¨ã€Œã‚°ãƒ«ãƒ¼ãƒ—化ã€ã™ã‚‹ã¨ãã¯ã€ä¸­å¤®ã®ç›®å°ã®ã€Œå³å´ã€ã‚’クリック" +"ã—ã¾ã™ã€‚æ–°ã—ã„メモã¯ã€ãƒžã‚¦ã‚¹ã®ä½ç½®ã«ã‚ˆã£ã¦ã€ä¸Šã¾ãŸã¯ä¸‹ã®ãƒ¡ãƒ¢ã¨ã‚°ãƒ«ãƒ¼ãƒ—化ã•ã‚Œ" +"ã¾ã™ã€‚

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "何もã—ãªã„" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "クリップボードを貼り付ã‘" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "ランãƒãƒ£ãƒ¼ãƒ¡ãƒ¢ã‚’挿入" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "スクリーンã‹ã‚‰è‰²ã‚’挿入" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "ファイルã‹ã‚‰ãƒ¡ãƒ¢ã‚’読ã¿è¾¼ã‚€" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "KDE メニューã‹ã‚‰ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã‚’インãƒãƒ¼ãƒˆ" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "アイコンをインãƒãƒ¼ãƒˆ" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift キーを押ã—ãªãŒã‚‰ãƒã‚¹ã‚±ãƒƒãƒˆå†…を中クリック:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "(カーソルä½ç½®ã«)" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "ä¿è­·ã•ã‚ŒãŸãƒã‚¹ã‚±ãƒƒãƒˆãŒæ¬¡ã®æ™‚é–“é–‰ã˜ã‚‰ã‚Œã¦ã„ãŸã‚‰è‡ªå‹•çš„ã«ãƒ­ãƒƒã‚¯ã™ã‚‹(&U)" + +#: settings.cpp:603 +msgid " minutes" +msgstr " 分" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "秘密éµ/公開éµã§ä¿è­·ã•ã‚ŒãŸãƒã‚¹ã‚±ãƒƒãƒˆã« GnuPG エージェントを使ã†(&P)" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "æ–°ã—ã„メモã®å ´æ‰€(&P):" + +#: settings.cpp:693 +msgid "At current note" +msgstr "ç¾åœ¨ã®ãƒ¡ãƒ¢" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "æ–°ã—ã„ç”»åƒã‚µã‚¤ã‚º(&N):" + +#: settings.cpp:718 +msgid "&by" +msgstr "&x" + +#: settings.cpp:721 +msgid "pixels" +msgstr "ピクセル" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "視覚化(&V)..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "以下ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¿½åŠ ã•ã‚ŒãŸã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を表示ã™ã‚‹" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "プレーンテキスト(&P)" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "HTML ページ(&H)" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "ç”»åƒã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³(&I)" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "サウンド(&S)" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "会議ã®éŒ²éŸ³" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "年次報告" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "ホームフォルダ" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "%1ã‚’èµ·å‹•" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "サウンド(&S)" + +#: settings.cpp:800 +msgid "&Files" +msgstr "ファイル(&F)" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "ローカルリンク(&L)" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªãƒ³ã‚¯(&N)" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "ランãƒãƒ£ãƒ¼(&H)" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "テキストメモを開ãアプリケーションを指定ã™ã‚‹(&T):" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "テキストメモを開ãアプリケーション:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "ç”»åƒãƒ¡ãƒ¢ã‚’é–‹ãアプリケーションを指定ã™ã‚‹(&I):" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "ç”»åƒãƒ¡ãƒ¢ã‚’é–‹ãアプリケーション:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "アニメーションメモを開ãアプリケーションを指定ã™ã‚‹(&N):" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "アニメーションメモを開ãアプリケーション:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "サウンドメモを開ãアプリケーションを指定ã™ã‚‹(&U):" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "サウンドメモを開ãアプリケーション:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ä¸‹ã§æŒ‡å®šã•ã‚ŒãŸã‚¢ãƒ—リケーションã§ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒ¡ãƒ¢ã‚’é–‹" +"ãã¾ã™ã€‚

    ãƒã‚§ãƒƒã‚¯ã—ãªã‹ã£ãŸå ´åˆã¯ã€Konqueror ã§è¨­å®šã•ã‚Œã¦ã„るアプリケー" +"ションを使用ã—ã¾ã™ã€‚

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒ¡ãƒ¢ã‚’é–‹ãã¨ãã« Konquerur ã§è¨­å®šã•ã‚Œã¦ã„るアプリケーションã®" +"代ã‚ã‚Šã«ä½¿ç”¨ã™ã‚‹ã‚¢ãƒ—リケーションを指定ã—ã¾ã™ã€‚

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "ウェブリンクを開ãアプリケーションを変更ã™ã‚‹ã«ã¯..." + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    コンピュータ上ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨åŒæ§˜ã«ã€ã‚¦ã‚§ãƒ–リンクã¯ãã®å†…容 (ウェブページã€ç”»" +"åƒã€PDF ドキュメント...) ã«ã‚ˆã£ã¦ç•°ãªã‚‹ã‚¢ãƒ—リケーションã§é–‹ã‹ã‚Œã¾ã™ã€‚

    " +"ã™ã¹ã¦ã®ã‚¦ã‚§ãƒ–アドレスをã‚ãªãŸã®ãŠæ°—ã«å…¥ã‚Šã®ãƒ–ラウザã§é–‹ãよã†ã«ã—ãŸã„å ´åˆ" +"ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。ã“ã‚Œã¯ã€KDE 以外ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—環境 (GNOME, " +"XFCE...) を使用ã—ã¦ã„ã‚‹å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚

    • KDE コントロールセンター" +"ã‚’é–‹ãã¾ã™ã€‚メニューã«ãªã„å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ç«¯æœ«ã§ \"kcontrol\" ã¨å…¥åŠ›ã—" +"ã¦ã¿ã¦ãã ã•ã„。
    • 「KDE コンãƒãƒ¼ãƒãƒ³ãƒˆã€ã‹ã‚‰ã€Œã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®é¸æŠžã€ã‚’" +"é–‹ãã¾ã™ã€‚
    • 「ウェブブラウザã€ã‚’é¸æŠžã—ã€ã€Œä»¥ä¸‹ã®ãƒ–ラウザã§ã€ã‚’ãƒã‚§ãƒƒã‚¯" +"ã—ã¾ã™ã€‚ãã—ã¦ä½¿ç”¨ã™ã‚‹ãƒ–ラウザã®åå‰ (firefox, epiphany...) を入力ã—ã¦ãã ã•" +"ã„。

    ã“ã‚Œã§ã€\"http://...\" ã§å§‹ã¾ã‚‹ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ãŒå¸¸ã«ã‚ãªãŸã®" +"ãŠæ°—ã«å…¥ã‚Šã®ãƒ–ラウザ (Mozilla Firefox, Epiphany...) ã§é–‹ãよã†ã«ãªã‚Šã¾ã™ã€‚

    ウェブページã ã‘を指定ã—ãŸãƒ–ラウザã§é–‹ãよã†ã«ã™ã‚‹ã€ã¨ã„ã£ãŸã‚ˆã‚Šé«˜åº¦ãªè¨­" +"定ã«ã¤ã„ã¦ã¯ã€æ¬¡ã®ãƒªãƒ³ã‚¯ã®ãƒ˜ãƒ«ãƒ—ã‚’ãŠèª­ã¿ãã ã•ã„。

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "ファイルã¨ãƒªãƒ³ã‚¯ã‚’é–‹ãアプリケーションを変更ã™ã‚‹ã«ã¯..." + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    ファイルタイプ別ã«ä½¿ç”¨ã™ã‚‹ã‚¢ãƒ—リケーションを設定ã™ã‚‹æ–¹æ³•ã‚’ã”説明ã—ã¾ã™ã€‚ã“" +"ã‚Œã¯ã€ã™ã¹ã¦ã®ã‚¦ã‚§ãƒ–リンクを常ã«ã‚¦ã‚§ãƒ–ブラウザã§é–‹ãよã†ã«è¨­å®šã—ã¦ã„ãªã„å ´åˆ " +"(最åˆã®ãƒªãƒ³ã‚¯ã®ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§)ã€ã‚¦ã‚§ãƒ–リンクã«ã‚‚当ã¦ã¯ã¾ã‚Šã¾ã™ã€‚デフォルトã®è¨­" +"定ã§å•é¡Œãªã„ã¯ãšã§ã™ãŒã€GNOME ã‚„ XFCE ãã®ä»–ã® KDE 以外ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—環境を使" +"用ã—ã¦ã„ã‚‹å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚

    HTML ページã ã‘ã‚’ã‚ãªãŸã®ãŠæ°—ã«å…¥ã‚Šã®ã‚¦ã‚§" +"ブブラウザã§é–‹ãよã†ã«ã™ã‚‹ã«ã¯ (ä»–ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚„ファイルã¯åˆ¥ã®ã‚¢ãƒ—リケーション" +"ã§é–‹ãå ´åˆ)ã€ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。開ãアプリケーションを指定ã—ãŸã„ä»–ã®" +"ファイルタイプã«ã¤ã„ã¦ã‚‚ã€åŒæ§˜ã®ã‚¹ãƒ†ãƒƒãƒ—ã‚’ç¹°ã‚Šè¿”ã—ã¦ãã ã•ã„。

    • KDE コントロールセンターを開ãã¾ã™ã€‚メニューã«ãªã„å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰" +"ライン端末㧠\"kcontrol\" ã¨å…¥åŠ›ã—ã¦ã¿ã¦ãã ã•ã„。
    • 「KDE コンãƒãƒ¼ãƒãƒ³" +"トã€ã‹ã‚‰ã€Œãƒ•ã‚¡ã‚¤ãƒ«ã®é–¢é€£ä»˜ã‘ã€ã‚’é–‹ãã¾ã™ã€‚
    • ファイルタイプã®ãƒ„リー㧠" +"\"text\" を展開ã—ã€\"html\" をクリックã—ã¾ã™ã€‚
    • 使用ã™ã‚‹ã‚¦ã‚§ãƒ–ブラウザ" +"をアプリケーションã®ãƒªã‚¹ãƒˆã®æœ€ä¸Šä½ã«è¿½åŠ ã—ã¾ã™ã€‚
    • \"application -> " +"xhtml+xml\" ã«ã¤ã„ã¦ã‚‚åŒã˜ã‚ˆã†ã«è¨­å®šã—ã¾ã™ã€‚
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "階層構造をインãƒãƒ¼ãƒˆ" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "メモをã©ã®ã‚ˆã†ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "å…ƒã®éšŽå±¤æ§‹é€ ã‚’ä¿æŒã™ã‚‹(&K) (ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã‚’別々ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "第一階層ã®ãƒ¡ãƒ¢ã‚’別々ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«(&F)" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã‚’ã²ã¨ã¤ã®ãƒã‚¹ã‚±ãƒƒãƒˆã«(&A)" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "テキストファイルをインãƒãƒ¼ãƒˆ" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "テキストファイルã®æ›¸å¼" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "空行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒ¡ãƒ¢(&E)" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "å„è¡ŒãŒã²ã¨ã¤ã®ãƒ¡ãƒ¢(&N)" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "メモã¯ãƒ€ãƒƒã‚·ãƒ¥ (-) ã§å§‹ã¾ã‚‹(&D)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "メモã¯ã‚¢ã‚¹ã‚¿ãƒªã‚¹ã‚¯ (*) ã§å§‹ã¾ã‚‹(&S)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "ä»–ã®åŒºåˆ‡ã‚Šã‚’使ã†(&U):" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "全体ãŒã²ã¨ã¤ã®ãƒ¡ãƒ¢(&A)" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "KJots ã‹ã‚‰" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "KNotes ã‹ã‚‰" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Sticky Notes ã‹ã‚‰" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Tomboy ã‹ã‚‰" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "%1 より" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"ファイルをインãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。壊れã¦ã„ã‚‹ã‹ã€TuxCards ファイルã§ã¯ã‚ã‚Šã¾ã›" +"ん。" + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "ä¸æ­£ãªãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"メモã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™ã€‚æš—å·åŒ–ã•ã‚ŒãŸãƒ¡ãƒ¢ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã¾ã ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾" +"ã›ã‚“。TuxCards ã§æš—å·ã‚’解除ã—ã¦ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ç›´ã—ã¦ãã ã•ã„。" + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "æš—å·åŒ–ã•ã‚ŒãŸãƒ¡ãƒ¢ã¯ã¾ã ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"æš—å·åŒ–ã•ã‚ŒãŸãƒ¡ãƒ¢ã€‚
    æš—å·åŒ–ã•ã‚ŒãŸãƒ¡ãƒ¢ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯" +"ã¾ã ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。TuxCards ã§æš—å·ã‚’解除ã—ã¦ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ç›´" +"ã—ã¦ãã ã•ã„。
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    メインウィンドウを閉ã˜ã¦ã‚‚ %1ã¯ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã§å®Ÿè¡Œã—続ã‘ã¾ã™ã€‚終了ã™ã‚‹ã«" +"ã¯ã€Œãƒã‚¹ã‚±ãƒƒãƒˆã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã€Œçµ‚了ã€ã‚’é¸æŠžã—ã¦ãã ã•ã„。

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "システムトレイã«ãƒ‰ãƒƒã‚­ãƒ³ã‚°" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "é¸æŠžã‚’ãƒã‚¹ã‚±ãƒƒãƒˆã€Œ%1ã€ã«è²¼ã‚Šä»˜ã‘ã¾ã—ãŸ" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "最å°åŒ–(&M)" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "復元(&R)" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (ロック中)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "To Do" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "ãƒã‚§ãƒƒã‚¯ãªã—" + +#: tag.cpp:544 +msgid "Done" +msgstr "完了" + +#: tag.cpp:545 +msgid "Progress" +msgstr "進æ—" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "優先度" + +#: tag.cpp:599 +msgid "Low" +msgstr "低" + +#: tag.cpp:599 +msgid "Medium" +msgstr "中" + +#: tag.cpp:600 +msgid "High" +msgstr "高" + +#: tag.cpp:600 +msgid "Preference" +msgstr "好ã¿" + +#: tag.cpp:600 +msgid "Bad" +msgstr "ã²ã©ã„" + +#: tag.cpp:601 +msgid "Good" +msgstr "良ã„" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "素晴らã—ã„" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "強調表示" + +#: tag.cpp:667 +msgid "Important" +msgstr "é‡è¦" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "éžå¸¸ã«é‡è¦" + +#: tag.cpp:668 +msgid "Idea" +msgstr "アイデア" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "タイトル" + +#: tag.cpp:669 +msgid "Code" +msgstr "コード" + +#: tag.cpp:669 +msgid "Work" +msgstr "仕事" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "W." + +#: tag.cpp:687 +msgid "Personal" +msgstr "プライベート" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "é¢ç™½ã„" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "タグをカスタマイズ" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "æ–°ã—ã„ã‚¿ã‚°(&W)" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "æ–°ã—ã„状態(&A)" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "上ã«ç§»å‹• (Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "下ã«ç§»å‹• (Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "ã‚¿ã‚°" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "削除(&R)" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "ショートカット(&H):" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "æ–°ã—ã„兄弟メモã«ç¶™æ‰¿ã™ã‚‹(&I)" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "状態" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "åå‰(&M):" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "削除(&V)" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "エンブレム(&E):" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "背景(&B):" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "å–り消ã—ç·š" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "テキスト(&T):" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "色(&L):" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "フォント(&F):" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "サイズ(&S):" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "次ã®ãƒ†ã‚­ã‚¹ãƒˆã«ç½®æ›(&X):" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"ã“れを指定ã—ã¦ãŠãã¨ã€ã“ã®ã‚¿ã‚°ã¾ãŸã¯çŠ¶æ…‹ã‚’テキストã¨ã—ã¦è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ãŒã§ã" +"ã¾ã™ã€‚" + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "å„è¡Œã«ä»˜ã‘ã‚‹(&Y)" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "ã¨ã„ã†ã“ã¨ã¯..." + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"メモãŒæ•°è¡Œã‚ã‚‹å ´åˆã€ã‚¿ã‚°ã¾ãŸã¯çŠ¶æ…‹ã‚’最åˆã®è¡Œã ã‘ã«ä»˜ã‘ã‚‹ã‹ã€ãƒ¡ãƒ¢ã®å„è¡Œã«ä»˜ã‘" +"ã‚‹ã‹ã‚’é¸æŠžã§ãã¾ã™ã€‚" + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"ã“ã®ä¾‹ã§ã¯ã€ä¸Šã®ãƒ¡ãƒ¢ã®ã‚¿ã‚°ã¯æœ€åˆã®è¡Œã ã‘ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ã®ã«å¯¾ã—ã¦ã€" +"下ã®ãƒ¡ãƒ¢ã®ã‚¿ã‚°ã¯ãƒ¡ãƒ¢ã®å„è¡Œã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚" + +#: tagsedit.cpp:901 +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"タグを削除ã™ã‚‹ã¨ã€ç¾åœ¨ã“ã®ã‚¿ã‚°ãŒä»˜ã‘られã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã‹ã‚‰ã‚‚削除ã•ã‚Œã¾" +"ã™ã€‚" + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "タグ削除ã®ç¢ºèª" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "タグを削除" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"状態を削除ã™ã‚‹ã¨ã€ç¾åœ¨ã“ã®çŠ¶æ…‹ãŒä»˜ã‘られã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¡ãƒ¢ã‹ã‚‰ã‚‚削除ã•ã‚Œã¾" +"ã™ã€‚" + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "状態削除ã®ç¢ºèª" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "状態を削除" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 x 16 ピクセル" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 x 22 ピクセル" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 x 32 ピクセル" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 x 48 ピクセル" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 x 64 ピクセル" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 x 128 ピクセル" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"ウィンドウをリサイズã—ã¦\n" +"ç”»åƒã®ã‚µã‚¤ã‚ºã‚’é¸æŠžã—ã¦ãã ã•ã„。\n" +"ウィンドウを閉ã˜ã‚‹ã‹ Escape ã‚’\n" +"押ã™ã¨ã€å¤‰æ›´ãŒé©ç”¨ã•ã‚Œã¾ã™ã€‚" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..f442553 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3814 @@ +# Vertaling van basket.po naar Nederlands +# This file is distributed under the same license as the BasKet package. +# Copyright (C) 2003-2005. +# Jasper van der Marel , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: basket\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2004-04-06 10:17+0200\n" +"Last-Translator: Jasper van der Marel \n" +"Language-Team: Nederlands \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Jasper van der Marel " + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "jasper.van.der.marel@wanadoo.nl " + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" + +#: aboutdata.cpp:34 +#, fuzzy +msgid "BasKet Note Pads" +msgstr "Basket eigenschappen" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +#, fuzzy +msgid "Icon" +msgstr "&Pictogram :" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "" + +#: backup.cpp:65 +#, fuzzy +msgid "Save Folder" +msgstr "Laden van een bestan&d " + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "" + +#: backup.cpp:69 +#, fuzzy +msgid "&Move to Another Folder..." +msgstr "Laden van een bestan&d " + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "" + +#: backup.cpp:71 +#, fuzzy +msgid "Why to do that?" +msgstr "Naar selectie kopirëen" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "" + +#: backup.cpp:124 +#, fuzzy +msgid "Choose a Folder Where to Move Baskets" +msgstr "Een nieuwe basket maken" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:155 +#, fuzzy +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Een nieuwe basket maken" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "" + +#: backup.cpp:179 backup.cpp:200 +#, fuzzy +msgid "Backup Baskets" +msgstr "Basket ont-/vergrendelen" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "" + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "" + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" + +#: backup.cpp:257 +#, fuzzy +msgid "Restore Baskets" +msgstr "Nieuwe basket" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +msgid "Restart" +msgstr "" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "" + +#: basket.cpp:1968 +#, fuzzy +msgid "Dropped to basket %1" +msgstr "(%1) naar basket %2 overgebracht" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "" + +#: basket.cpp:2776 +#, fuzzy +msgid "Resize this note" +msgstr "Bevestig verwijderen" + +#: basket.cpp:2777 +#, fuzzy +msgid "Select or move this note" +msgstr "Bevestig verwijderen" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "" + +#: basket.cpp:2779 +#, fuzzy +msgid "Assign or remove tags from this note" +msgstr "Bevestig verwijderen" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2818 +msgid "Added" +msgstr "" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "" + +#: basket.cpp:3026 +#, fuzzy +msgid "&Unlock" +msgstr "\"%1\" &vergrendelen" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "" + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "" + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "" + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "" + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +#, fuzzy +msgid "&Customize..." +msgstr "&Voorbeeld...." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "" + +#: basket.cpp:3429 +#, fuzzy +msgid "Tags" +msgstr "Doel bewaren" + +#: basket.cpp:4065 +#, fuzzy, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "Echt %1' verwijderen ?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" + +#: basket.cpp:4165 +#, fuzzy +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "Naar klembord kopirëen " + +#: basket.cpp:4166 +#, fuzzy +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "Naar klembord kopirëen " + +#: basket.cpp:4167 +#, fuzzy +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "Naar selectie kopirëen" + +#: basket.cpp:4213 basket.cpp:4262 +#, fuzzy +msgid "Unable to open this note." +msgstr "Bevestig verwijderen" + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "" + +#: basket.cpp:4279 +#, fuzzy +msgid "Save to File" +msgstr "Laden van een bestan&d " + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "" + +#: basket.cpp:5221 +#, fuzzy +msgid "Please enter the password for the basket %1:" +msgstr "Klembordinhoud (%1) geplakt naar basket %2" + +#: basket.cpp:5266 +#, fuzzy +msgid "Please assign a password to the basket %1:" +msgstr "Selectie (%1) geplakt naar basket %2" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +#, fuzzy +msgid "Basket Creation Failed" +msgstr "Basket %1" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "" + +#: basketproperties.cpp:46 +#, fuzzy +msgid "Basket Properties" +msgstr "Basket eigenschappen" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +#, fuzzy +msgid "Name" +msgstr "&Naam :" + +#: basketproperties.cpp:76 +#, fuzzy +msgid "Background &image:" +msgstr "&Achtergrond kleur :" + +#: basketproperties.cpp:77 +#, fuzzy +msgid "&Background color:" +msgstr "&Achtergrond kleur :" + +#: basketproperties.cpp:78 +#, fuzzy +msgid "&Text color:" +msgstr "Kleur" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "" + +#: basketproperties.cpp:107 +#, fuzzy +msgid "Disposition" +msgstr "Items neer&zetten op muispositie" + +#: basketproperties.cpp:110 +#, fuzzy +msgid "Col&umns:" +msgstr "Kleur" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "" + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" + +#: basketproperties.cpp:149 +#, fuzzy +msgid "S&how this basket" +msgstr "Naar eerdere basket gaan" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "" + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "" + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "" + +#: bnpview.cpp:175 bnpview.cpp:1128 +#, fuzzy +msgid "General" +msgstr "Gecentreerd" + +#: bnpview.cpp:231 +#, fuzzy +msgid "Show/hide main window" +msgstr "Hoofdvenster tonen/verbergen" + +#: bnpview.cpp:232 +#, fuzzy +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "Hoofdvenster tonen wanneer verborgen, verbergen wanneer zichtbaar." + +#: bnpview.cpp:236 +#, fuzzy +msgid "Paste clipboard contents in current basket" +msgstr "Klembordinhoud plakkenn in de huidige basket" + +#: bnpview.cpp:237 +#, fuzzy +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Klembordinhoud plakken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "" + +#: bnpview.cpp:241 +#, fuzzy +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"Klembordinhoud plakken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Selectie plakken in de huidige basket" + +#: bnpview.cpp:245 +#, fuzzy +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Selectie plakken in de huidige basket zonder het hoofdvenster te openen." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Een nieuwe basket maken" + +#: bnpview.cpp:249 +#, fuzzy +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Nieuwe basket aanmaken zonder het hoofdvenster te openen. (Daarna kunnen de " +"globale snelkoppelingen worden gebruikt op een item toe te voegen, de " +"klembordinhoud of een selectie te plakken in deze nieuwe basket)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Naar eerdere basket gaan" + +#: bnpview.cpp:253 +#, fuzzy +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "Naar een eerdere basket gaan zonder het hoofdvenster te openen." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Naar volgende basket gaan" + +#: bnpview.cpp:257 +#, fuzzy +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "Naar een volgende basket gaan zonder het hoofdvenster te openen." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "" + +#: bnpview.cpp:265 +#, fuzzy +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "" + +#: bnpview.cpp:269 +#, fuzzy +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "" + +#: bnpview.cpp:273 +#, fuzzy +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "" + +#: bnpview.cpp:277 +#, fuzzy +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "" + +#: bnpview.cpp:281 +#, fuzzy +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "" + +#: bnpview.cpp:286 +#, fuzzy +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +"openen." + +#: bnpview.cpp:298 +#, fuzzy +msgid "Baskets" +msgstr "BasKet" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "" + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" + +#: bnpview.cpp:366 bnpview.cpp:368 +#, fuzzy +msgid "&Basket Archive..." +msgstr "Nieuwe basket" + +#: bnpview.cpp:371 +#, fuzzy +msgid "&Hide Window" +msgstr "Hoofdvenster &verbergen" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "" + +#: bnpview.cpp:377 +#, fuzzy +msgid "K&Notes" +msgstr "Item toevoegen" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "" + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "" + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "" + +#: bnpview.cpp:387 +#, fuzzy +msgid "&Tomboy" +msgstr "maal" + +#: bnpview.cpp:389 +#, fuzzy +msgid "Text &File..." +msgstr "Laden van een bestan&d " + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "" + +#: bnpview.cpp:417 +#, fuzzy +msgid "&Open" +msgstr "&Openen %1" + +#: bnpview.cpp:420 +#, fuzzy +msgid "Open &With..." +msgstr "Openen &met...%1" + +#: bnpview.cpp:424 +#, fuzzy +msgid "&Save to File..." +msgstr "Laden van een bestan&d " + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "" + +#: bnpview.cpp:438 +#, fuzzy +msgid "Move on &Bottom" +msgstr "Onderaan" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Tekst" + +#: bnpview.cpp:455 +#, fuzzy +msgid "&Link" +msgstr "Verwijzing" + +#: bnpview.cpp:456 +#, fuzzy +msgid "&Image" +msgstr "Afbeelding" + +#: bnpview.cpp:457 +#, fuzzy +msgid "&Color" +msgstr "Kleur" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "" + +#: bnpview.cpp:461 +#, fuzzy +msgid "Im&port Icon..." +msgstr "Een pictogram im&porteren van" + +#: bnpview.cpp:462 +#, fuzzy +msgid "Load From &File..." +msgstr "Laden van een bestan&d " + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "" + +#: bnpview.cpp:520 +#, fuzzy +msgid "&New Basket..." +msgstr "Nieuwe basket" + +#: bnpview.cpp:522 +#, fuzzy +msgid "New &Sub-Basket..." +msgstr "Nieuwe basket" + +#: bnpview.cpp:524 +#, fuzzy +msgid "New Si&bling Basket..." +msgstr "Nieuwe basket" + +#: bnpview.cpp:527 +#, fuzzy +msgid "&New" +msgstr "&Nieuwe basket..." + +#: bnpview.cpp:535 +#, fuzzy +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "Nieuwe basket" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "" + +#: bnpview.cpp:540 +#, fuzzy +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "Nieuwe basket" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "" + +#: bnpview.cpp:554 +#, fuzzy +msgid "Filter all &Baskets" +msgstr "Nieuwe basket" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "" + +#: bnpview.cpp:563 +#, fuzzy +msgid "&Previous Basket" +msgstr "Naar eerdere basket gaan" + +#: bnpview.cpp:565 +#, fuzzy +msgid "&Next Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:567 +#, fuzzy +msgid "&Fold Basket" +msgstr "BasKet" + +#: bnpview.cpp:569 +#, fuzzy +msgid "&Expand Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:579 +#, fuzzy +msgid "Configure &Global Shortcuts..." +msgstr "&Globale snelkoppelingen instellen..." + +#: bnpview.cpp:583 +#, fuzzy +msgid "&Welcome Baskets" +msgstr "Nieuwe basket" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "" + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "" + +#: bnpview.cpp:1295 +#, fuzzy +msgid "No notes" +msgstr "Item toevoegen" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "" + +#: bnpview.cpp:1299 +#, fuzzy +msgid "no filter" +msgstr "Item toevoegen" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "" + +#: bnpview.cpp:1420 +#, fuzzy +msgid "Picked color to basket %1" +msgstr "(%1) naar basket %2 overgebracht" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "" + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "" + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "" + +#: bnpview.cpp:1589 +#, fuzzy +msgid "Grabbed screen zone to basket %1" +msgstr "(%1) naar basket %2 overgebracht" + +#: bnpview.cpp:1637 +#, fuzzy +msgid "Delete Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1640 +#, fuzzy +msgid "Delete Only that Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +#, fuzzy +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "Echt %1' verwijderen ?" + +#: bnpview.cpp:1657 +#, fuzzy +msgid "Remove Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1659 +#, fuzzy +msgid "&Remove Basket" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" + +#: bnpview.cpp:1673 +#, fuzzy +msgid "Remove Children Baskets" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1675 +#, fuzzy +msgid "&Remove Children Baskets" +msgstr "Nieuwe basket" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +#, fuzzy +msgid "Basket Archives" +msgstr "Basket eigenschappen" + +#: bnpview.cpp:1869 +#, fuzzy +msgid "Clipboard content pasted to basket %1" +msgstr "Klembordinhoud (%1) geplakt naar basket %2" + +#: bnpview.cpp:1877 +#, fuzzy +msgid "Selection pasted to basket %1" +msgstr "Selectie (%1) geplakt naar basket %2" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "" + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "" + +#: bnpview.cpp:2260 +#, fuzzy +msgid "&Remove All" +msgstr "Nieuwe basket" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" + +#: debugwindow.cpp:34 +#, fuzzy +msgid "Debug Window" +msgstr "Debug venster" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "" + +#: exporterdialog.cpp:49 +#, fuzzy +msgid "&Filename:" +msgstr "Bestands&naam :" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "" + +#: filter.cpp:64 +#, fuzzy +msgid "&Filter: " +msgstr "Bestands&naam :" + +#: filter.cpp:66 +#, fuzzy +msgid "T&ag: " +msgstr "Doel bewaren" + +#: filter.cpp:69 +#, fuzzy +msgid "Filter all Baskets" +msgstr "Nieuwe basket" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "" + +#: filter.cpp:150 +#, fuzzy +msgid "(Tagged)" +msgstr "Afbeelding" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "" + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "" + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "" + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "" + +#: kgpgme.cpp:67 +#, fuzzy +msgid "Choose a secret key:" +msgstr "Een nieuwe basket maken" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "" + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "" + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "" + +#: kicondialog.cpp:121 +#, fuzzy +msgid "&Browse..." +msgstr "&Bladeren..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "" + +#: kicondialog.cpp:135 +#, fuzzy +msgid "Actions" +msgstr "Koppeling naar &toepassing" + +#: kicondialog.cpp:136 +#, fuzzy +msgid "Applications" +msgstr "Koppeling naar &toepassing" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "" + +#: kicondialog.cpp:138 +#, fuzzy +msgid "Filesystem" +msgstr "Bestands&naam :" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "" + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "" + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "" + +#: likeback.cpp:469 +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "" + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "" + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "" + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "" + +#: linklabel.cpp:564 +#, fuzzy +msgid "I&talic" +msgstr "&Schuin" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Vet" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "" + +#: linklabel.cpp:578 +#, fuzzy +msgid "&Underline:" +msgstr "&Onderstreept" + +#: linklabel.cpp:583 +#, fuzzy +msgid "Colo&r:" +msgstr "Kleur" + +#: linklabel.cpp:588 +#, fuzzy +msgid "&Mouse hover color:" +msgstr "Muis&kleur bij selectie :" + +#: linklabel.cpp:595 +#, fuzzy +msgid "&Icon size:" +msgstr "&Pictogram :" + +#: linklabel.cpp:600 +msgid "None" +msgstr "" + +#: linklabel.cpp:601 +#, fuzzy +msgid "Icon size" +msgstr "aan de zijkant" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "" + +#: linklabel.cpp:604 +#, fuzzy +msgid "&Preview:" +msgstr "Basket &eigenschappen" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" + +#: linklabel.cpp:623 +msgid "Example" +msgstr "" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "" + +#: mainwindow.cpp:301 +#, fuzzy +msgid "Basket" +msgstr "BasKet" + +#: mainwindow.cpp:310 +#, fuzzy +msgid "

    Do you really want to quit %1?

    " +msgstr "Basket echt afsluiten ?" + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" + +#: mainwindow.cpp:315 +#, fuzzy +msgid "Quit Confirm" +msgstr "Afsluiten bevestigen" + +#: newbasketdialog.cpp:88 +#, fuzzy +msgid "New Basket" +msgstr "Nieuwe basket" + +#: newbasketdialog.cpp:113 +#, fuzzy +msgid "Background color" +msgstr "&Achtergrond kleur :" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "" + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "" + +#: newbasketdialog.cpp:214 +#, fuzzy +msgid "(Baskets)" +msgstr "BasKet" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "" + +#: note.cpp:2818 +#, fuzzy +msgid "(Image)" +msgstr "Afbeelding" + +#: notecontent.cpp:173 +#, fuzzy +msgid "Plain Text" +msgstr "Opgemaakte tekst (HTML)" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Tekst" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Afbeelding" + +#: notecontent.cpp:176 +#, fuzzy +msgid "Animation" +msgstr "Aan&tekeningen :" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Verwijzing" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Kleur" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "" + +#: notecontent.cpp:323 +#, fuzzy +msgid "Edit this plain text" +msgstr "Koppeling naar &toepassing" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "" + +#: notecontent.cpp:330 +#, fuzzy +msgid "Edit this launcher" +msgstr "Koppeling naar &toepassing" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "" + +#: notecontent.cpp:332 +#, fuzzy +msgid "Edit this unknown object" +msgstr "Koppeling naar &toepassing" + +#: notecontent.cpp:558 +#, fuzzy +msgid "Opening plain text..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:559 +#, fuzzy +msgid "Opening plain texts..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:560 +#, fuzzy +msgid "Opening plain text with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:561 +#, fuzzy +msgid "Opening plain texts with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:562 +#, fuzzy +msgid "Open plain text with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:563 +#, fuzzy +msgid "Open plain texts with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:649 +#, fuzzy +msgid "Opening text..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:650 +#, fuzzy +msgid "Opening texts..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:651 +#, fuzzy +msgid "Opening text with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:652 +#, fuzzy +msgid "Opening texts with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:653 +#, fuzzy +msgid "Open text with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:654 +#, fuzzy +msgid "Open texts with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 maal '%2 pixels" + +#: notecontent.cpp:769 +#, fuzzy +msgid "Opening image..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:770 +#, fuzzy +msgid "Opening images..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:771 +#, fuzzy +msgid "Opening image with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:772 +#, fuzzy +msgid "Opening images with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:773 +#, fuzzy +msgid "Open image with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:774 +#, fuzzy +msgid "Open images with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "" + +#: notecontent.cpp:862 +#, fuzzy +msgid "Opening animation..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:863 +#, fuzzy +msgid "Opening animations..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:864 +#, fuzzy +msgid "Opening animation with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:865 +#, fuzzy +msgid "Opening animations with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "" + +#: notecontent.cpp:1016 +#, fuzzy +msgid "Open this file" +msgstr "Naar volgende basket gaan" + +#: notecontent.cpp:1035 +#, fuzzy +msgid "Opening file..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1036 +#, fuzzy +msgid "Opening files..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1037 +#, fuzzy +msgid "Opening file with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1038 +#, fuzzy +msgid "Opening files with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1039 +#, fuzzy +msgid "Open file with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:1040 +#, fuzzy +msgid "Open files with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:1111 +#, fuzzy +msgid "Open this sound" +msgstr "Openen &met...%1" + +#: notecontent.cpp:1148 +#, fuzzy +msgid "Opening sound..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1149 +#, fuzzy +msgid "Opening sounds..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1150 +#, fuzzy +msgid "Opening sound with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1151 +#, fuzzy +msgid "Opening sounds with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1152 +#, fuzzy +msgid "Open sound with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:1153 +#, fuzzy +msgid "Open sounds with:" +msgstr "Openen &met...%1" + +#: notecontent.cpp:1191 +#, fuzzy +msgid "Target" +msgstr "Doel bewaren" + +#: notecontent.cpp:1214 +#, fuzzy +msgid "Open this link" +msgstr "Naar volgende basket gaan" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "" + +#: notecontent.cpp:1243 +#, fuzzy +msgid "Opening link target..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1244 +#, fuzzy +msgid "Opening link targets..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1245 +#, fuzzy +msgid "Opening link target with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1246 +#, fuzzy +msgid "Opening link targets with..." +msgstr "Openen &met...%1" + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "" + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "" + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "" + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "" + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "" + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" + +#: noteedit.cpp:383 +#, fuzzy +msgid "Edit Image Note" +msgstr "Item en eigenschappen bewerken" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" + +#: noteedit.cpp:399 +#, fuzzy +msgid "Edit Animation Note" +msgstr "Aan&tekeningen :" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" + +#: noteedit.cpp:501 +#, fuzzy +msgid "Edit Unknown Note" +msgstr "Aan&tekeningen :" + +#: noteedit.cpp:530 +#, fuzzy +msgid "Edit Link Note" +msgstr "Aan&tekeningen :" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Automatisch" + +#: noteedit.cpp:551 noteedit.cpp:704 +#, fuzzy +msgid "&Icon:" +msgstr "&Pictogram :" + +#: noteedit.cpp:575 +#, fuzzy +msgid "Ta&rget:" +msgstr "Doel bewaren" + +#: noteedit.cpp:576 +#, fuzzy +msgid "&Title:" +msgstr "&Titel :" + +#: noteedit.cpp:689 +#, fuzzy +msgid "Edit Launcher Note" +msgstr "Koppeling naar &toepassing" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "" + +#: noteedit.cpp:724 tagsedit.cpp:379 +#, fuzzy +msgid "&Name:" +msgstr "&Naam :" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Vet" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Onderlijnd" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Gecentreerd" + +#: noteedit.cpp:828 +#, fuzzy +msgid "Align Right" +msgstr "Rechts" + +#: noteedit.cpp:829 +#, fuzzy +msgid "Justified" +msgstr "Uitgevuld" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "" + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, fuzzy, no-c-format +msgid "&Basket" +msgstr "BasKet" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, fuzzy, no-c-format +msgid "&Note" +msgstr "Item toevoegen" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, fuzzy, no-c-format +msgid "&Tags" +msgstr "Doel bewaren" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, fuzzy, no-c-format +msgid "Fi<er:" +msgstr "Bestands&naam :" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "" + +#: settings.cpp:367 +#, fuzzy +msgid "On left" +msgstr "Bovenaan" + +#: settings.cpp:368 +msgid "On right" +msgstr "" + +#: settings.cpp:369 +#, fuzzy +msgid "&Basket tree position:" +msgstr "Items neer&zetten op muispositie" + +#: settings.cpp:376 settings.cpp:691 +#, fuzzy +msgid "On top" +msgstr "Bovenaan" + +#: settings.cpp:377 settings.cpp:692 +#, fuzzy +msgid "On bottom" +msgstr "Onderaan" + +#: settings.cpp:378 +#, fuzzy +msgid "&Filter bar position:" +msgstr "Items neer&zetten op muispositie" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" + +#: settings.cpp:402 +#, fuzzy +msgid "System Tray Icon" +msgstr "Systeemvak pictogram" + +#: settings.cpp:407 +#, fuzzy +msgid "&Dock in system tray" +msgstr "Programma in systeemvak tonen" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "" + +#: settings.cpp:426 +#, fuzzy +msgid "&Hide main window when mouse leaves it for" +msgstr "" +"Hoofdvenster verbergen bij het sluiten van het venster (in plaats van de " +"toepassing af te sluiten)" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "Tienden van seconden" + +#: settings.cpp:437 +#, fuzzy +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"Hoofdvenster verbergen bij het sluiten van het venster (in plaats van de " +"toepassing af te sluiten)" + +#: settings.cpp:511 +#, fuzzy +msgid "Ani&mate changes in baskets" +msgstr "Een nieuwe basket maken" + +#: settings.cpp:514 +#, fuzzy +msgid "&Show tooltips in baskets" +msgstr "" +"Tooltips onmiddelijk laten zien (inclusief alle aantekeningen bij " +"objecten...)" + +#: settings.cpp:517 +#, fuzzy +msgid "&Big notes" +msgstr "Item toevoegen" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "" + +#: settings.cpp:533 +#, fuzzy +msgid "&Export tags in texts" +msgstr "Koppeling naar &toepassing" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "" + +#: settings.cpp:575 +#, fuzzy +msgid "Paste clipboard" +msgstr "Naar klembord kopirëen " + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "" + +#: settings.cpp:582 +#, fuzzy +msgid "Load note from file" +msgstr "Laden van een bestan&d " + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "" + +#: settings.cpp:584 +#, fuzzy +msgid "Import icon" +msgstr "Een pictogram im&porteren van" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "" + +#: settings.cpp:588 +#, fuzzy +msgid "at cursor position" +msgstr "Items neer&zetten op muispositie" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "" + +#: settings.cpp:603 +#, fuzzy +msgid " minutes" +msgstr "Item toevoegen" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "" + +#: settings.cpp:693 +msgid "At current note" +msgstr "" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "" + +#: settings.cpp:718 +#, fuzzy +msgid "&by" +msgstr "maal" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixels" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Voorbeeld...." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "" + +#: settings.cpp:732 +#, fuzzy +msgid "&Plain text" +msgstr "Opgemaakte tekst (HTML)" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "" + +#: settings.cpp:798 +#, fuzzy, c-format +msgid "Launch %1" +msgstr "BasKet" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "" + +#: settings.cpp:800 +msgid "&Files" +msgstr "" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "" + +#: settings.cpp:802 +#, fuzzy +msgid "&Network Links" +msgstr "Uiterlijk van &netwerk verwijzingen :" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "" + +#: settings.cpp:841 +#, fuzzy +msgid "Open text notes with:" +msgstr "Openen &met...%1" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "" + +#: settings.cpp:849 +#, fuzzy +msgid "Open image notes with:" +msgstr "Openen &met...%1" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "" + +#: settings.cpp:857 +#, fuzzy +msgid "Open animation notes with:" +msgstr "Openen &met...%1" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "" + +#: settings.cpp:865 +#, fuzzy +msgid "Open sound notes with:" +msgstr "Openen &met...%1" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "" + +#: softwareimporters.cpp:54 +#, fuzzy +msgid "&All notes in one basket" +msgstr "" +"Tooltips onmiddelijk laten zien (inclusief alle aantekeningen bij " +"objecten...)" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "" + +#: softwareimporters.cpp:95 +#, fuzzy +msgid "&All in one note" +msgstr "" +"Tooltips onmiddelijk laten zien (inclusief alle aantekeningen bij " +"objecten...)" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" + +#: systemtray.cpp:140 +#, fuzzy +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"Basket blijft actief in het systeemvak wanneer het hoofdvenster wordt " +"gesloten. Gebruik 'Afsluiten' in het popup menu om de toepassing af te " +"sluiten." + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Programma in systeemvak tonen" + +#: systemtray.cpp:237 +#, fuzzy +msgid "Pasted selection to basket %1" +msgstr "Selectie (%1) is naar basket %2 geplakt" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "" + +#: tag.cpp:544 +msgid "To Do" +msgstr "" + +#: tag.cpp:544 +#, fuzzy +msgid "Unchecked" +msgstr "Aan&gevinkt item :" + +#: tag.cpp:544 +msgid "Done" +msgstr "" + +#: tag.cpp:545 +#, fuzzy +msgid "Progress" +msgstr "Basket &eigenschappen" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "" + +#: tag.cpp:599 +msgid "Priority" +msgstr "" + +#: tag.cpp:599 +msgid "Low" +msgstr "" + +#: tag.cpp:599 +msgid "Medium" +msgstr "" + +#: tag.cpp:600 +msgid "High" +msgstr "" + +#: tag.cpp:600 +msgid "Preference" +msgstr "" + +#: tag.cpp:600 +msgid "Bad" +msgstr "" + +#: tag.cpp:601 +msgid "Good" +msgstr "" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "" + +#: tag.cpp:601 +#, fuzzy +msgid "Highlight" +msgstr "Rechts" + +#: tag.cpp:667 +msgid "Important" +msgstr "" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "" + +#: tag.cpp:668 +msgid "Idea" +msgstr "" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "" + +#: tag.cpp:668 +#, fuzzy +msgid "Title" +msgstr "&Titel :" + +#: tag.cpp:669 +msgid "Code" +msgstr "" + +#: tag.cpp:669 +msgid "Work" +msgstr "" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "" + +#: tag.cpp:687 +msgid "Personal" +msgstr "" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "" + +#: tag.cpp:687 +msgid "Funny" +msgstr "" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "" + +#: tagsedit.cpp:334 +#, fuzzy +msgid "New St&ate" +msgstr "Nieuwe basket" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "" + +#: tagsedit.cpp:375 +#, fuzzy +msgid "Tag" +msgstr "Doel bewaren" + +#: tagsedit.cpp:382 +#, fuzzy +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "Nieuwe basket" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "" + +#: tagsedit.cpp:402 +#, fuzzy +msgid "Na&me:" +msgstr "&Naam :" + +#: tagsedit.cpp:409 +#, fuzzy +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "Nieuwe basket" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "" + +#: tagsedit.cpp:426 +#, fuzzy +msgid "&Background:" +msgstr "&Achtergrond kleur :" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "" + +#: tagsedit.cpp:457 +#, fuzzy +msgid "&Text:" +msgstr "&Tekst" + +#: tagsedit.cpp:467 +#, fuzzy +msgid "Co&lor:" +msgstr "Kleur" + +#: tagsedit.cpp:471 +#, fuzzy +msgid "&Font:" +msgstr "&Pictogram :" + +#: tagsedit.cpp:474 +#, fuzzy +msgid "&Size:" +msgstr "&Titel :" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" + +#: tagsedit.cpp:496 +#, fuzzy +msgid "On ever&y line" +msgstr "Onderlijnd" + +#: tagsedit.cpp:501 +#, fuzzy +msgid "What does it mean?" +msgstr "Naar selectie kopirëen" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" + +#: tagsedit.cpp:901 +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" + +#: tagsedit.cpp:902 +#, fuzzy +msgid "Confirm Delete Tag" +msgstr "Naar selectie kopirëen" + +#: tagsedit.cpp:903 +#, fuzzy +msgid "Delete Tag" +msgstr "Nieuwe basket" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" + +#: tagsedit.cpp:909 +#, fuzzy +msgid "Confirm Delete State" +msgstr "Naar selectie kopirëen" + +#: tagsedit.cpp:910 +#, fuzzy +msgid "Delete State" +msgstr "Nieuwe basket" + +#: variouswidgets.cpp:47 +#, fuzzy +msgid "..." +msgstr "&Nieuwe basket..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +#, fuzzy +msgid "16 by 16 pixels" +msgstr "pixels" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +#, fuzzy +msgid "22 by 22 pixels" +msgstr "pixels" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +#, fuzzy +msgid "32 by 32 pixels" +msgstr "pixels" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +#, fuzzy +msgid "48 by 48 pixels" +msgstr "pixels" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +#, fuzzy +msgid "64 by 64 pixels" +msgstr "pixels" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +#, fuzzy +msgid "128 by 128 pixels" +msgstr "%1 maal '%2 pixels" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" + +#, fuzzy +#~ msgid "I dislike..." +#~ msgstr "&Voorbeeld...." + +#, fuzzy +#~ msgid "I Do not Like..." +#~ msgstr "&Voorbeeld...." + +#, fuzzy +#~ msgid "Remo&ve" +#~ msgstr "Nieuwe basket" + +#, fuzzy +#~ msgid "" +#~ "Add a rich text note to the current basket without having to open main " +#~ "window." +#~ msgstr "" +#~ "Een nieuwe item aanmaken in de huidige basket zonder het hoofdvenster te " +#~ "openen." + +#, fuzzy +#~ msgid "&Rich Text" +#~ msgstr "Opgemaakte tekst (HTML)" + +#, fuzzy +#~ msgid "Only in the Current Basket" +#~ msgstr "Nieuwe basket" + +#, fuzzy +#~ msgid "In Every Baskets" +#~ msgstr "Nieuwe basket" + +#, fuzzy +#~ msgid "Opening rich text..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Opening rich texts..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Opening rich text with..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Opening rich texts with..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Open rich text notes with:" +#~ msgstr "Openen &met...%1" + +#~ msgid "Show the debug window" +#~ msgstr "Toon debug venster" + +#, fuzzy +#~ msgid "Hide the main window in the system tray icon on startup" +#~ msgstr "" +#~ "Hoofdvenster verbergen bij het sluiten van het venster (in plaats van de " +#~ "toepassing af te sluiten)" + +#, fuzzy +#~ msgid "C&hange..." +#~ msgstr "&Bladeren..." + +#, fuzzy +#~ msgid "Change..." +#~ msgstr "&Bladeren..." + +#, fuzzy +#~ msgid "Filter &all Baskets" +#~ msgstr "Nieuwe basket" + +#, fuzzy +#~ msgid "Do you really want to delete %1 and its contents?" +#~ msgstr "Echt %1' verwijderen ?" + +#~ msgid "Basket %1" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Checklist" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "Right Align" +#~ msgstr "Rechts" + +#, fuzzy +#~ msgid "Do you really want to delete this item?" +#~ msgstr "Echt %1' verwijderen ?" + +#, fuzzy +#~ msgid "Copied item to clipboard." +#~ msgstr "Naar klembord kopirëen " + +#, fuzzy +#~ msgid "Cutted item to clipboard." +#~ msgstr "Naar klembord kopirëen " + +#, fuzzy +#~ msgid "Opening item file..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Opening item file with..." +#~ msgstr "Openen &met...%1" + +#, fuzzy +#~ msgid "Save Target" +#~ msgstr "Doel bewaren" + +#, fuzzy +#~ msgid "Save a Copy" +#~ msgstr "Kopie bewaren" + +#, fuzzy +#~ msgid "&URL:" +#~ msgstr "&URL :" + +#, fuzzy +#~ msgid "O&pen" +#~ msgstr "&Openen %1" + +#, fuzzy +#~ msgid "Anno&tations:" +#~ msgstr "Aan&tekeningen :" + +#, fuzzy +#~ msgid "&File name:" +#~ msgstr "Bestands&naam :" + +#, fuzzy +#~ msgid "Co&ntent: %1" +#~ msgstr "In&houd : %1" + +#~ msgid "&Meta-data" +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "New Basket Wizard" +#~ msgstr "Nieuwe basket" + +#, fuzzy +#~ msgid "Chec&k list" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "&Stack" +#~ msgstr "&Schuin" + +#, fuzzy +#~ msgid "&Mirror a folder" +#~ msgstr "&Kopie maken van een bestand" + +#, fuzzy +#~ msgid "&Application launchers" +#~ msgstr "Koppeling naar &toepassing" + +#, fuzzy +#~ msgid "Basket Type" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Open the existing basket" +#~ msgstr "Naar volgende basket gaan" + +#, fuzzy +#~ msgid "Mirror only new files" +#~ msgstr "&Kopie maken van een bestand" + +#, fuzzy +#~ msgid "Basket Name" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Alte&rnate background color:" +#~ msgstr "A<ernatieve achtergrond kleur :" + +#, fuzzy +#~ msgid "Items ali&gnment:" +#~ msgstr "&Uitlijning items :" + +#~ msgid "Middle" +#~ msgstr "Midden" + +#~ msgid "Show items chec&k boxes" +#~ msgstr "Selectie&vak bij items tonen" + +#, fuzzy +#~ msgid "Allow ins&ert items at cursor position" +#~ msgstr "Items neer&zetten op muispositie" + +#~ msgid "on top" +#~ msgstr "Bovenaan" + +#~ msgid "on bottom" +#~ msgstr "Onderaan" + +#, fuzzy +#~ msgid "The cl&ipboard" +#~ msgstr "Naar klembord kopirëen " + +#, fuzzy +#~ msgid "The s&election" +#~ msgstr "Naar selectie kopirëen" + +#, fuzzy +#~ msgid "Mi&rror only new files" +#~ msgstr "&Kopie maken van een bestand" + +#, fuzzy +#~ msgid "For &Text, Rich Text, Image, Animation, Color and Unknow Items" +#~ msgstr "Voor in&houd gerelateerde items (tekst, afbeelding of kleur) :" + +#, fuzzy +#~ msgid "Click: copy, Ctrl+click: edit, Alt+click: open" +#~ msgstr "" +#~ "Klikken om te kopirëen, Ctr+klik om te bewerken, Alt+klik om te openen " +#~ "(configuratie 1)" + +#, fuzzy +#~ msgid "Click: edit, Ctrl+click: copy, Alt+click: open" +#~ msgstr "" +#~ "Klikken om te bewerken, Ctr+klik om te kopirëen, ALt+klik om te openen " +#~ "(configuratie 2)" + +#, fuzzy +#~ msgid "Click: open, Ctrl+click: edit, Alt+click: copy" +#~ msgstr "" +#~ "Klikken om te openen, Ctrl+klik om te bewerken, Alt+klik om te kopirëen " +#~ "(configuratie 3)" + +#, fuzzy +#~ msgid "Double-click: copy, Ctrl+double-click: edit, Alt+double-click: open" +#~ msgstr "" +#~ "Klikken om te kopirëen, Ctr+klik om te bewerken, Alt+klik om te openen " +#~ "(configuratie 1)" + +#, fuzzy +#~ msgid "Double-click: edit, Ctrl+double-click: copy, Alt+double-click: open" +#~ msgstr "" +#~ "Klikken om te bewerken, Ctr+klik om te kopirëen, ALt+klik om te openen " +#~ "(configuratie 2)" + +#, fuzzy +#~ msgid "Double-click: open, Ctrl+double-click: edit, Alt+double-click: copy" +#~ msgstr "" +#~ "Klikken om te openen, Ctrl+klik om te bewerken, Alt+klik om te kopirëen " +#~ "(configuratie 3)" + +#, fuzzy +#~ msgid "Add Item Polic&y" +#~ msgstr "Item &gedrag toevoegen" + +#, fuzzy +#~ msgid "C&lick Actions" +#~ msgstr "Bij muis&klik acties" + +#, fuzzy +#~ msgid "Clip&board" +#~ msgstr "Naar klembord kopirëen " + +#, fuzzy +#~ msgid "&Mirror" +#~ msgstr "&Kopie maken van een bestand" + +#, fuzzy +#~ msgid "%1 item to drag (%2):" +#~ msgstr "%1 item te slepen (%2)" + +#~ msgid "Last" +#~ msgstr "Laatste" + +#~ msgid "First" +#~ msgstr "Eerste" + +#~ msgid "(Empty)" +#~ msgstr "(Leeg)" + +#, fuzzy +#~ msgid "Select Chec&ked Items" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "Pre&vious Checked Item" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "Ne&xt Checked Item" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "Edit &Meta-data..." +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "Chec&k" +#~ msgstr "Aan&gevinkt item :" + +#, fuzzy +#~ msgid "Checklist basket." +#~ msgstr "Nieuwe basket..." + +#, fuzzy +#~ msgid "Clips basket." +#~ msgstr "Nieuwe basket..." + +#, fuzzy +#~ msgid "A&ppearance:" +#~ msgstr "&Uiterlijk :" + +#, fuzzy +#~ msgid "Icon name: %1" +#~ msgstr "&Pictogram :" + +#, fuzzy +#~ msgid "" +#~ "_: No icon\n" +#~ "None" +#~ msgstr "&Toon pictogram:" + +#~ msgid "BasKet" +#~ msgstr "BasKet" + +#, fuzzy +#~ msgid "" +#~ "Allow you to paste the current stack item into the active window without " +#~ "have to take the mouse and drag it." +#~ msgstr "Naar een volgende basket gaan zonder het hoofdvenster te openen." + +#, fuzzy +#~ msgid "Rotate items in current stack" +#~ msgstr "Nieuw item maken in de huidige basket" + +#, fuzzy +#~ msgid "Clear all items in the current stack" +#~ msgstr "Nieuw item maken in de huidige basket" + +#, fuzzy +#~ msgid "Remove all items of the current stack basket." +#~ msgstr "Nieuw item maken in de huidige basket" + +#, fuzzy +#~ msgid "copy to selection" +#~ msgstr "Naar selectie kopirëen" + +#, fuzzy +#~ msgid "edit meta-data" +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "" +#~ "_: %x=copy|edit|open\n" +#~ "Shift+double-click: %1, Shift+Ctrl+double-click: %2, Shift+Alt+double-" +#~ "click: %3." +#~ msgstr "" +#~ "Klikken om te kopirëen, Ctr+klik om te bewerken, Alt+klik om te openen " +#~ "(configuratie 1)" + +#, fuzzy +#~ msgid "" +#~ "_: %x=copy|edit|open\n" +#~ "Double-click: %1, Ctrl+double-click: %2, Alt+double-click: %3. Press " +#~ "Shift for more." +#~ msgstr "" +#~ "Klikken om te bewerken, Ctr+klik om te kopirëen, ALt+klik om te openen " +#~ "(configuratie 2)" + +#, fuzzy +#~ msgid "Show ite&ms tooltips" +#~ msgstr "&Informatievensters bij items tonen (aantekeningen...)" + +#, fuzzy +#~ msgid "Import an icon:" +#~ msgstr "Een pictogram im&porteren van" diff --git a/po/nn.po b/po/nn.po new file mode 100644 index 0000000..5b7d3a7 --- /dev/null +++ b/po/nn.po @@ -0,0 +1,3518 @@ +# Translation of nn to Norwegian Nynorsk +# +# Karl Ove Hufthammer , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: nn\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-01-22 20:19+0100\n" +"Last-Translator: Karl Ove Hufthammer \n" +"Language-Team: Norwegian Nynorsk \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Karl Ove Hufthammer" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "karl@huftis.org" + +#: aboutdata.cpp:27 +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Ta vare på tankane dine.

    Eit notatprogram som gjer det enkelt å skriva ned idéar og finna dei att seinare. Det har aldri vore " +"lettare å halda orden i sysakene.

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Korgnotat" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Forfattar og vedlikeheldar." + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Krypteringsstøtte, Kontakt-integrering og KnowIt-import." + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Automatisk låsing, lagrestatusikon, kopiering og innliming av HTML, " +"verktøytips for korgnamn og dra-og-slepp-støtte." + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Ikon." + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Lagra som korgarkiv" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Lagrar som korgarkiv. Vent litt …" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Denne fila er ikkje eit korgarkiv." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Korgarkivfeil" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Fila er øydelagd, og kan ikkje opnast." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Denne fila vart lagra i ein nyare versjon av %1 enn du brukar. Fila kan opnast, men det er ikkje sikkert all informasjonen i ho vert tilgjengeleg. Det kan for eksempel vera at nokre notat manglar på grunn av at dei er av ein type som berre er tilgjengeleg i nye versjonar. Når du skal lagra fila, bør du vurdera å lagra ho under eit anna filnamn, slik at originalen ikkje går tapt." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Denne fila vart lagra i ein nyare versjon av %1 enn du brukar. Du må oppgradera til den nye versjonen for å kunna opna fila." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Reservekopiar og gjenoppretting" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Lagringsmappe" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "Korgene dine vert no lagra i mappa:
    %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Flytt til ei anna mappe …" + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Bruk ei gammal mappe …" + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Korfor gjera dette?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" +"

    Du kan flytta mappa der %1 lagrar korgene dine, av forskjellige grunnar:

    • Lagra korgene i ein synleg plass i heimemappa, som for eksempel «~/Dokument/Notat/» eller «~/Korger».
    • Lagra korgene pÃ¥ ein tenar for Ã¥ dela dei mellom fleire maskiner.
      I dette tilfellet må du montera den delte fila til det lokale filsystemet, og be %2 brukar dette monteringspunktet.
      Åtvaring: Ikkje finn på å køyra %3 samtidig på begge maskinene, då dette kan føra til tap av data." +"

    Hugs at du ikkje må endra innhaldet i den mappa manuelt. (Viss du for eksempel legg til ei fil i ei korgmappe, vert ikkje denne lagt til korga.)

    " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Reservekopiar" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Ta reservekopi …" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Gjenopprett frå reservekopi …" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Siste reservekopi: aldri" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Siste reservekopi: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Vel mappa du vil flytta korgene til" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "Mappa %1 er ikkje tom. Ønskjer du å overskriva ho?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Vil du overskriva mappa?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "&Overskriv" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Korgene er no flytte til %1. %2 vert starta på nytt for at desse endringane skal trå i kraft." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Vel ei gammal mappe til å lagra korgene i" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Lagringsmappa er no flytt til %1. %2 vert starta på nytt for at desse endringane skal trå i kraft." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Korger_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Tar-arkiv komprimert med Gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Alle filer" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Reservekopiering" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Fila %1 finst allereie. Er du sikker på at du vil skriva over ho?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Skriva over?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Lagrar reservekopi av korger. Vent litt …" + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Opna korgarkiv" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "LESMEG.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Dette er ein reservekopi av korgene dine slik dei var før du begynte å gjenoppretta frå reservekopien %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Viss gjenopprettinga gjekk bra, kan du fjerna denne mappa." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Viss noko gjekk galt under gjenopprettinga, kan du bruka denne mappa til å lagra korgene dine i, slik at ingenting går tapt." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Vel «Korg | Reservekopiar og gjenoppretting | Bruk ei gammal mappe» og vel den mappa." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "Gjenopprettar %1. Vent litt …" + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Viss noko går galt under gjenopprettingsprosessen, bør du lesa fila %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Gjenopprett korger" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Dette arkivet er anten ikkje ein reservekopi av korger, eller så er det øydelagt. Du kan derfor ikkje opna arkivet, og dei gamle korgene dine er framleis gjeldande." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Gjenopprettingsfeil" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Reservekopien din har blitt gjenoppretta til %1. %2 vert no starta på nytt for at desse endringane skal trå i kraft." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Start på nytt" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Korger før gjenoppretting" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Korger før gjenoppretting (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Det nye notatet er ikkje i samsvar med filteret, og vert derfor skjult." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Eit nytt notatet er ikkje i samsvar med filteret, og vert derfor skjult." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Nokre nye notat er ikkje i samsvar med filteret, og vert derfor skjulte." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Dei nye notata er ikkje i samsvar med filteret, og vert derfor skjulte." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Grupper" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Set inn" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "La i korga %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Denne meldinga skal aldri visast. Viss ho vert vist, er det ein feil i " +"programmet. Meld derfor frå til utviklaren." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Sett inn notat her.\n" +"Høgreklikk for fleire val." + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Endra storleik på kolonnane." + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Endra storleik på gruppa." + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Endra storleik på notatet." + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Merk eller flytt dette notatet." + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Merk eller flytt denne gruppa." + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Legg til eller fjern merke­lappar på dette notatet." + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Merkelappar: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Utvida gruppa." + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Slå saman gruppa." + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Grupper med notatet nedanfor.\n" +"Høgreklikk for fleire val." + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Grupper med notatet ovanfor.\n" +"Høgreklikk for fleire val." + +#: basket.cpp:2818 +msgid "Added" +msgstr "Lagt til" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Siste endring" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Trykk til høgre for å gruppera i staden for å setja inn." + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Trykk til venstre for å setja inn i staden for å gruppera." + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Lås opp" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Passordverna korg." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Trykk «Lås opp» for å få tilgang til ho." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "Kryptering er ikkje støtta
    i denne versjonen av %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"For å la korgene verta verande lås, kan du endra låseperioden i " +"programoppsettet." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Lastar …" + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Tilpass …" + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrer etter denne merkelappen" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrer etter denne &tilstanden" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Merkelappar" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Er du sikker på at du vil sletta dette notatet?\n" +"Er du sikker på at du vil sletta desse %n notata?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Slett notat\n" +"Slett notat" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Kopierte notat til utklippstavla.\n" +"Kopierte notat til utklippstavla." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Klipte ut notat til utklippstavla.\n" +"Klipte ut notat til utklippstavla." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Kopierte notat til utval.\n" +"Kopierte notat til utval." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Klarte ikkje opna notatet." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Du har ikkje løyve til å opna denne fila." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Lagra til fil" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Skriv inn passordet for denne privat­nøkkelen:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Skriv inn passordet for korga %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Vel eit passord for korga %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Ikkje nok diskplass til lagring av korgdata" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Feil filløyve for korg" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Du må sletta nokre filer frå disken %1, slik at programmet kan lagra " +"endringane dine trygt." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Det er problem med fil­løyva for %1. Sjå til at du har skrive­tilgang " +"til fila og til mappene over." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Lagringsfeil" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Klarte ikkje laga mappe for den nye korga." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Feil ved oppretting av korg" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Klarte ikkje kopiera mal for den nye korga." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Klarte ikkje tilpassa mal for den nye korga." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Korgeigenskapar" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Namn" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Bakgrunnsbilete:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "Bakgrunns&farge:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "&Tekstfarge:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Ingen)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposisjon" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "&Kolonnar:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Flytande" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Tankekart" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Tastatursnarveg" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Få nokre tips …" + +#: basketproperties.cpp:134 +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Hugs snar­vegane dine:
    Det første valet vil gje korga " +"ein snar­veg på forma Alt + bokstav, som vil under­streka den " +"bokstaven i korg­treet.
    Viss du for eksempel vel snar­vegen Alt + T " +"til korga Tips, vert korga vist som Tips i treet. Dette " +"vil hjelpa deg å hugsa snar­vegane.

    Lokal eller global:" +"
    Med det første valet kan du visa korga mens hovud­vindauget er ope. " +"Globale snar­vegar fungerer frå alle stader, sjølv om vindauget er skjult.

    Vis eller byt til:
    Det siste valet gjer korga til " +"den gjeldande utan å opna hovud­vindauget. Dette er nyttig når du brukar " +"globale snar­vegar til å lima inn notat frå utklipps­tavla til gjeldande korg.

    " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "&Vis denne korga" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Vis denne korga (&global snarveg)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "B&yt til denne korga (global snarveg)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Viser om det finst endringar som ikkje er lagra enno." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "«Ctrl + dra»: kopier, «Shift + dra»: flytt, «Shift + Ctrl + dra»: lag lenkje." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Denne korga er låst.
    Trykk for å låsa ho opp.

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Denne korga er ikkje låst.
    Trykk for å låsa ho.

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Generelt" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Vis/skjul hovudvindauge" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Lèt deg visa hovudvindauget viss det er skjult, og skjula det viss det er " +"vist." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Lim inn innhald frå utklippstavla i korga" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Lèt deg lima inn innhaldet frå utklipps­tavla til den valde korga utan å måtta " +"opna hovud­vindauget." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Vis namn på gjeldande korg" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Lèt deg sjå namnet på den gjeldande korga utan å opna hovud­vindauget." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Lim inn utval i korg" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Lèt deg lima inn utvalet på utklipps­tavla i gjeldande korg utan å måtta opna " +"hovud­vindauget." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Lag ny korg" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Lèt deg laga ei ny korg utan å opna hovud­vindauget. Etterpå kan du bruka " +"andre globale snøgg­tastar for å leggja til notat, lima inn utklipps­tavla " +"eller lima inn utval i den nye korga." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Gå til førre korg" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "Lèt deg byta frå gjeldande til den førre korga utan å måtta opna hovud­vindauget." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Gå til neste korg" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "Lèt deg byta frå gjeldande til den neste korga utan å måtta opna hovud­vindauget." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Set inn tekstnotat" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "Legg eit tekst­notat til den gjeldande korga utan å måtta opna hovud­vindauget." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Set inn biletnotat" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "Legg eit bilet­notat til den gjeldande korga utan å måtta opna hovud­vindauget." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Set inn lenkjenotat" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Legg eit lenkje­notat til den gjeldande korga utan å måtta opna hovud­­vindauget." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Set inn fargenotat" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "Legg eit farge­notat til den gjeldande korga utan å måtta opna hovud­vindauget." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Vel farge frå skjerm" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Legg ein farge henta frå eit punkt på skjermen til den gjeldande korga utan " +"å måtta opna hovud­vindauget." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Hent skjermbilete" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Hent eit område av skjerm­biletet og legg dette i den gjeldande korga utan å " +"måtta opna hovud­vindauget." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Korger" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Skriv anten på engelsk eller på fransk." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Korgtre

    Her er oversikta over korgene dine. Du kan organisera notat " +"ved å leggja dei i forskjellige korger. Du kan gruppera dei etter emne ved å " +"leggja korger inni andre korger. Du kan sjå gjennom alle korgene ved å " +"trykkja på dei, og du kan flytta rundt på dei ved å dra dei der du vil ha " +"dei." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Korgarkiv …" + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "Skjul &vindauge" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "&HTML-nettside …" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt …" + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards …" + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "Tekst&fil …" + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Reservekopiar og gjenoppretting …" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Slett" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Merk alle notat" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "&Fjern merking" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Fjern merking frå alle notata." + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Omvend merking" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Merk notat som ikkje er merkte, og fjern merking frå dei som er det." + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Rediger …" + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "O&pna" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Opna &med …" + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Lagra til fil …" + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Grupper" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Lø&ys opp gruppe" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Flytt &øvst" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Flytt &opp" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Flytt &ned" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Flytt n&edst" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Tekst" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Lenkje" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Bilete" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Farge" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "&Program" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Hent frå &KDE-menyen …" + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "&Importer ikon …" + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Hent frå f&il …" + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "F&arge frå skjermen" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "&Skjermbilete" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "Ny &korg …" + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Ny &underkorg …" + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Ny &søskenkorg …" + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Ny" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Slett" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "&Passord …" + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "&Lås" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "F&iltrer" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrer &alle korger" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "F&jern filter" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Førre korg" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "&Neste korg" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Slå saman korg" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Utvid korg" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Set opp &globale snarvegar …" + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "&Velkommen-korger" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Tekstomforming for reintekst" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Gjer reintekstnotat om til rik tekst …" + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Låst" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Ingen notat" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n notat\n" +"%n notat" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n merkt\n" +"%n merkte" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "alle treff" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "ingen filter" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n treff\n" +"%n treff" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2 og %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Henta farge til korga %1." + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Reintekstnotata er no gjort om til riktekstnotat." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Omgjering fullført" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Det finst ingen reintekstnotat å gjera om." + +#: bnpview.cpp:1484 +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Fila «basketui.rc» finst ikkje, eller er for gammal.
    %1 kan ikkje " +"køyra utan denne fila, og vert derfor stoppa.

    Kontroller " +"installeringa av %2.

    Viss du ikkje har administratorløyve for å " +"installera programmet over heile systemet, kan du kopiera fila «basketui.rc» " +"frå installasjonsarkivet og til mappa %4.

    Som " +"ein siste utveg, viss du er sikker på at programmet er rett installert, men " +"du hadde tidlegare ei testutgåve av det, kan du prøva å fjerna fila «%5basketui.rc».

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Fann ikkje resurs" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Klarte ikkje leggja til notat" + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Henta skjermbilete til korga %1." + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Slett korg" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Berre slett den korga" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Slett notat og undernotat" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Er du sikker på at du vil sletta korga %1 og alt innhaldet?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Slett korg" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Slett korg" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "%1 inneheld desse korgene.
    Vil du òg sletta dei?
    " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Slett underkorger" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "&Slett underkorger" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Korgarkiv" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Innhaldet på utklippstavla er lagt til i korga %1." + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Utvalet er lim inn i korga %1." + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Det var ikkje lagt til noko notat." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Korga %1 er låst" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Låst)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Legg til ny merkelapp …" + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Fjern alle" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 har dessverre krasja!\n" +"\n" +"Men alt er ikkje tapt! Du kan hjelpa oss å fiksa denne feilen. Nedanfor står " +"informasjon om krasjet, som er nyttig for programutviklarane. Berre trykk " +"send for å senda denne informasjonen, eller skriv ei kort skildring (på " +"engelsk) av kva du gjorde før programmet krasja, om du har tid.\n" +"\n" +"På førehand takk!" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Informasjonen nedanfor vil hjelpa utviklarane å identifisera problemet. " +"Venlegst ikkje fjern han." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 har dessverre krasja!\n" +"\n" +"Men alt er ikkje tapt! Det finst kanskje ei programoppdatering som har retta " +"opp denne feilen. Sjå etter i programarkivet til distribusjonen din." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Feilsøkjingsvindauge" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Eksporter korg til HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "HTML-filnamn" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Filnamn:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "&Bygg inne lenkja lokalfiler" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Bygg inne &lenkja lokalfiler" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Slett &tidlegare filer i målmappa" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "Formater for &inntrykk" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Fjern filter" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filter: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "&Merkelapp: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrer alle korger." + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Utan merkelapp)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Merkelapp)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Automatisk stavekontroll" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Køyr stavekontroll …" + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Tillèt tabulatorar" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    Mappespegling er ikkje lenger mogleg (sjå basket.kde.org for meir informasjon).

    Mappa %1 er " +"derfor kopiert til korga. Du kan anten sletta denne mappa, sletta korga " +"eller bruka begge. Men merk at endringar i eine ikkje vil spegla seg i den " +"andre, då dei no er to forskjellige objekt.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Importering av mappespegel" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML-dokument" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Eksporter til HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "Eksporter til HTML. Vent litt …" + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1-filer" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "ikon" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "bilete" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "korger" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "data" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "Laga med %1 – eit KDE-verktøy for lett tilgang til all slags informasjon." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Standard)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Annan …" + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Privatnøkkel-liste" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-post" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Vel ein hemmeleg nøkkel:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Nøkkeloversikta vart uventa forkorta." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Den offentlegnøkkelen er ikkje meint for kryptering." + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Ikkje støtta algoritme" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Ugyldig passord." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Vel ikon" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Bla gjennom …" + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Alle ikon)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Nye)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Handlingar" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Program" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Einingar" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Filsystem" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Filtypar" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Ikonfiler (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Send tilbakemelding til programutviklarane om noko du liker." + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Send tilbakemelding til programutviklarane om noko du ikkje liker." + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "Send tilbakemelding til programutviklarane om ein feil i programmet." + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "Send tilbakemelding til programutviklarane med ønskje om ein ny funksjon." + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "&Send tilbakemelding til utviklarane" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Velkommen til denne testversjonen av %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Velkommen til %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Tilbakemeldingane dine er viktige for å hjelpa oss å forbetra programmet." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Kvar gong du har ei spesielt bra eller frustrerandes oppleving, kan du " +"trykkja på det tilsvarande ansiktet rett nedanfor tittel­linja for å senda ei " +"kort tilbake­melding på kva du likte eller mislikte – rett til program­" +"utviklarane." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Kvar gong du har ei spesielt bra oppleving, kan du trykkja på smileansiktet " +"rett nedanfor tittel­linja for å senda ei kort tilbake­melding rett til program­" +"utviklarane." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Kvar gong du har ei spesielt frustrerandes oppleving, kan du trykkja på det " +"sure ansiktet rett nedanfor tittel­linja for å senda ei kort tilbake­melding " +"rett til program­utviklarane." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Du gjer det same om du vil melda frå om ein feil: Berre klikk på feil­ikonet " +"øvst til høgre i vindauget, skriv inn feil­rapporten og trykk «Send»." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Kvar gong du oppdagar ein feil i programmet, kan du trykkja på øydelagt-" +"ikonet rett nedanfor tittel­linja for å senda ei kort tilbake­melding rett til " +"program­utviklarane." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Eksempel:\n" +"Eksempel:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Eg liker den flotte grafikken. Han er veldig frisk og fin." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Eg liker ikkje velkomstsida i vegvisaren. Ho er for stor, og tar for " +"lang tid å lesa." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"Programmet har ein feil i «Legg til»-knappen. Ingenting skjer når eg " +"trykkjer på han." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "Eg skulle ønskja det var mogleg å senda notata som e-post." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Hjelp til med å forbetra programmet" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "E-postadresse" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Skriv inn e-postadressa di." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Adressa vert berre brukt til å kontakta deg viss det trengst meir " +"informasjon om tilbakemeldingane dine, informasjon om korleis ein kan " +"utløysa feilane du har funne, senda feilrettingar som du kan testa og " +"liknande." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"E-postadressa er valfri. Viss du lèt feltet stå tomt, vert tilbakemeldingane " +"sende anonymt." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Send tilbakemelding til utviklarane" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Send ei tilbakemelding til programutviklarane om:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Noko du &liker" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Noko du &ikkje liker" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Ein &feil i programmet" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Ein ny funksjon du &ønskjer" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "&Vis tilbakemeldingsknappar under tittellinja" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Send tilbakemelding" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "E-postadresse …" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Skriv ei kort tilbake­melding om kva du synest om %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Skriv på engelsk." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" +"Det kan vera du kan bruka eit auto­matisk om­settings­verktøy." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"For at tilbake­meldingane skal vera mest mogleg nyttige for program­" +"utviklarane, bør du helst prøva å senda både positive og negative meldingar." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Men ikkje be om nye funksjonar. Slike føre­spurnader vert oversett." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "

    Feil ved sending av rapporten.

    Prøv på nytt seinare.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Overføringsfeil" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Tilbakemeldinga di er no sendt, og vil hjelpa oss å gjera programmet " +"betre.

    Tusen takk for at du tok deg tid til dette!

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Tilbakemelding sendt" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&Kursiv" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Halvfeit" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Alltid" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Aldri" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Når peikaren er over" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Når peikaren er utanfor" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Understrek:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Fa&rge:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Farge &med peikar over:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "&Ikonstorleik:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Ingen" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Ikonstorleik" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Dobbel ikonstorleik" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Trippel ikonstorleik" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "F&ørehandsvising:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Har du slått av førehandsvising men ser framleis bilete?" + +#: linklabel.cpp:607 +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    Dette er normalt, då det finst fleire forskjellige typar notat. Denne " +"inn­stillinga gjeld berre filer og lokal­lenkje­notat. Bileta du ser er " +"biletnotat, ikkje fil­notat. Fil­notat er generelle dokument, mens bilet­notat er " +"bilete du kan teikna på.

    Når du dreg filer til ei korg, vil %1 " +"auto­matisk finna ut kva fil­type dei er, og visa inn­haldet i filene. For eksempel " +"vert det laga bilet- og tekstnotat når du dreg bilet­filer og tekst­filer. For " +"filtypar som %2 ikkje kjenner til, vert dei vist som generelle fil­ikon med " +"berre eit ikon eller ei føre­hands­vising og eit fil­namn.

    Viss du ikkje " +"ønskjer at programmet skal laga notat avhengig av inn­haldet i filene, kan du " +"gå til «Generelt»-kategorien og fjerna krysset for «Bilete og animasjonar» " +"under overskrifta «Vis innhald av filer av følgjande typa».

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Eksempel" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimer" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Korg" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Er du sikker på at du vil avslutta %1?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Merk at du ikkje treng avslutta programmet kvar gong du loggar ut. Viss " +"du loggar ut og programmet ikkje er avslutta, vert det auto­matisk starta opp " +"att når du loggar deg inn att.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Stadfest avslutting" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Ny korg" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Bakgrunnsfarge" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "&Handter malar …" + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Éin kolonne" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "To kolonnar" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Tre kolonnar" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Flytande" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Mal:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Korger)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Legg &i:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Kva nytte har dette?" + +#: newbasketdialog.cpp:217 +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Når du lagar eit hierarki ved å leggja korger inni andre korger, kan du " +"betre organisera notata dine:

    • Grupper korger etter tema eller " +"emne.
    • Grupper korger i forskjellige mapper for forskjellige prosjekt." +"
    • Lag inn­delingar med under­korger som representerer kapittel eller " +"sider.
    • Lag grupper med korger som skal eksporterast saman (for " +"eksempel for Ã¥ senda dei som e-postvedlegg til andre).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Flytande" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Tankekart" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Bilete)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Reintekst" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Tekst" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Bilete" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animasjon" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Lyd" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Lenkje" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Program" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Farge" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Ukjend" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Rediger denne reinteksten." + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Rediger denne teksten." + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Rediger dette biletet." + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Rediger denne animasjonen." + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Rediger filnamnet til denne lyden." + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Rediger namnet på denne fila." + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Rediger denne lenkja." + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Rediger denne programstartaren." + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Rediger denne fargen." + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Rediger dette ukjente objektet." + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Opnar reintekst …" + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Opnar reintekstar …" + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Opnar reintekst med …" + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Opnar reintekstar med …" + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Opna reintekst med:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Opna reintekstar med:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Opnar tekst …" + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Opnar tekstar …" + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Opnar tekst med …" + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Opnar tekstar med …" + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Opna tekst med:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Opna tekstar med:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Storleik" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 × %2 pikslar" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Opnar bilete …" + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Opnar bilete …" + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Opnar bilete med …" + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Opnar bilete med …" + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Opna bilete med:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Opna bilete med:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Trykk for full storleik." + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Opnar animasjon …" + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Opnar animasjonar …" + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Opnar animasjon med …" + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Opnar animasjonar med …" + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Opna animasjon med:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Opna animasjonar med:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Type" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Opna denne fila." + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Opnar fil …" + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Opnar filer …" + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Opnar fil med …" + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Opnar filer med …" + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Opna fil med:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Opna filer med:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Opna denne lyden." + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Opnar lyd …" + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Opnar lydar …" + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Opnar lyd med …" + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Opnar lydar med …" + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Opna lyd med:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Opna lydar med:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Mål" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Opna denne lenkja." + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Lenkja har ikkje noko adresse som kan opnast." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Opnar lenkjemål …" + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Opnar lenkjemål …" + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Opnar lenkjemål med …" + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Opnar lenkjemål med …" + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Opna lenkjemål med:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Opna lenkjemål med:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (køyr i terminal)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Merknad" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Kommando" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Start dette programmet." + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Programstartaren inneheld ikkje nokon kommando å køyra." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Startar program …" + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Startar program …" + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Raud: %1, Grøn: %2, Blå: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "NMV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Nyanse: %1, Metting: %2, Verdi: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS-fargenamn" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Utvida CSS-fargenamn" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Er ein vevfarge" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Bilete kan for tida ikkje redigerast her. (Den neste versjonen av programmet " +"vil innehelda eit bilet­redigerings­program.)\n" +"Vil du opna biletet i eit program som kan lesa det?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Rediger biletnotat" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Det animerte biletet kan ikkje redigerast her.\n" +"Vil du opna biletet i eit program som kan lesa det?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Rediger animasjonsnotat" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Rediger fargenotat" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Denne notat­typen er ukjend, og kan ikkje redigerast her.\n" +"Men du kan likevel dra eller kopiera notatet til eit program som forstår " +"formatet." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Rediger ukjend notat" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Rediger lenkjenotat" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Auto" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Ikon:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Mål:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Tittel:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Rediger programstartarnotat" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Vel kommandoen som skal køyrast:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Gjett" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "&Kommando:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Namn:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Halvfeit" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Understrek" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Venstrejuster" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Midtstill" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Høgrejuster" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Blokkjuster" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 støttar ikkje data­typen du har komme med.
    Programmet har derfor " +"oppretta eit generelt notat, som du kan dra eller kopiera til eit program " +"som forstår det.

    Viss du ønskjer at programmet skal støtta denne typen " +"data, kan du kontakta program­utviklaren eller vitja datatype-basen for programet.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Ikkje støtta MIME-type/-typar" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Flytt her\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Kopier her\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "&Lag lenkje her\tCtrl + Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Avbryt\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importer ikon som bilete" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Vel storleiken på ikonet du vil importera som bilete:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Lagra filinnhald som notat" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Passordvern" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Ingen privatnøkkel vald." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Korg" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Eksporter" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importer" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Gå til" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Notat" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Merkelappar" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Tekstformateringslinje" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "&Filter:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt + O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Ingen vern" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+I" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "&Vern korga med passord" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+V" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "V&ern korga med privatnøkkel:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+E" + +#: settings.cpp:367 +msgid "On left" +msgstr "Til venstre" + +#: settings.cpp:368 +msgid "On right" +msgstr "Til høgre" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "Plassering av &korgtre:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Øvst" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Nedst" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Plassering av &filterlinje:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Vis resultat av globale handlingar i ballonghjelp" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Kva er globale handlingar?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Du kan setja opp globale snar­vegar til å utføra handlingar utan å visa hovud­" +"vindauget. Du kan for eksempel lima inn inn­hald frå utklipps­tavla eller " +"henta ein farge frå eit punkt på skjermen. Du kan òg bruka mus­hjulet over " +"ikonet i system­trauet for å endra den gjeldande korga, eller bruka midt­" +"knappen på ikonet for å lima inn det gjeldande utvalet." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Når du gjer dette, vil %1 visa ein liten tekst­ballong for å informera deg om " +"at handlinga er utført. Du kan slå av denne ballongen om du ønskjer." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Merk at programmet er smart nok til ikkje å visa tekst­ballongen når hovud­" +"vindauget alt er ope. Dette er fordi du då kan sjå resultatet av handlinga " +"direkte." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Systemtrauikon" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Legg i systemtrauet" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Vis &ikon for gjeldande korg i systemtrauet" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "&Skjul hovudvindauget når muspeikaren er utanfor i" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " tidels sekund" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "&Vis hovudvindauget når muspeikaren er over systemtrauikonet i" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "&Animer endringar i korger" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "V&is verktøytips i korger" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "S&tore notat" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Åtferd" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" +"&Gjer om linjer som startar med «*» eller «-» til lister i " +"teksthandsamingsverktøy." + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "&Spør før sletting av notat" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "&Eksporter merkelappar i tekstar" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Når vert dette brukt?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Tekst­­ekvivalenten vert brukt når du kopierer og lim inn eller dreg notat til " +"eit skrive­­program." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "Lèt deg lima inn merke­lappar som rein­tekst­ekvivalentar." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"For eksempel vil notat med merkelappane Hugseliste og Fullført " +"visast med teksten [ ] eller [x], som symboliserer ein tom og " +"ein avkryssa avkryssingsboks." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Grupper nye notat ved å klikka til høgre på innsetjingslinja" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Korleis gruppera nye notat?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Dette valet lèt deg ikkje berre setja inn notat ved markør­plasseringa, " +"men lèt deg òg gruppera eit nytt notat med notatet nedan­for:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Plasser peikaren mellom notata der du vil leggja til eit nytt.
    Trykk " +"til venstre for midt­merket til innsetjingslinja for å setja inn eit notat.
    Trykk til høgre for å gruppera eit notat med " +"notatet ovan­for eller nedan­for, avhengig av kor peikaren er.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Ikkje gjer noko" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Lim inn frå utklippstavle" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Set inn programnotat" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Vel farge frå skjerm" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Hent notat frå fil" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Hent frå programstartar frå KDE-menyen" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importer ikon" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift + midtklikk:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "ved markørplassering" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "&Lås automatisk passordverna korger når dei har vore lukke i" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minutt" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Br&uk GnuPG agent for korger verna med privat-/offentlegnøkkel" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Plassering av nye notat:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Ved gjeldande notat" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Storleik for &nye bilete:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&gongar" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pikslar" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Vel &direkte …" + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Vis innhald av filer av følgjande type" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "&Reintekst" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML-side" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "Bilete &og animasjonar" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Lyd" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Lydopptak frå konferanse" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Årsrapport" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Heimemappe" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Start %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Lydar" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Filer" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "&Lokale lenkjer" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "&Nettverkslenkjer" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "&Programstartarar" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Opna &tekstnotat med sjølvvald program:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Opna tekstnotat med:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Opna &biletnotat med sjølvvald program:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Opna biletnotat med:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Opna ani&masjonsnotat med sjølvvald program:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Opna animasjonsnotat med:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Opna &lydnotat med sjølvvald program:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Opna lydnotat med:" + +#: settings.cpp:873 +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Viss feltet er kryssa av, vert programmet vald nedanfor brukt til å opna " +"notat av denne typen.

    Elles vert standardprogrammet (sett opp i " +"Konqueror) brukt.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Definer programmet som skal brukast til å opna notat av denne typen, i " +"staden for å bruka standardprogrammet sett opp i Konqueror.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Korleis endra programmet brukt til å opna nettadresser?" + +#: settings.cpp:904 +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Når du opnar nett­adresser, vert desse opna i forskjellige program, " +"avhengig av inn­haldet til adressa (ei nett­side, eit bilete, eit PDF-dokument " +"eller anna), akkurat som om dei låg på maskina di.

    Slik gjer du viss " +"du vil at alle nett­adressene skal opnast i nett­lesaren din. Dette er nyttig " +"om du ikkje brukar KDE (viss du brukar GNOME eller XFCE, for eksempel).

    • Opna KDE-kontroll­senteret (viss det ikkje er tilgjengeleg, prøv Ã¥ " +"skriva «kcontrol» frÃ¥ kommando­linja).
    • GÃ¥ til «Komponentar» og sÃ¥ til " +"«Komponentveljar».
    • Vel «Nettlesar», kryss av for «i følgjande " +"nettlesar» og skriv inn kommando­namnet pÃ¥ nett­lesaren (eksempelvis «firefox» " +"eller «epiphany»).

    Når du no trykkjer på ei lenkje som startar " +"med «http://…», vert ho opna i nett­lesaren din (eksempel­vis Mozilla Firefox " +"eller Epiphany).

    Sjå den andre hjelpe­lenkja for eit meir fin­inndelt opp­" +"sett, der for eksempel berre nett­sider vert opna i nett­lesaren.

    " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Korleis endra programma brukt til å opna filer og lenkjer?" + +#: settings.cpp:923 +msgid "" +"

    Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

    This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

    • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components\" and then \"File Associations\" section;
    • In the tree, expand \"text\" and click \"html\";
    • In the " +"applications list, add your Web browser as the first entry;
    • Do the " +"same for the type \"application -> xhtml+xml\".
    " +msgstr "" +"

    Slik gjer du viss du vil bruka eit eige program kvar filtype. Dette gjeld " +"òg nett­lenkjer om du vel å alltid opna dei i ein nett­lesar (sjå den første " +"hjelpe­lenkja). Standard­innstillingane bør vera gode nok, men dette tipset er " +"nyttig viss du brukar GNOME, XFCE eller eit anna miljø enn KDE.

    Her er " +"eit eksempel på korleis du kan opna HTML-sider i nett­lesaren (og halda fram " +"med å bruka andre program for andre adresser og filer). Gjenta desse stega " +"for kvar fil­type som du vil opna i eit eige program.

    • Opna KDE-" +"kontroll­senteret (viss det ikkje er tilgjengeleg, prøv Ã¥ skriva «kcontrol» " +"frÃ¥ kommando­linja).
    • GÃ¥ til «Komponentar», og sÃ¥ til " +"«Filtilknytingar».
    • Utvid «text» og trykk pÃ¥ «html».
    • Legg nett­" +"lesaren din som første opp­føring i program­lista.
    • Gjer sÃ¥ det same " +"for typen «application / xhtml+xml».
    " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importer hierarki" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Korleis importera notat?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Behald opphavleg hierarki (alle notata i kvar si korg)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&FørstenivÃ¥korg i kvar si korg" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&Alle notat i éi korg" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importer tekstfil" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Format pÃ¥ tekstfila" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Notat skilde med ei &tom linje" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Eitt notat for &kvar linje" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Notat startar med ein &strek («-»)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Notat startar med ei st&jerne («*»)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Bruk eit anna skiljeteikn:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "A< i eitt notat" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "FrÃ¥ KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "FrÃ¥ KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "FrÃ¥ Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "FrÃ¥ Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "FrÃ¥ «%1»" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Klarte ikkje importera fila. Ho er anten ugyldig, eller sÃ¥ er ho ikkje ei " +"TuxCards-fil." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Ugyldig filformat" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Minst eitt notat er kryptert. Importeringa støttar ikkje krypterte notat " +"enno. Fjern krypteringa med TuxCard og prøv Ã¥ importera fila pÃ¥ nytt." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Krypterte notat ikkje støtta enno" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
    The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
    " +msgstr "" +"Kryptert notat.
    Importeringa støttar ikkje " +"krypterte notat enno. Fjern krypteringa med TuxCard og prøv å importera fila " +"på nytt.
    " + +#: systemtray.cpp:140 +msgid "" +"

    Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

    " +msgstr "" +"

    Viss du lukkar hovudvindauget, vil %1 halda fram i systemtrauet. Vel " +"Avslutt frå Korg-menyen for å avslutta programmet.

    " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Legg i systemtrauet" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Limte inn utval til korga %1." + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimer" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Gjenopprett" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Låst)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Hugseliste" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Ikkje fullført" + +#: tag.cpp:544 +msgid "Done" +msgstr "Fullført" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Framgang" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Prioritet" + +#: tag.cpp:599 +msgid "Low" +msgstr "Låg" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Middels" + +#: tag.cpp:600 +msgid "High" +msgstr "Høg" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Karakter" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Dårleg" + +#: tag.cpp:601 +msgid "Good" +msgstr "God" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Fantastisk" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Uthev" + +#: tag.cpp:667 +msgid "Important" +msgstr "Viktig" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Veldig viktig" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Idé" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "Tittel" + +#: tag.cpp:669 +msgid "Code" +msgstr "Programkode" + +#: tag.cpp:669 +msgid "Work" +msgstr "Arbeid" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "A." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Personleg" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Morosamt" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Tilpass merkelappar" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "Ny &merkelapp" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Ny &tilstand" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Flytt opp («Ctrl + Shift + Pil opp»)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Flytt ned («Ctrl + Shift + Pil ned»)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Merkelapp" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Fjern" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Snarveg:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "A&rva av søskennotat" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Tilstand" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "Na&mn:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "&Fjern" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblem:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Bakgrunn:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Strek gjennom" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Tekst:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "&Farge:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "S&krift:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "St&orleik:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Tekstek&vivalent:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Viss feltet inneheld tekst, kan du lima inn merke­lappen eller til­standen som " +"rein­tekst." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "På &kvar linje" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Kva tyder dette?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Når eit notat har fleire linjer, kan du velja å eksportera merke­lappen eller " +"tilstanden på anten første eller på alle linjene til notatet." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"I eksempelet ovanfor vert merkelappen til det øvste notatet berre eksportert på " +"første linje, mens merkelappen til det nedste notatet vert eksportert på alle " +"linjene." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "Viss du slettar merkelappen, vert han fjerna frå alle notata som har han." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Stadfest fjerning av merkelapp" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Fjern merkelapp" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "Viss du slettar tilstanden, vert han fjerna frå alle notata som har han." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Stadfest fjerning av tilstand" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Slett tilstand" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr " …" + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 × 16 pikslar" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 × 22 pikslar" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 × 32 pikslar" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 × 48 pikslar" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 × 64 pikslar" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 × 128 pikslar" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Endra storleiken på vindauget for å velja biletstorleik, og\n" +"lukk vindauget eller trykk «Escape» for å bruka endringane." + +#~ msgid "&Export to HTML..." +#~ msgstr "Eksporter til &HTML …" + +#~ msgid "Notes matching the filter "%1":" +#~ msgstr "Notat i samsvar med filteret «%1»:" + +#~ msgid "A set of baskets to keep a full range of data on hand." +#~ msgstr "Ei samling korger for lett til­gang til all slags informasjon." + +#~ msgid "Invalid recipient encountered" +#~ msgstr "Ugyldig mottakar" + +#~ msgid "Examples:" +#~ msgstr "Eksempel:" + +#~ msgid "I like..." +#~ msgstr "Eg liker …" + +#~ msgid "" +#~ "_: I like...\n" +#~ "the nice new artwork." +#~ msgstr "den flotte grafikken." + +#~ msgid "Very refreshing." +#~ msgstr "Han er veldig frisk og fin." + +#~ msgid "I dislike..." +#~ msgstr "Eg liker ikkje …" + +#~ msgid "Too time consuming." +#~ msgstr "Ho er for stor og tar for lang tid å lesa." + +#~ msgid "I found a bug..." +#~ msgstr "Eg fann ein feil …" + +#~ msgid "I desire a feature..." +#~ msgstr "Eg ønskjer ein ny funksjon …" + +#~ msgid "Hide &Toolbar" +#~ msgstr "Gøym &verktøylinje" + +#~ msgid "&No password" +#~ msgstr "&Ikkje bruk passord" + +#~ msgid "New notes &place:" +#~ msgstr "&Plasser nye notat:" + +#~ msgid "Customize look of file, sound, link and launcher notes:" +#~ msgstr "Tilpass vising av fil-, lyd-, lenkje- og startarnotat:" + +#~ msgid "" +#~ "This page groups non-standard options that, once learned,\n" +#~ "can be very powerful and time saving in the context of %1:" +#~ msgstr "" +#~ "Denne sida inneheld ymse ikkje-standard val som, når du har lært å bruka " +#~ "dei, kan gjere bruken av %1 mykje meir effektiv:" + +#~ msgid "Only english and french languages are accepted." +#~ msgstr "Skriv berre på engelsk eller fransk." + +#~ msgid "I Like..." +#~ msgstr "Eg liker …" + +#~ msgid "I Do not Like..." +#~ msgstr "Eg liker ikkje …" + +#~ msgid "I Found a Bug..." +#~ msgstr "Eg fann ein feil …" + +#~ msgid "Configure..." +#~ msgstr "Set opp …" + +#~ msgid "What's &This?" +#~ msgstr "Kva er de&tte?" + +#~ msgid "&Change or Remove Email Address..." +#~ msgstr "&Byt eller fjern e-postadresse …" + +#~ msgid "&Do not Help Anymore" +#~ msgstr "&Ikkje hjelp til meir" + +#~ msgid "" +#~ "Are you sure you do not want to participate anymore in the application " +#~ "enhancing program?" +#~ msgstr "" +#~ "Er du sikker på at du ikkje lenger vil hjelpa til å forbetra programmet?" + +#~ msgid "Do not Help Anymore" +#~ msgstr "Ikkje hjelp til meir" + +#~ msgid "I do not like..." +#~ msgstr "Eg liker ikkje …" + +#~ msgid "" +#~ "You can change or remove your email address whenever you want. For that, " +#~ "use the little arrow icon at the top-right corner of a window." +#~ msgstr "" +#~ "Du kan endra eller fjerna e-postadressa når som helst seinare. Berre " +#~ "trykk på det vesle pilikonet øvst til høgre i eitt av programvindauga." + +#~ msgid "Your email address (keep empty to post comments anonymously):" +#~ msgstr "E-postadressa di (la feltet stå tomt for å vera anonym):" + +#~ msgid "Please briefly describe what you like." +#~ msgstr "Skriv ei kort tilbakemelding på kva du liker." + +#~ msgid "Please briefly describe what you do not like." +#~ msgstr "Skriv ei kort tilbakemelding på kva du misliker." + +#~ msgid "Please briefly describe the bug you encountered." +#~ msgstr "Skriv ei kort skildring av feilen du har funne." + +#~ msgid "Send" +#~ msgstr "Send" + +#~ msgid "Only english language is accepted." +#~ msgstr "Skriv berre på engelsk." + +#~ msgid "" +#~ "Note that to improve this application, it's important to tell us the " +#~ "things you like as much as the things you dislike." +#~ msgstr "" +#~ "Hugs at det er like viktig for oss å få veta kva du liker med programmet " +#~ "som kva du ikkje liker." + diff --git a/po/pl_PL.po b/po/pl_PL.po new file mode 100644 index 0000000..679b29f --- /dev/null +++ b/po/pl_PL.po @@ -0,0 +1,3494 @@ +# translation of pl_PL.po to Polish +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# +# Pawe�Kot , 2005. +# Mikolaj Machowski , 2006. +msgid "" +msgstr "" +"Project-Id-Version: pl_PL\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2006-10-05 22:58+0200\n" +"Last-Translator: Mikolaj Machowski \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Mikołaj Machowski" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "mikmach@wp.pl" + +#: aboutdata.cpp:27 +#, fuzzy +msgid "" +"

    Taking care of your ideas.

    A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

    " +msgstr "" +"

    Opieka nad twoimi pomysłami.

    Program do robienia notatek, " +"sprawiający że łatwo jest zapisać to co właśnie przyszło do głowy a później " +"to odnaleźć. Organizowanie notatek nigdy nie było takie proste.

    " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Koszyk notatek" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autor, opiekun" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "szyfrowanie, integracja z Kontaktem, import z KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"blokowanie koszyków, ikona statusu zapisu, kopiuj/wklej HTML, dymek z nazwą " +"koszyka, upuszczanie na nazwę koszyka" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Ikona" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +#, fuzzy +msgid "Basket Archive Error" +msgstr "Błąd zapisu" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" + +#: backup.cpp:56 +#, fuzzy +msgid "Backup & Restore" +msgstr "&Odtwórz" + +#: backup.cpp:65 +#, fuzzy +msgid "Save Folder" +msgstr "Zapisz do pliku" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
    %1" +msgstr "" + +#: backup.cpp:69 +#, fuzzy +msgid "&Move to Another Folder..." +msgstr "&Zapisz do pliku..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "" + +#: backup.cpp:71 +#, fuzzy +msgid "Why to do that?" +msgstr "Co to oznacza?" + +#: backup.cpp:72 +msgid "" +"

    You can move the folder where %1 store your baskets to:

    • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
    • Store your " +"baskets on a server to share them between two computers.
      In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
      Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

    Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

    " +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +#, fuzzy +msgid "All Files" +msgstr "&Pliki" + +#: backup.cpp:179 backup.cpp:200 +#, fuzzy +msgid "Backup Baskets" +msgstr "Koszyki" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "" + +#: backup.cpp:200 +#, fuzzy +msgid "Backing up baskets. Please wait..." +msgstr "&Eksportuj do HTML..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" + +#: backup.cpp:254 +#, fuzzy +msgid "Restoring %1. Please wait..." +msgstr "&Eksportuj do HTML..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" + +#: backup.cpp:257 +#, fuzzy +msgid "Restore Baskets" +msgstr "Usuń koszyk" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +#, fuzzy +msgid "Restore Error" +msgstr "&Odtwórz" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +#, fuzzy +msgid "Restart" +msgstr "&Odtwórz" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Nowa notatka nie pasuje do filtra i została ukryta." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Nowa notatka nie pasuje do filtra i została ukryta." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Niektóre nowe notatki nie pasują do filtra i zostały ukryte." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Nowe notatki nie pasują do filtra i zostały ukryte." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Grupuj" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Wstaw" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Upuszczone do koszyka %1" + +#: basket.cpp:2338 +#, fuzzy +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Ta wiadomość nie powinna się nigdy pojawić. Jeśli ją widzisz program ma " +"błąd! Proszę zgłosić go do opiekuna." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Wstaw notatkę\n" +"Kliknij prawym przyciskiem myszy by poznać więcej możliwości" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Zmień rozmiar tych kolumn" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Zmień rozmiar grupy" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Zmień rozmiar notatki" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Wybierz lub przenieć tę notatkę" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Wybierz lub przenieć tę grupę" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Dodaj lub usuń znaczniki z tej notatki" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Dodane znaczniki: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Rozwiń grupę" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Zwiń grupę" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Grupuj notatkę z notatką poniżej\n" +"Kliknij prawym przyciskiem myszy by poznać więcej możliwości" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Grupuj notatkę z notatką powyżej\n" +"Kliknij prawym przyciskiem myszy by poznać więcej możliwości" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Dodano" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Ostania zmiana" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Kliknij po prawej by grupować zamiast wstawić" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Kliknij po lewej by wstawić zamiast grupować" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Odblokuj" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Koszyk chroniony hasłem." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Przyciśnij Odblokuj by uzyskać dostęp." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
    this version of %1." +msgstr "Szyfrowanie nie jest wspierane
    w tej wersji %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
    locking duration in " +"the application settings." +msgstr "" +"Aby koszyki pozostawały odblokowane, zmień czas
    automatycznego " +"blokowania w ustawieniach programu." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Wczytywanie..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Własne ustawienia..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtruj wg tego znacznika" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtruj wg &Stanu" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Znaczniki" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Czy naprawdę chcesz usunąć notatkę?\n" +"Czy naprawdę chcesz usunąć %n notatki\n" +"Czy naprawdę chcesz usunąć %n notatek" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Usuń notatkę\n" +"Usuń %n notatki\n" +"Usuń %n notatek" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Skopiowano notatkę do schowka.\n" +"Skopiowano %n notatki do schowka.\n" +"Skopiowano %n notatek do schowka." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Wycięto notatkę do schowka.\n" +"Wycięto %n notatki do schowka.\n" +"Wycięto %n notatek do schowka." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Skopiowano notatkę do zaznaczenia.\n" +"Skopiowano %n notatki do zaznaczenia.\n" +"Skopiowano %n notatek do zaznaczenia." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Nie można otworzyć tej notatki." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Nie masz uprawnień by otworzyć ten plik." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Zapisz do pliku" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Proszę podać hasło dla następującego klucza prywatnego:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Proszę podać hasło dla koszyka %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Proszę przydzielić hasło dla koszyka %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Brak miejsca na dysku by zapisać dane Koszyka" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Złe prawa do pliku koszyka" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Proszę usunąć pliki na dysku %1 by pozwolić programowi na bezpieczne " +"zapisanie zmian." + +#: basket.cpp:5334 +#, fuzzy +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"Nieprawidłowe prawa dostępu dla pliku %1. Proszę sprawdzić czy masz " +"prawa zapisu do pliku i katalogów." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Błąd zapisu" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Niestety nie powiodło się utworzenie katalogu dla nowego koszyka." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Nie można utworzyć koszyka" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Niestety, ale nie można skopiować szablonu dla nowego koszyka." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Niestety, ale nie można zmodyfikować szablonu dla nowego koszyka." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Właściwości koszyka" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Nazwa" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Obrazek tła:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "&Kolor tła:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Kolor &tekstu:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Brak)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Dyspozycja" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Kol&umny:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Swobodny" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mapa umysłu" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "Sk&rót klawiatury" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Trochę wskazówek..." + +#: basketproperties.cpp:134 +#, fuzzy +msgid "" +"

    Easily Remember your Shortcuts:
    With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
    For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

    Local " +"vs Global:
    The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

    Show vs Switch:
    The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

    " +msgstr "" +"

    Åatwe zapamiÄ™tywanie skrótów:
    Przy pomocy pierwszej " +"opcji przypisanie koszykowi skrótu w formie Alt+Litera " +"podkreśli tę literę w drzewie koszyków.
    Na przykład jeśli przypiszesz " +"skrót Alt+W do koszyka nazwanego Wskazówki koszyk zostanie " +"pokazany jako Wskazówki w drzewie. Pomaga wizualizować skróty " +"by je łatwiej zapamiętać.

    Lokalne czy globalne:" +"
    Pierwsza opcja pozwala na pokazanie koszyka kiedy główne okno jest " +"aktywne. Skróty globalne działają wszędzie, nawet jeśli okno jest ukryte.

    Pokaż czy Przełącz:
    Ostatnia opcja pozwala na " +"uczynienie koszyka aktywnym bez otwierania głównego okna. Pożyteczne w " +"połączeniu z konfiguracją skrótów globalnych np. pozwalających na wklejenie " +"zawartości schowka lub zaznaczenia do bieżącego koszyka z każdego programu." + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "&Pokaż ten koszyk" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Pokaż ten koszyk (skrót &globalny)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "Przełącz &do tego koszyka (skrót globalny)" + +#: basketstatusbar.cpp:100 +#, fuzzy +msgid "Shows if there are changes that have not yet been saved." +msgstr "Pokazuje czy są niezapisane zmiany." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+drop: kopiuj, Shift+drop: przenieś, Shift+Ctrl+drop: linkuj." + +#: basketstatusbar.cpp:148 +msgid "

    This basket is locked.
    Click to unlock it.

    " +msgstr "

    Ten koszyk jest zablokowany.
    Kliknij, aby odblokować

    " + +#: basketstatusbar.cpp:153 +msgid "

    This basket is unlocked.
    Click to lock it.

    " +msgstr "

    Ten koszyk jest odblokowany.
    Kliknij, aby zablokować

    " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Ogólne" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Pokaż/ukryj główne okno" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "Pokazuje główne okno jeśli jest ukryte i ukrywa jeśli je widać." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Wkleja zawartość schowka do bieżącego koszyka" + +#: bnpview.cpp:237 +#, fuzzy +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Wkleja zawartość schowka do bieżącego koszyka bez potrzeby otwierania " +"głównego okna." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Pokaż nazwę bieżącego koszyka" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"Dzięki temu będzie można poznać nazwę bieżącego koszyka bez potrzeby " +"otwierania głównego okna." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Wklej zaznaczenie do bieżącego koszyka" + +#: bnpview.cpp:245 +#, fuzzy +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Pozwala na wklejenie zawartość zaznaczenia do bieżącego koszyka bez potrzeby " +"otwierania głównego okna." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Utwórz nowy koszyk" + +#: bnpview.cpp:249 +#, fuzzy +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Pozwala na utworzenie nowego koszyka bez potrzeby otwierania głównego okna " +"(można użyć skrótów globalnych by dodać notatkę, wkleić zawartość schowka " +"lub zaznaczenia do nowego koszyka)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Idź do poprzedniego koszyka" + +#: bnpview.cpp:253 +#, fuzzy +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Pozwala na zmianę bieżącego koszyka na poprzedni bez potrzeby otwierania " +"nowego okna." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Idź do nastęnego koszyka" + +#: bnpview.cpp:257 +#, fuzzy +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Pozwala na zmianę bieżącego koszyka na następny bez potrzeby otwierania " +"nowego okna." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Wstaw notatkę tekstową" + +#: bnpview.cpp:265 +#, fuzzy +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "" +"Dodaj notatkę tekstową do bieżącego koszyka bez potrzeby otwierania głównego " +"okna." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Wstaw obrazek" + +#: bnpview.cpp:269 +#, fuzzy +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "" +"Dodaj obrazek do bieżącego koszyka bez potrzeby otwierania głównego okna." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Wstaw odnośnik" + +#: bnpview.cpp:273 +#, fuzzy +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "" +"Dodaj odnośnik do bieżącego koszyka bez potrzeby otwierania głównego okna." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Wstaw kolor" + +#: bnpview.cpp:277 +#, fuzzy +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Dodaj kolor do bieżącego koszyka bez potrzeby otwierania głównego okna." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Pobierz kolor z ekranu" + +#: bnpview.cpp:281 +#, fuzzy +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Dodaj kolor pobrany z jednego piksela ekranu do bieżącego koszyka bez " +"potrzeby otwierania głównego okna." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Pobierz region ekranu" + +#: bnpview.cpp:286 +#, fuzzy +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Dodaj region ekranu jako obrazek do bieżącego koszyka bez potrzeby " +"otwierania głównego okna." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Koszyki" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Proszę pisać po angielsku lub francusku." + +#: bnpview.cpp:355 +msgid "" +"

    Basket Tree

    Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

    Drzewo koszyków

    Widać tutaj listÄ™ koszyków. Możesz organizować dane " +"przez umieszczanie ich w różnych koszykach. Możez grupować koszyki wg " +"przedmiotu poprzez tworzenie nowych koszyków w innych. PrzeglÄ…da siÄ™ je " +"przez klikanie na koszyk aby otworzyć lub reorganizować metodÄ… przyciÄ…gnij i " +"upuść." + +#: bnpview.cpp:366 bnpview.cpp:368 +#, fuzzy +msgid "&Basket Archive..." +msgstr "&Nowy koszyk..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Ukryj okno" + +#: bnpview.cpp:375 +#, fuzzy +msgid "&HTML Web Page..." +msgstr "Strona &HTML" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "Żółte k&arteczki" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +#, fuzzy +msgid "Text &File..." +msgstr "&Zapisz do pliku..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&UsuÅ„" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Zaznacz wszystkie notatki" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "O&dznacz wszystkie" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Udznacz wszystkie zaznaczone pozycje" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "Od&wróć zaznaczenie" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Odwróć zaznaczenie wybranych pozycji" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Edytuj..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Otwórz" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Otwórz &z..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Zapisz do pliku..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Grupuj" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "&Rozgrupuj" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "PrzesuÅ„ na &wierzch" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "PrzesuÅ„ do &góry" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Prze&suÅ„ w dół" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "PrzesuÅ„ pod s&pód" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Tekst" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "Od&noÅ›nik" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Obrazek" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Kolor" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "Uruch&amianie programów" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importuj program uruchamiajÄ…cy z &KMenu..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&portuj ikonÄ™..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Wczyta&j z pliku..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "K&olor z ekranu" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Pobierz ®ion ekranu" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Nowy koszyk..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Nowy &pod-koszyk..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Nowy koszyk &bliźniaczy..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Nowy" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&UsuÅ„" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "HasÅ‚&o..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "Zab&lokuj" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtr" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtruj wszystkie &koszyki" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "U&suÅ„ filtr" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Poprzedni koszyk" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "&NastÄ™pny koszyk" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&ZwiÅ„ koszyk" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&RozwiÅ„ koszyk" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Konfiguruj skróŧy &globalne..." + +#: bnpview.cpp:583 +#, fuzzy +msgid "&Welcome Baskets" +msgstr "&UsuÅ„ koszyk" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Konwersja notatek tekstowych" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Konwersja zwykÅ‚ych notatek tekstowych do tekstu wzbogaconego..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Zablokowany" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Brak notatek" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"1 notatka \n" +"%n notatki\n" +"%n notatek" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"1 zaznaczona\n" +"%n zaznaczone\n" +"%n zaznaczonych" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "wszystkie dopasowania" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "brak filtra" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"1 dopasowanie\n" +"%n dopasowania\n" +"%n dopasowaÅ„" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Pobrano kolor do koszyka %1" + +#: bnpview.cpp:1457 +#, fuzzy +msgid "The plain text notes have been converted to rich text." +msgstr "ZwykÅ‚e notatki tekstowe zostaÅ‚y zamienione na tekst wzbogacony." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "ZakoÅ„czono konwersjÄ™" + +#: bnpview.cpp:1459 +#, fuzzy +msgid "There are no plain text notes to convert." +msgstr "Nie ma zwykÅ‚ych notatek tekstowych do konwersji." + +#: bnpview.cpp:1484 +#, fuzzy +msgid "" +"

    The file basketui.rc seems to not exist or is too old.
    %1 cannot " +"run without it and will stop.

    Please check your installation of %2." +"

    If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

    As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

    " +msgstr "" +"

    Plik basketui.rg nie istnieje lub jest zbyt stary.
    %1 nie może bez " +"niego działać i zakończy działanie.

    Proszę sprawdzić instalację %2." +"

    Jeśli nie masz dostępu administratora do programów systemowych możesz " +"skopiować plik basketui.rg z archiwum instalacyjnego do katalogu %4.

    Jeśli to nie pomoże i program został na pewno " +"poprawnie zainstalowany ale masz wersję testową spróbuj usunąć plik %" +"5basketui.rg

    " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Nie znaleziono zasobu" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Nie można dodać notatki." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Pobrano region ekranu do koszyka %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Usuń koszyk" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Usuń tylko ten koszyk" + +#: bnpview.cpp:1641 +#, fuzzy +msgid "Delete Note & Children" +msgstr "Usuń razem z dziećmi" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "Czy na pewno chcesz usunąć koszyk %1 i jego zawartość?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Usuń koszyk" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Usuń koszyk" + +#: bnpview.cpp:1670 +#, fuzzy +msgid "" +"%1 have the following children baskets.
    Do you want to remove " +"them too?
    " +msgstr "" +"%1 ma następujące koszyki potomne.
    Czy je też chcesz usunąć?" + +#: bnpview.cpp:1673 +#, fuzzy +msgid "Remove Children Baskets" +msgstr "Usuń koszyki potomne" + +#: bnpview.cpp:1675 +#, fuzzy +msgid "&Remove Children Baskets" +msgstr "&Usuń koszyki potomne" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +#, fuzzy +msgid "Basket Archives" +msgstr "Właściwości koszyka" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Zawartość schowka wklejono do koszyka %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Zaznaczenie wklejono do koszyka %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Nie dodano notatki." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Koszyk %1 jest zablokowany" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Zablokowany)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Dodaj nowy znacznik..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Usuń wszystko" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 padł! Przykro nam z tego powodu.\n" +"\n" +"Jednak nie wszystko stracone! Możesz pomóc nam poprawić ten błąd. Informacja " +"o padzie znajduje się poniżej, po prostu kliknij Wyślij lub jeśli masz " +"trochę czasu krótko opisz jak to się stało.\n" +"\n" +"Bardzo dziękujemy." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Informacja poniżej pomoże deweloperom rozwiązać problem, proszę jej nie " +"zmieniać." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 padł! Przykro nam z tego powodu.\n" +"\n" +"Jednak nie wszystko stracone! Być może dostępne jest uaktualnienie programu, " +"które nie zawiera tego błędu. Proszę sprawdzić repozytorium twojej " +"dystrybucji." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Okno debugowania" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Eksportuj koszyk do HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Nazwa pliku strony HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Nazwa pliku:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "&Dołącz zlinkowane pliki lokalne" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Dołącz z&linkowane katalogi lokalne" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Usuń &poprzednie pliki w katalogu docelowym" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&mat wrażenia" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Wyczyść filtr" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtr: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "Zn&acznik: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtruj wszystkie koszyki" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Brak znaczników)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Znaczniki)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Automatyczne sprawdzanie pisowni" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Sprawdzanie pisowni..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Dopuść tabulację" + +#: formatimporter.cpp:132 +msgid "" +"

    Folder mirroring is not possible anymore (see basket.kde.org for more information).

    The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

    " +msgstr "" +"

    Odzwierciedlanie katalogów nie jest dłużej wspierane (więcej informacji " +"na basket.kde.org).

    Katalog %" +"1 został skopiowany na potrzeby koszyka. Możesz usunąć ten katalog lub " +"koszyk, albo używać obu. Ale pamiętaj, że modyfikacja jednego z nich nie " +"zmieni drugiego - są to byty osobne.

    " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Import odzwierciedlania katalogów" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +#, fuzzy +msgid "Export to HTML" +msgstr "&Eksportuj do HTML..." + +#: htmlexporter.cpp:79 +#, fuzzy +msgid "Exporting to HTML. Please wait..." +msgstr "&Eksportuj do HTML..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_pliki" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "ikony" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "obrazki" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +#, fuzzy +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "obrazki" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "dane" + +#: htmlexporter.cpp:319 +#, fuzzy +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"Wykonane przez %1, narzędzie KDE do notowania i przechowywania różnego typu " +"danych pod ręką." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Domyślne)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Inne..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Lista kluczy prywatnych" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-mail" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Wybierz tajny klucz:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Lista kluczy nagle ucięta." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Ten klucz publiczny nie jest przeznaczony do szyfrowania" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Niewspierany algorytm" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Złe hasło." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Wybierz ikonę" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Przeglądaj..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Wszystkie ikony)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Ostatnie)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Działania" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Programy" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Urządzenia" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "System plików" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Typy plików" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Pliki ikon (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Wyślij deweloperom programu komentarz o tym co ci się podoba" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Wyślij deweloperom programu komentarz o tym co ci się nie podoba" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "Wyślij deweloperom programu komentarz o tym co nie działa" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" +"Wyślij deweloperom programu komentarz o tym co powinno w programie się " +"pojawić" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "&Wyślij komentarz do deweloperów" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Witamy w wersji testowej %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Witamy w %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Twoje komentarze co należy poprawić są dla nas bardzo pomocne." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Za każdym razem kiedy coś ci się spodobało, lub odwrotnie - kiedy coś cię " +"zdenerwowało kliknij odpowiednią twarzyczkę poniżej paska tytułu, krótko " +"opisz co ci się podoba i wciśnij Wyślij." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Za każdym razem kiedy coś ci się spodobało kliknij uśmiechniętą twarzyczkę " +"poniżej paska tytułu, krótko opisz co ci się podoba i wciśnij Wyślij." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Za każdym razem kiedy coś ci się nie spodobało kliknij skwaszoną twarzyczkę " +"poniżej paska tytułu, krótko opisz co ci się podoba i wciśnij Wyślij." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Wykonaj podobną akcję by szybko zgłosić błąd: po prostu kliknij ikonę " +"złamanego przedmiotu w prawym górnym rogu okna, opisz błąd i kliknij Wyślij." + +#: likeback.cpp:457 +#, fuzzy +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Za każdym razem kiedy natkniesz się na błąd kliknij ikonę złamanego " +"przedmiotu poniżej belki tytułu, króŧko opisz błąd i kliknij Wyślij." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Przykład:\n" +"%n przykłady:\n" +"%n przykładów:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Lubię nową szatę graficzną. Odświeżająca." + +#: likeback.cpp:469 +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "Nie lubię ekranu powitalnego tego asystenta. Zbyt czasochłonny." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"Program nie zachowuje się prawidłowo kiedy kliknie się przycisk " +"Dodaj. Nic się nie dzieje." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Chciałbym nową opcję pozwalającą na wysyłanie pracy przez e-mail." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Pomóż udoskonalić Program" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Adres e-mail" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Proszę podać adres e-mail." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Adres zostanie użyty tylko wtedy kiedy będziemy potrzebować więcej " +"informacji o twoich komentarzach, zapytać się jak zreprodukować błąd, wysłać " +"poprawki do testowania itd." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"Adres e-mail jest opcjonalny. Jeśli go nie podasz komentarze zostaną wysłane " +"anonimowo." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Wyślij komentarz do Deweloperów" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Wyślij deweloperom programu komentarz o:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Czymś co &lubisz" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Czymś czego &nie lubisz" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Nieprawidłowym &zachowaniu programu" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Nowej &opcji jakiej potrzebujesz" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Pokaż przyciski komentarz poniżej paska &tytułu okna" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Wyślij komentarz" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "Adres &e-mail..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Proszę podać króŧki opis twojej opinii o %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Proszę pisać po angielsku." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Możesz użyć translatora na WWW." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Aby komentarze były bardziej użyteczne spróbuj wysłać tę samą ilość " +"pozytywnych i negatywnych komentarzy." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Nie proś o nowe rzeczy: twoje prośby będą ignorowane." + +#: likeback.cpp:839 +msgid "

    Error while trying to send the report.

    Please retry later.

    " +msgstr "" +"

    Błąd w czasie wysyłania raportu.

    Proszę spróbować później.

    " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "BÅ‚Ä…d transportu" + +#: likeback.cpp:843 +msgid "" +"

    Your comment has been sent successfully. It will help improve the " +"application.

    Thanks for your time.

    " +msgstr "" +"

    Twój komentarz został wysłany. Pomoże to w rozwoju programu.

    " +"

    Dziękujemy za poświęcony czas.

    " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Komentarz wysłany" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&Kursywa" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "Pogru&bienie" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Zawsze" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Nigdy" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Przy aktywacji myszą" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Kiedy mysz jest poza" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "&Podkreślenie:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Kolo&r:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Kolor w czasie aktywacji &myszą:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Rozmiar &ikony:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Brak" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Rozmiar ikony" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Podwójny rozmiar ikony" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Potrójny rozmiar ikony" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Podgląd:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Wyłączyłeś podgląd ale cały czas widzisz obrazki?" + +#: linklabel.cpp:607 +#, fuzzy +msgid "" +"

    This is normal because there are several type of notes.
    This setting " +"only applies to file and local link notes.
    The images you see are image " +"notes, not file notes.
    File notes are generic documents, whereas image " +"notes are pictures you can draw in.

    When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
    For instance, " +"when dropping image or text files, image and text notes are created for them." +"
    For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

    If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

    " +msgstr "" +"

    Jest to normalne ponieważ istnieje kilka typów notatek.
    To ustawienie " +"stosuje się tylko do plików i linków lokalnych.
    Obrazki jakie widzisz to " +"notatki obrazkowe, nie notatki plikowe.
    Notatki plikowe są zwykłymi " +"dokumentami, podczas gdy notatki obrazkowe to obrazki na których możesz " +"rysować.

    Upuszczając pliki do koszyków, %1 wykrywa ich typ i pokazuje " +"zawartość plików.
    Na przykład, kiedy upuścisz pliki obrazkowe lub " +"tekstowe zostaną utworzone notatki obrazkowe i tekstowe.
    Dla typów plików " +"nieznanych dla %2, zostaną pokazane notatki plikowe ogólnego typu tylko z " +"ikoną lub podglądem pliku i nazwą pliku.

    Jeśli nie chcesz aby program " +"tworzył notatki na podstawie zawartości upuszczanych plików przejdź do " +"strony \"Ogólne\" i odznacz opcję \"Obrazki lub animacje\" w grupie \"Pokaż " +"zawartość dodawanych plików dla następujących typów plików\".

    " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Przykład" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimalizuj" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Koszyk" + +#: mainwindow.cpp:310 +msgid "

    Do you really want to quit %1?

    " +msgstr "

    Czy na pewno chcesz zamknąć %1?

    " + +#: mainwindow.cpp:312 +msgid "" +"

    Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

    " +msgstr "" +"

    Pamiętaj, że nie musisz opuszczać programu zanim zakończysz sesję KDE. " +"Jeśli zakończysz sesję a program cały czas działa, program zostanie " +"uruchomiony przy następnym zalogowaniu.

    " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Potwierdź zako�zenie" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Nowy koszyk" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Kolor tła" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "&Zarządzaj szablonami..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Jedna kolumna" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Dwie kolumny" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Trzy kolumny" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Swobodny" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "&Szablon:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Koszyki)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Utwo&rzony w:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Do czego to służy?" + +#: newbasketdialog.cpp:217 +#, fuzzy +msgid "" +"

    Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

    • Grouping baskets by themes or topics;" +"
    • Grouping baskets in folders for different projects;
    • Making " +"sections with sub-baskets representing chapters or pages;
    • Making a " +"group of baskets to export together (to eg. email them to people).
    " +msgstr "" +"

    Tworzenie koszyków wewnątrz innych koszyków pozwala utworzyć hierarchię " +"dla lepszej organizacji np.:

    • grupowanie koszyków tematami;
    • " +"
    • grupowanie koszyków w katalogach dla różnych projektów;
    • " +"
    • robienie sekcji pod-koszykami reprezentujÄ…cymi rozdziaÅ‚y lub strony;
    • tworzenie grup koszyków by je razem wyeksportować (np. wysÅ‚ać e-" +"mailem).
    " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Swobodny" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mapa umysłu" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Obrazek)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Tekst zwykły" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Tekst" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Obrazek" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animacja" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Dźwi�" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Odno�ik" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Uruchamianie programu" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Kolor" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Nieznany" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Zmień tekst" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Zmień tekst" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Zmień obrazek" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Zmień animację" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Zmień nazwę pliku dźwiękowego" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Zmien nazwę pliku" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Zmień odnośnik" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Zmień to uruchamianie programu" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Zmień kolor" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Zmień ten nieznany obiekt" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Otwieram zwykły tekst..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Otwieram zwykłe teksty..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Otwieram zwykły tekst w..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Otwieram zwykłe teksty w..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Otwórz zwykły tekst w:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Otwórz zwykłe teksty w:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Otwieram tekst..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Otwieram teksty..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Otwieram tekst w..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Otwieram teksty w..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Otwórz tekst w:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Otwórz teksty w:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Wielkość" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 na %2 piksele" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Otwieram obrazek..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Otwieram obrazki..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Otwieram obrazek w..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Otwieram obrazki w..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Otwórz obrazek w:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Otwórz obrazki w:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Kliknij by zobaczyć w skali 1:1" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Otwieram animację..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Otwieram animacje..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Otwieram animację w..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Otwieram animacje w..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Otwórz animację w:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Otwórz animacje w:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Typ" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Otwórz ten plik" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Otwieram plik..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Otwieram pliki..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Otwieram plik w..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Otwieram pliki w..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Otwórz plik w:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Otwórz pliki w:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Otwórz plik dźwiękowy" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Otwieram plik dźwiękowy..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Otwieram pliki dźwiękowe..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Otwieram pliki dźwiękowe w..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Otwieram pliki dźwiękowe w..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Otwórz plik dźwiękowy w:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Otwórz pliki dźwiękowe w:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Cel" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Otwórz ten link" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Odnośnik nie zawiera URL-a do otwarcia." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Otwieram odnośnik..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Otwieram odnośniki..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Otwieram odnośnik w..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Otwieram odnośniki w..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Otwórz odnośnik w:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Otwórz odnośniki w:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (uruchom w terminalu)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Komentarz" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Polecenie" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Uruchom ten program" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "To uruchomianie nie ma określonego programu." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Uruchamiam program..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Uruchamiam programy..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Czerwony: %1, Zielony: %2, Niebieski: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Barwa: %1, Nasycenie: %2, Wartość: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Nazwa koloru CSS" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Rozszerzona nazwa koloru CSS" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Czy jest kolorem Sieci" + +#: noteedit.cpp:381 +#, fuzzy +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"W tej chwili nie można edytować obrazków (następna wersja Koszyka będzie " +"zawierać edytor obrazków).\n" +"Czy chcesz otworzyć go w programie, który posiada taką możliwość?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Edytur notatkę obrazkową" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Ten animowany obrazek nie może być tu zmieniony.\n" +"Czy chcesz otworzyć go w programie który może to wykonać?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Zmień animację" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Zmień kolor" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Ten typ notatki jest nieznany i nie może być tutaj edytowany.\n" +"Możesz jednak przeciągnąć kopię notatki do aplikacji, która posiada taką " +"możliwość." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Zmień nieznaną notatkę" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Zmień odnośnik" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Automatycznie" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Ikona:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Cel:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Tytuł:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Zmień uruchamianie programu" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Wybierz polecenie do uruchomienia:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "Od&gadnij" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "P&olecenie:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Nazwa:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Pogrubienie" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Podkre�enie" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Do lewej" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Wy�odkowanie" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Do prawej" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Wyjustowanie" + +#: notefactory.cpp:445 +msgid "" +"

    %1 doesn't support the data you've dropped.
    It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

    If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

    " +msgstr "" +"

    %1 nie wspiera danych jakie upuściłeś.
    Mimo to została utworzona " +"ogólna notatka pozwalająca na przeciągnięcie i upuszczenie jej do programu, " +"w którym można ją edytować.

    Jeśli chcesz by ten typ danych był " +"wspierany proszę skontaktować się z deweloperem lub odwiedzić Bazę danych upuszczania Koszyka.

    " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Nieobsługiwany typ MIME" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Przenieś tutaj\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Kopiuj tutaj\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "&Dowiąż tutaj\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "&Anuluj\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importuj ikonę jako obrazek" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Wybierz rozmiar ikony do importu jako obrazek:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Wczytaj zawartość pliku do notatki" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Ochrona hasłem" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Nie wybrano klucza prywatnego." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Koszyk" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, fuzzy, no-c-format +msgid "&Export" +msgstr "&Importuj" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importuj" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Idź do" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Notatka" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Znaczniki" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Pasek narzędzi formatowania tekstu" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<r:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Brak ochrony" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Chroń koszyk &hasłem" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Chroń koszyk &kluczem prywatnym:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "Po lewej" + +#: settings.cpp:368 +msgid "On right" +msgstr "Po prawej" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "Pozycja drzewa &koszyków:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Na górze" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Na dole" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Pozycja paska &filtrowania:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Użyj dymków do powiadamiania o wynikach działań globalnych" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Co to są działania globalne?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Możesz skonfigurować skróty globalne dla kilku akcji bez potrzeby otwierania " +"głównego okna. Na przykład można wklejać zawartość schowka, pobierać kolor z " +"ekranu, itd. Możesz także użyć rolki myszy nad ikoną w tacce systemowej by " +"zmienić bieżący koszyk lub użyć środkowego przycisku myszy nad tą ikoną by " +"wkleić bieżące zaznaczenie." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Robiąc to, %1 pokazuje mały dymek z wiadomością informującą cię o " +"zakończonej z powodzeniem akcji. Możesz wyłączyć ten dymek." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Pamiętaj że te wiadomości są na tyle sprytne by nie pojawiać się kiedy " +"główne okno jest widoczne. Dzieje się tak ponieważ jesteś w stanie widzieć " +"rezultat swojego działania w głównym oknie." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Ikona tacki systemowej" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Dokuj w tacce systemowej" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "&Pokaż ikonę bieżącego koszyka w tacce systemowej" + +#: settings.cpp:426 +#, fuzzy +msgid "&Hide main window when mouse leaves it for" +msgstr "&Ukryj główne okno kiedy nie ma już nad nim myszy" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " dziesiątych sekundy" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "Pokaż &główne okno kiedy mysz jest nad ikoną w tacce systemowej" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Ani&macja zmian w koszykach" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "&Pokaż dymki w koszykach" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "&Duże notatki" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Zachowanie" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "Zamień &linie zaczynające się * lub - na listy w edytorach tekstu" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Proś o potwierdzenie przed &usunięciem notatek" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "&Eksportuj znaczniki w tekście" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Kiedy to się stosuje?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Znajduje zastosowanie kiedy kopiujesz/wklejach lub przeciągasz i upuszczasz " +"notatki w edytorze tekstu." + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "Jeśli włączone, pozwala wkleić znaczniki w formie tekstowej." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"Na przykład lista notatek ze znacznikami Do zrobienia i Zrobione zostaną eksportowane jako wiersze poprzedzone [ ] lub [x], " +"reprezentującymi puste pole wyboru i wypełnione." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Grupuj nową notatkę klikając po prawej stronie linii wstawiania" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Jak zgrupować nową notatkę?" + +#: settings.cpp:557 +msgid "" +"

    When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

    " +msgstr "" +"

    Gdy ta opcja jest zaznaczona linia wstawiania nie tylko pozwala na " +"wstawianie notatek przy pozycji kursora, ale także pozwala na grupowanie " +"nowej notatki razem z tą, nad którą jest kursor:

    " + +#: settings.cpp:559 +msgid "" +"

    Place your mouse between notes, where you want to add a new one.
    Click " +"on the left of the insertion-line middle-mark to insert a note." +"
    Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

    " +msgstr "" +"

    Umieść wskaźnik myszy między notatkami, tam gdzie chcesz dodać nową." +"
    Kliknij po lewej stronie środka linii wstawiania aby wstawić notatkę.
    Kliknij po prawej aby zgrupować notatkę z inną " +"poniżej albo powyżej, w zależności od położenia wskaźnika myszy.

    " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Nic nie rób" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Wklej zawartość schowka" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Wstaw uruchamianie programów" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Wstaw kolor z ekranu" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Wczytaj notatkę z pliku" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importuj uruchamianie z KMenu" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importuj ikonę" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+środkowy przycisk wszędzie:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "na pozycji kursora" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "A&utomatycznie blokuj chronione koszyki kiedy zamknięte od" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minuty" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" +"Użyj agenta GnuPG dla koszyków chronionych kluczem &prywatnym/publicznym" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "U&miejscowienie nowych notatek:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Przy bieżącej notatce" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Wielkość &nowych obrazków:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&na" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pikseli" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Wizualizuj..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Pokaż zawartość dodanych plików dla następujących typów" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "&Tekst zwykły" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "Strona &HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Obrazek lub animacja" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "Dź&więk" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "nagranie audio konferencji" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Raport roczny" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Katalog domowy" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Uruchamianie programu %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Dźwięki" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Pliki" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Dowiązania &lokalne" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "Dowiązania &sieciowe" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "Uruc&hamianie programów" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Otwórz notatki &tekstowe w programie użytkownika:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Otwórz notatki tekstowe w:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Otwórz notatki &obrazkowe w programie użytkownika:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Otwórz obrazki w:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Otwórz a&nimacje w programie użytkownika:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Otwórz animacje w:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Otwórz pliki &dźwiękowe w programie użytkownika:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Otwórz pliki dźwiękowe w:" + +#: settings.cpp:873 +#, fuzzy +msgid "" +"

    If checked, the application defined below will be used when opening that " +"type of note.

    Otherwise, the application you've configured in " +"Konqueror will be used.

    " +msgstr "" +"

    Jeśli zaznaczona, program określony poniżej zostanie użyty do otwierania " +"tego typu notatek.

    W innym wypadku zostanie użyty program zdefiniowany " +"w Konquerorze.

    " + +#: settings.cpp:882 +msgid "" +"

    Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

    " +msgstr "" +"

    Zdefiniuj program do otwierania tego typu notatek zamiast programu " +"zdefiniowanego w Konquerorze.

    " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Jak zmienić program używany do otwierania odnośników WWW?" + +#: settings.cpp:904 +#, fuzzy +msgid "" +"

    When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

    Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

    • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
    • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
    • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

    Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

    For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

    " +msgstr "" +"

    Kiedy otwierasz linki WWW, otwierane są one w różnych programach w " +"zależności od zawartości linka (strona WWW, obrazek, plik PDF...), tak jakby " +"były to pliki na twoim komputerze.

    Tutaj objaśnione jest jak sprawić " +"by każdy adres WWW był otwarty przeglądarce WWW. Pożyteczne jeśli nie " +"używasz KDE (np. GNOME, XFCE...).

    • Otwórz Centrum sterowania KDE " +"(jeÅ›li nie jest dostÄ™pne spróbuj wywoÅ‚ać \"kcontrol\" z linii poleceÅ„);
    • " +"
    • Przejdź do sekcji \"SkÅ‚adniki\" a potem \"Wybór komponentów\";
    • " +"
    • Wybierz \"PrzeglÄ…darka WWW\" zaznacz \"w nastÄ™pujÄ…cej przeglÄ…darce:\" i " +"podaj nazwÄ™ twojej przeglÄ…darki (np. \"firefox\" lub \"epiphany\").
    • Teraz kiedy klikniesz dowolny link zaczynajÄ…cy siÄ™ \"http://..." +"\" zostanie otwarty w przeglÄ…darce WWW (np. Mozilla Firefox lub Epiphany " +"lub...).

      Dokładniejsze ustawienia (np. otwieranie tylko stron WWW w " +"przeglądarce) opisane są w drugim linku.

      " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Jak zmienić programy używane do otwierania plików i odnośników?" + +#: settings.cpp:923 +#, fuzzy +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" +"

      Tutaj dowiesz się jak ustawić programy używane dla każdego typu pliku. " +"Stosuje się to także do linków WWW jeśli nie będziesz ich chciał otwierać w " +"przeglądarce (zobacz pierwszy link). Domyślne ustawienia powinny być " +"wystarczające, ale ta porada będzie pożyteczna dla użytkowników GNOME, XFCE " +"lub innego niż KDE środowiska.

      To jest przykład jak otwierać strony " +"HTML w przeglądarce WWW (ale nadal używać innych programów do innych typów " +"plików). Powtarzaj te kroi dla każdego typu pliku jaki chcesz używać w " +"określonym programie.

      • Otwórz Centrum sterowania KDE (jeÅ›li nie " +"jest dostÄ™pne spróbuj wywoÅ‚ać \"kcontrol\" z linii poleceÅ„);
      • W " +"drzewie, rozwiÅ„ \"text\" i kliknij \"html\";
      • W liÅ›cie programów " +"dodaj swojÄ… przeglÄ…darkÄ™ WWW jako pierwszy wpis;
      • Powtórz dla typu " +"\"application -> xhtml+xml\".
      " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Hierarchia importu" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Jak importować notatki?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" +"&Zachowaj oryginalnÄ… hierarchiÄ™ (wszystkie notatki w oddzielnych koszykach)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Notatki &pierwszego poziomu w oddzielnych koszykach" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "Wszystkie not&atki w jednym koszyku" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "" + +#: softwareimporters.cpp:82 +#, fuzzy +msgid "One ¬e per line" +msgstr "W każdej &inii" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "" + +#: softwareimporters.cpp:95 +#, fuzzy +msgid "&All in one note" +msgstr "Wszystkie not&atki w jednym koszyku" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Notatki z KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Notatki z Żółtych karteczek" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Notatki ze Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Notatki z Tomboya" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Nie mogÄ™ importować tego pliku. Albo jest zepsuty, albo to nie jest plik " +"TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "ZÅ‚y format pliku" + +#: softwareimporters.cpp:671 +#, fuzzy +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Notatka jest zaszyfrowana. Program importujÄ…cy jeszcze nie wspiera " +"zaszyfrowanych notatek. ProszÄ™ usunąć szyfrowanie w TuxCards i spróbować " +"ponownie." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Szyfrowanie notatek jeszcze nie jest wspierane" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" +"Zaszyfrowana notatka.
      Importer jeszcze nie " +"wspiera zaszyfrowanych notatek. Proszę usunąć szyfrowanie w TuxCards i " +"jeszcze raz importować plik.
      " + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" +"

      Mimo zamknięcia głównego okna %1 będzie nadal działał w tacce systemowej. " +"Użyj Zakończ z menu Koszyka aby zakończyć program.

      " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Zadokowany w tacce systemowej" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Wklejono zaznaczenie do koszyka %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimalizuj" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Odtwórz" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (zablokowany)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Do zrobienia" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Nie zaznaczony" + +#: tag.cpp:544 +msgid "Done" +msgstr "Zrobione" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Postęp" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Priorytet" + +#: tag.cpp:599 +msgid "Low" +msgstr "Niski" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Średni" + +#: tag.cpp:600 +msgid "High" +msgstr "Wysoki" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Preferencje" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Złe" + +#: tag.cpp:601 +msgid "Good" +msgstr "Dobre" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Znakomite" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Znaczące" + +#: tag.cpp:667 +msgid "Important" +msgstr "Ważne" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Bardzo ważne" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Pomysł" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "P." + +#: tag.cpp:668 +msgid "Title" +msgstr "Tytuł" + +#: tag.cpp:669 +msgid "Code" +msgstr "Kod" + +#: tag.cpp:669 +msgid "Work" +msgstr "Praca" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "P." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Osobiste" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "O." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Śmieszne" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Dostosuj znaczniki" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "No&wy znacznik" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Nowy st&an" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Do góry (Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Do dołu (Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Znacznik" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Usuń" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "&Skrót:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "Dz&iedziczony przez nowe notatki bliźniacze" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Stan" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&Nazwa:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "U&suń" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblemat:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "Tł&o:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Przekreślenie" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Tekst:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "Kolo&r:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Czcionka:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "Ro&zmiar:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Ekwiwalent &tekstowy:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Jeśli zaznaczone, pozwoli na wklejenie znacznika lub stanu w formie " +"tekstowej." + +#: tagsedit.cpp:496 +#, fuzzy +msgid "On ever&y line" +msgstr "W każdej &inii" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Co to oznacza?" + +#: tagsedit.cpp:502 +#, fuzzy +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Kiedy notatka ma kilka linijek, możesz wybrać eksport znacznika lub stanu " +"tylko w pierwszej linii lub w każdej linii notatki." + +#: tagsedit.cpp:504 +#, fuzzy +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"W przykładzie powyżej, znacznik górnej notatki został wyeksportowany tylko w " +"pierwszej linii, podczas gdy znacznik dolnej notatki został wyeksportowany w " +"każdej linii notatki." + +#: tagsedit.cpp:901 +#, fuzzy +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Usunięcie znacznika spowoduje jego zniknięcie z każdej notatki do której " +"został przydzielony." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Potwierdź usunięcie znacznika" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Usuń znacznik" + +#: tagsedit.cpp:908 +#, fuzzy +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Usunięcie stanu spowoduje zniknięcie znacznika z każdej notatki do jakiej " +"został przydzielony." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Potwierdź usunięcie stanu" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Usuń stan" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 na 16 pikseli" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 na 22 piksele" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 na 32 piksele" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 na 48 pikseli" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 na 64 piksele" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 na 128 pikseli" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Zmień rozmiar okna by wybrać rozmiar obrazka\n" +"i zamknij je lub wciśnij Escape by zaakceptować zmiany." + +#~ msgid "&Export to HTML..." +#~ msgstr "&Eksportuj do HTML..." + +#~ msgid "Notes matching the filter "%1":" +#~ msgstr "Notatki pasujące do filtra "%1":" diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..c7e19ef --- /dev/null +++ b/po/pt.po @@ -0,0 +1,3431 @@ +# translation of pt.po to Português +# +# Nuno J. Silva , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: pt\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-01-29 16:46+0000\n" +"Last-Translator: Nuno J. Silva \n" +"Language-Team: Português \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.2\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Nuno J. Silva" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "nunojsg@gmail.com" + +#: aboutdata.cpp:27 +msgid "" +"

      Taking care of your ideas.

      A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

      " +msgstr "" +"

      Cuidando das suas ideias.

      Uma aplicação para registar " +"anotações que lhe permite escrever facilmente as suas ideias quando estas " +"lhe vêm à cabeça, e encontrá-las facilmente mais tarde. Organizar as suas anotações nunca foi tão fácil.

      " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Bloco de Notas BasKet" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Autoria e manutenção" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Encriptação de cestos, integração com o Kontact, importador do KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Bloqueio automático de cestos, ícone do estado de guardado, copiar/colar " +"HTML, dica com o nome do cesto, largar no cesto pelo nome" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Ãcone" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Guardar como ficheiro de cestos" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Guardando como ficheiro de cestos. Por favor aguarde..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Este não é um ficheiro de cestos." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Erro do Ficheiro de Cestos" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Este ficheiro está corrompido. Não pode ser aberto." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Este ficheiro foi criado com uma versão recente do %1. Pode ser aberto, mas nem todas as informações estarão disponíveis. Por exemplo, algumas anotações poderão não aparecer porque são de um tipo apenas disponível em novas versões. Ao guardar o ficheiro, considere guardá-lo noutro ficheiro, para preservar o original." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Este ficheiro foi criado com uma versão recente do %1. Por favor actualize para uma nova versão a fim de conseguir abrir este ficheiro." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Salvaguardar e restaurar" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Guardar pasta" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
      %1" +msgstr "Os seus cestos estão actualmente guardados na seguinte pasta:
      %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Mover para outra pasta..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "&Usar outra pasta existente..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Porquê fazer isto?" + +#: backup.cpp:72 +msgid "" +"

      You can move the folder where %1 store your baskets to:

      • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
      • Store your " +"baskets on a server to share them between two computers.
        In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
        Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

      Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

      " +msgstr "

      Pode mover a pasta onde o %1 guarda os seus cestos para:

      • Guardar os seus cestos num sítio visível na sua pasta pessoal, como por exemplo ~/Anotações ou ~/Cestos, para que possa fazer manualmente cópias de segurança quando quiser.
      • Guarde os seus cestos num servidor para os partilhar entre dois computadores.
        Neste caso, monte a pasta partilhada no sistema de ficheiros local e configure o %2 para usar esse ponto de montagem.
        Aviso: Não deve correr o %3 ao mesmo tempo nos dois computadores, ou arrisca-se a perder dados enquanto as duas aplicações não estão sincronizadas.

      Lembre-se que não deve modificar manualmente o conteúdo dessa pasta (p. ex. adicionar um ficheiro na pasta de um cesto não irá adicionar esse ficheiro ao cesto).

      " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Cópias de segurança" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Salvaguardar..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Restaurar uma cópia de segurança..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Última cópia de segurança: nunca" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Última cópia de segurança: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Escolha uma pasta para a qual mover os cestos" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "A pasta %1 não está vazia. Deseja realmente subsituí-la?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Substituir pasta?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "&Substituir" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Os seus cestos foram movidos com sucesso para %1. O %2 vai ser reiniciado para finalizar a alteração." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Escolha uma pasta existente para guardar cestos" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "A pasta onde são guardados os cestos foi alterada com sucesso para %1. O %2 vai ser reiniciado para finalizar a alteração." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Cestos_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Arquivos Tar comprimidos pelo Gzip" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Todos os ficheiros" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Salvaguardar Cestos" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "O ficheiro %1 já existe. Deseja realmente substituí-lo?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Substituir ficheiro?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "A salvaguardar os cestos. Por favor aguarde..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Abrir ficheiro de cestos" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "LEIAME.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Esta é uma cópia dos seus cestos tal e qual como eles estavam antes de restaurar a cópia de segurança %1." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Se o restauro foi efectuado com sucesso, e conseguiu recuperar o que queria, pode apagar esta pasta." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Se alguma coisa correu mal durante o processo de restauro, pode reutilizar esta pasta para guardar os seus cestos e não perderá nada." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Escolha \"Cesto\" -> \"Salvaguar e restaurar...\" -> \"Usar outra pasta existente...\" e escolha essa pasta." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "A restaurar %1. Por favor aguarde..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Se algo correr mal durante o processo de restauro, leia o ficheiro %1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Restaurar cestos" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Este ficheiro ou não é uma cópia de segurança de cestos ou está corrompido. Não pode ser importado. Em vez disso, os seus cestos antigos foram preservados." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Erro de restauro" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "A sua cópia de segurança foi restaurada com sucesso para %1. O %2 vai ser reiniciado" + +#: backup.cpp:338 +msgid "Restart" +msgstr "Reiniciar" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Cestos antes do restauro" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Cestos antes do restauro (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "A nova anotação não coincide com o filtro e por isso não está visível." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Uma nova anotação não coincide com o filtro e por isso não está visível." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "" +"Algumas anotações recentemente criadas não coincidem com o filtro e por isso " +"não estão visíveis." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "As novas anotações não coincidem com o filtro e por isso não estão visíveis." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Agrupar" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Inserir" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "Largado no cesto %1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Esta mensagem não devia aparecer. Se está a vê-la, é porque o programa " +"tem falhas! Por favor informe o programador sobre a falha." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Introduza aqui a anotação\n" +"Clique com o botão direito para mais opções" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Alterar a largura destas colunas" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Redimensionar este grupo" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Redimensionar esta anotação" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Seleccionar ou mover esta anotação" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Seleccionar ou mover este grupo" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Adicionar ou remover classificações da anotação" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Classificações atribuídas: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Expandir este grupo" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Fechar este grupo" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Agrupar esta anotação com a seguinte\n" +"Clique com o botão direito para mais opções" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Agrupar esta anotação com a anterior\n" +"Clique com o botão direito para mais opções" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Adicionado" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Última modificação" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Clique na direita para agrupar em vez de inserir" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Clique na esquerda para inserir em vez de agrupar" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "Desbloq&uear" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Cesto protegido com palavra-passe." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Clique em Desbloquear para acedê-lo." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
      this version of %1." +msgstr "Não existe suporte para encriptação
      nesta versão do %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
      locking duration in " +"the application settings." +msgstr "" +"Para manter os cestos desbloqueados, altere a duração do " +"bloqueio
      automático nas definições do programa." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "A carregar..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Personalizar..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "&Filtrar por esta Classificação" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Filtrar por este E&stado" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Classificações" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Deseja mesmo apagar esta anotação?\n" +"Deseja mesmo apagar estas %n anotações?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Apagar anotação\n" +"Apagar anotações" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Anotação copiada para a área de transferência.\n" +"Anotações copiada para a área de transferência." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Mover anotação para a área de transferência.\n" +"Mover anotações para a área de transferência." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Anotação copiada para a selecção.\n" +"Anotações copiadas para a selecção." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Incapaz de abrir anotação." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Não está autorizado a abir este ficheiro." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Guardar para Ficheiro" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Por favor introduza a palavra-passe para a seguinte chave privada:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Por favor introduza a palavra passe para o cesto %1:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Por favor atribua uma palavra-passe ao cesto %1:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Espaço em Disco Insuficiente Para Guardar Dados do Cesto" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Permissões do Ficheiro do Cesto Erradas" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Por favor remova ficheiros do disco %1 para a aplicação poder guardar " +"as suas alterações de uma forma segura." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"As permissões do ficheiro %1 estão incorrectas. Por favor verifique se tem " +"acesso de escrita ao mesmo e às pastas em que ele se encontra." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Erro ao Guardar" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Desculpe, mas a criação da pasta para este novo cesto falhou." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Criação do Cesto Falhou" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Desculpe, mas o processo de cópia do modelo para este novo cesto falhou." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Desculpe, mas a personalização do modelo para este novo cesto falhou." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Propriedades do Cesto" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "Nome" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&Imagem de fundo:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "Cor &de fundo:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Cor do &texto:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Nenhuma)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Disposição" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Col&unas:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "Liv&re" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Mapa mental" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Atalho de Teclado" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Leia alguns conselhos..." + +#: basketproperties.cpp:134 +msgid "" +"

      Easily Remember your Shortcuts:
      With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
      For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

      Local " +"vs Global:
      The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

      Show vs Switch:
      The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

      " +msgstr "" +"

      Lembre-se facilmente dos seus atalhos:
      Com a primeira opção, ao " +"dar ao cesto um atalho do tipo Alt+Letra irá sublinhar essa " +"letra na árvore de cestos.
      Por exemplo, se associar o atalho Alt+I " +"a um cesto chamado Ideias, o cesto irá aparecer na árvore como " +"Ideias. Isto ajuda-o a ver os atalhos e a decorá-los " +"facilmente.

      Local vs Global:
      A primeira opção " +"permite abrir o cesto quando a janela principal está aberta. Os atalhos " +"globais funcionam em qualquer altura, mesmo se a janela estiver ocultada.

      Mostar vs Mudar:
      A última opção faz com que este " +"seja o cesto activo sem abrir a janela principal. Esta função é útil em " +"conjunto com os atalhos globais para, por exemplo, colar o conteúdo da área-" +"de-transferência no cesto activo em qualquer altura.

      " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "&Mostrar este cesto" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Mostrar este cesto (atalho &global)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "Mu&dar para este cesto (atalho global)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Mostra se há alterações que ainda não tenham sido guardadas." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Ctrl+arrastar: copia, Shift+arrastar: move, Shift+Ctrl+arrastar: cria uma " +"ligação." + +#: basketstatusbar.cpp:148 +msgid "

      This basket is locked.
      Click to unlock it.

      " +msgstr "

      Este cesto está bloqueado.
      Clique aqui para o desbloquear.

      " + +#: basketstatusbar.cpp:153 +msgid "

      This basket is unlocked.
      Click to lock it.

      " +msgstr "

      Este cesto está desbloqueado.
      Clique aqui para o bloquear.

      " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Geral" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Mostar/ocultar a janela principal" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"Permite-lhe abrir a janela principal se esta estiver ocultada, e ocultá-la " +"se estiver aberta." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Colar o conteúdo da área-de-transferência no cesto actual" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"Permite-lhe colar os conteúdos da área de transferência no cesto activo sem " +"ter de abrir a janela principal." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Mostrar o nome do cesto activo" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Permite-lhe saber qual é o cesto activo sem abrir a janela principal." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Colar selecção no cesto actual" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"Permite-lhe colar a selecção para o cesto " +"activo sem ter de abrir a janela principal." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Criar um novo cesto" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Permite-lhe criar um novo cesto sem ter de abrir a janela principal (depois " +"pode usar os atalhos globais para adicionar uma anotação, colar o conteúdo " +"da área de transferência ou colar a selecção no novo cesto)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Ir para o cesto anterior" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"Permite-lhe mudar o cesto activo para o cesto anterior sem ter de abrir a " +"janela principal." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Ir para o cesto seguinte" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"Permite-lhe mudar o cesto activo para o cesto seguinte sem ter de abrir a " +"janela principal." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Inserir anotação com texto" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "" +"Adicionar uma anotação com texto ao cesto activo sem ter de abrir a " +"janela principal." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Inserir anotação com imagem" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "Adicionar uma anotação com imagem ao cesto activo sem ter de abrir a janela principal." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Inserir anotação com ligação" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Adicionar uma anotação com uma ligação ao cesto activo sem ter de abrir a janela principal." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Inserir anotação com cor" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "Adicionar uma anotação com uma cor ao cesto activo sem ter de abrir a janela principal." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Escolher cor a partir do ecrã" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "Adicionar uma anotação com uma cor escolhida do ecrã ao cesto activo sem ter de abrir a janela principal." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Fotografar zona do ecrã" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Fotografar uma zona no ecrã e guardá-la como uma imagem no cesto activo sem " +"ter de abrir a janela principal." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Cestos" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Por favor escreva em Francês ou em Inglês." + +#: bnpview.cpp:355 +msgid "" +"

      Basket Tree

      Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

      Ãrvore de Cestos

      Esta é a lista dos seus cestos. Pode organizar os " +"dados arrumando-os em cestos diferentes. Pode agrupar cestos por assuntos, " +"criando novos cestos dentro de outros. Pode navegar entre eles clicando num " +"cesto para o abrir, ou reorganizá-los usando arrastar-e-largar." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Ficheiro de cestos..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Ocultar Janela" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "Página web &HTML" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "Ficheiro &de texto..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "S&alvaguardar e restaurar..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Eliminar" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Selecciona todas as anotações" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Desselecio&nar Tudo" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Desselecciona todas as notas seleccionadas" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Inverter Selecção" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Inverte a selecção actual de anotações" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Editar..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Abrir" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Abrir &com..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "&Guardar para Ficheiro" + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "Ag&rupar" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "&Desagrupar" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Mover para o &Topo" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "Mover para Ci&ma" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "Mover para &Baixo" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Mover para o &Fim" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Texto" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "&Ligação" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Imagem" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Cor" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "L&ançador" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Importar Lançador do menu do &KDE..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Im&portar Ãcone..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Carregar do &Ficheiro..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "C&or a partir do Ecrã" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Foto&grafar Zona do Ecrã" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Novo Cesto" + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Novo sub-&cesto..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Novo Cesto I&rmão..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Novo..." + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Remover" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Pala&vra-passe" + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "B&loquear" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Filtrar" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Filtrar todos &os Cestos" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "&Reiniciar filtro" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Cesto anterior" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "Cesto Segui&nte" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "&Fechar Cesto" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "&Expandir Cesto" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Configurar os Atalhos &Globais..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "&Cestos de boas-vindas" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Conversão de Anotações de Texto Simples" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "A converter anotações de texto simples em texto formatado..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Bloqueado" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Sem anotações" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n anotação\n" +"%n anotações" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n seleccionada\n" +"%n seleccionadas" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "todas as correspondências" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "sem filtro" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n correspondência\n" +"%n correspondências" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "A cor escolhida foi guardada no cesto %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "" +"As anotações de texto simples foram convertidas em texto " +"formatado" + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Conversão Terminada" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Não existem anotações de texto simples para converter." + +#: bnpview.cpp:1484 +msgid "" +"

      The file basketui.rc seems to not exist or is too old.
      %1 cannot " +"run without it and will stop.

      Please check your installation of %2." +"

      If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

      As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

      " +msgstr "" +"

      O ficheiro basketui.rc parece não existir ou é demasiado antigo.
      O %1 não pode correr sem ele e irá encerrar.

      Por favor verifique a sua " +"instalação do %2.

      Se não tiver direitos de administrador para instalar " +"a aplicação ao nível do sistema, pode copiar o ficheiro basketui.rc do " +"arquivo de instalação para a pasta %4.

      Como " +"último recurso, se tem a certeza de que a aplicação está bem instalada, mas " +"tinha uma versão de teste da mesma, experimente remover o ficheiro %5basketui.rc

      " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Recurso não Encontrado" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Impossível adicionar anotação." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Zona do ecrã fotografada para o cesto %1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Apagar Cesto" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Apagar Apenas esse Cesto" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Apagar anotações e sub-anotações" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Deseja realmente remover o cesto%1 e os seus conteúdos?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Remover Cesto" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Remover Cesto" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
      Do you want to remove " +"them too?
      " +msgstr "%1 tem os seguintes sub-cestos.
      Deseja removê-los também?
      " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Remover Sub-cestos" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "&Remover Sub-cestos" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Ficheiros de cestos" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "O conteúdo da área de transferência foi colado no cesto %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Selecção colada no cesto %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Não foi adicionada nenhuma anotação." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "O cesto %1 está bloqueado" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Bloqueado)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "&Atribuir nova Classificação..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Remover todas" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"O %1 rebentou! Lamentamos o sucedido.\n" +"\n" +"Mas nem tudo está perdido! Pode ajudar-nos a corrigir este rebentamento. " +"Segue-se informação sobre o rebentamento, pode simplesmente clicar em " +"enviar, ou se tiver tempo, pode antes disso escrever uma breve descrição de " +"como ocorreu o rebentamento.\n" +"\n" +"Agradecemos a sua colaboração." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"A informação que se segue permite aos programadores identificar o problema, " +"por favor não a altere." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"O %1 rebentou! Lamentamos o sucedido.\n" +"\n" +"Mas nem tudo está perdido! Pode existir uma actualização que resolva este " +"problema. Por favor verifique o repositório de software da sua distribuição." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Janela de Depuração" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Exportar Cesto como HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Nome da Página HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "Nome do &Ficheiro:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Embutir ficheiros que são destino de l&igações locais" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Embutir pastas que são destino de &ligações locais" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "A&pagar ficheiros antigos na pasta de destino" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "For&matar para impressão" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Reiniciar Filtro" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Filtro: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "C&lassificação:" + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Filtrar todos os Cestos" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Sem classificação)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Classificado)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Verificação Ortográfica Automática" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Verificar Ortografia..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Permitir Tabulações" + +#: formatimporter.cpp:132 +msgid "" +"

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " +msgstr "" +"

      O espelhamento de pastas já não é possível (consulte basket.kde.org para mais informações).

      A pasta " +"%1 foi copiada para o cesto. Pode apagar a pasta ou o cesto, ou usar " +"ambos. Mas lembre-se de que modificar um já não irá modificar o outro, uma " +"vez que agora são duas entidades separadas.

      " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Importação de Espelhamento de Pasta" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "Documentos HTML" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "Exportar como HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "A exportar como HTML. Por favor aguarde..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_ficheiros" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "ícones" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "imagens" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "cestos" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "dados" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" +"Feito com o %1, uma ferramenta KDE para registar anotações e ter toda a " +"informação de que precisa sempre acessível." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Pré-definida)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Outra..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Lista de Chaves Privadas" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Email" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Escolha uma chave privada:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "A lista de chaves terminou inesperadamente." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Essa chave pública não foi criada para encriptação." + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Algoritmo não suportado" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Palavra-passe errada." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Seleccionar Ãcone" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Explorar..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Todos os Ãcones)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Recentes)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "Acções" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Aplicações" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Dispositivos" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Sistema de Ficheiros" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Tipos de Ficheiros" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Ficheiros de Ãcones (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Envie um comentário aos programadores da aplicação sobre algo de que gosta" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" +"Envie um comentário aos programadores da aplicação sobre algo de que não " +"gosta" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" +"Envie um comentário aos programadores da aplicação sobre um comportamento " +"anormal da aplicação" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" +"Envie um comentário aos programadores da aplicação sobre uma nova " +"funcionalidade que deseje" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "Enviar um Comentário ao&s Programadores" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Seja bem-vindo a esta versão de teste do %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Seja bem-vindo ao %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Para nos ajudar a melhorar, os seus comentários são importantes." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Cada vez que tiver uma boa ou má experiência, por favor clique na cara " +"apropriada debaixo da barrade título da janela, descreva brevemente aquilo " +"de que gosta ou não gosta e clique em Enviar." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Cada vez que tiver uma boa experiência, por favor clique na cara sorridente " +"debaixo da barrade título da janela, descreva brevemente aquilo de que gosta " +"e clique em Enviar." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Cada vez que tiver uma má experiência, por favor clique na cara tristonha " +"debaixo da barrade título da janela, descreva brevemente aquilo de que não " +"gosta e clique em Enviar." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" +"Siga o mesmo princípio para reportar rapidamente uma falha: simplesmente " +"clique no ícone de objecto partido no canto superior direito da janela, " +"descreva-o e clique em Enviar." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Cada vez que descobrir uma falha na aplicação, por favor clique no ícone de " +"objecto quebrado debaixo da barra-de-título, descreva brevemente o " +"comportamento anormal e clique em Enviar." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Exemplo:\n" +"Exemplos:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Eu gosto no novo aspecto gráfico. Muito refrescante." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Eu não gosto da página de boas-vindas do assistente. Consome " +"demasiado tempo." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" +"A aplicação teve um comportamento anormal quando eu cliquei no botão " +"Adicionar. Não aconteceu nada." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"Eu gostaria de uma nova funcionalidade que me permitisse enviar o meu " +"trabalho por e-mail." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Ajudar a Melhorar a Aplicação" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Endereço de Correio Electrónico" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Por favor forneça o seu endereço de correio electrónico." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Será apenas usado para o contactar se forem necessárias mais informações " +"sobre os seus comentários, para lhe perguntar como reproduzir as falhas que " +"reportou, enviar correcções da falha para que as teste, etc." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"O endereço de correio electrónico é opcional. Se não fornecer nenhum, os " +"seus comentários serão enviados de forma anónima." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Enviar um Comentário aos Programadores" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Enviar aos Programadores da Aplicação um Comentário Sobre:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "A&lgo de que goste" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Algo &de que não goste" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Um &comportamento anormal desta aplicação" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "Uma nova &funcionalidade que deseje" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Mostrar botões de comentário debaixo das barras-de-título das &janelas" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "E&nviar Comentário" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "&Endereço de Correio Electrónico..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Por favor forneça uma breve descrição da sua opinião sobre %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Por favor escreva em Inglês." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Poderá usar uma ferramenta de tradução on-line." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"Para tornar mais úteis os comentários que envia para melhorar a aplicação, " +"tente enviar a mesma quantidade de comentários positivos e negativos." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Não peça funcionalidades: o seu pedido será ignorado." + +#: likeback.cpp:839 +msgid "

      Error while trying to send the report.

      Please retry later.

      " +msgstr "" +"

      Ocorreu um erro ao tentar enviar o relatório.

      Por favor tente " +"novamente mais tarde.

      " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Erro de Transferência" + +#: likeback.cpp:843 +msgid "" +"

      Your comment has been sent successfully. It will help improve the " +"application.

      Thanks for your time.

      " +msgstr "" +"

      O seu comentário foi enviado com sucesso. Isto irá ajudar-nos a melhorar " +"a aplicação.

      Agradecemos a sua disponibilidade.

      " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Comentário Enviado" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "I&tálico" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "N&egrito" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Sempre" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Nunca" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Quando está debaixo do apontador" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Quando não está debaixo do apontador" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "S&ublinhado:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "Co&r:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "" +"Cor quando o apontador \n" +"está em ci&ma:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Tamanho do &ícone:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Nenhuma" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Tamanho do ícone" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "O dobro do tamanho do ícone" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "O triplo do tamanho do ícone" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Pré-visualização:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Desactivou a pré-visualização mas continua a ver imagens?" + +#: linklabel.cpp:607 +msgid "" +"

      This is normal because there are several type of notes.
      This setting " +"only applies to file and local link notes.
      The images you see are image " +"notes, not file notes.
      File notes are generic documents, whereas image " +"notes are pictures you can draw in.

      When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
      For instance, " +"when dropping image or text files, image and text notes are created for them." +"
      For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

      If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

      " +msgstr "" +"

      Isto é normal porque existem vários tipos de anotações.
      Esta definição " +"aplica-se apenas às anotações com ficheiros e ligações locais.
      E as " +"imagens que vê são anotações com imagens, e não anotações com ficheiros." +"
      Anotações com ficheiros são documentos genéricos, enquanto que as " +"anotações com imagens são desenhos que você pode alterar.

      Ao largar " +"ficheiros em cestos, o %1 detecta o seu tipo e mostra-lhe o conteúdo dos " +"ficheiros.
      De momento, ao largar ficheiros de imagem ou texto, são " +"criadas anotações com imagem e com texto para esses ficheiros.
      Os tipos " +"de ficheiro que o %2 não entende, são apresentados como anotações com " +"ficheiros genéricos, com apenas um ícone ou uma pré-visualização do ficheiro " +"e um nome de ficheiro.

      Se não quer que a aplicação crie notas com base " +"nos conteúdos dos ficheiros largados, vá à página \"Geral\" e desseleccione " +"\"Imagem ou animação\" no grupo \"Ver o Conteúdo dos Ficheiros Adicionados " +"para os Seguintes Tipos\".

      " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Exemplo" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Minimizar" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Cesto" + +#: mainwindow.cpp:310 +msgid "

      Do you really want to quit %1?

      " +msgstr "

      Deseja mesmo sair do %1?

      " + +#: mainwindow.cpp:312 +msgid "" +"

      Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

      " +msgstr "" +"

      Não necessita de sair do programa antes de terminar a sua sessão do KDE: " +"ele será iniciado automaticamente da próxima vez que iniciar sessão.

      " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Confirmar Saída" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Novo Cesto" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Cor de fundo" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "Gerir &Modelos" + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Uma coluna" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Duas colunas" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Três colunas" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Livre" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "Mod&elo:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Cestos)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "C&riar em:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Qual a utilidade disto?" + +#: newbasketdialog.cpp:217 +msgid "" +"

      Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

      • Grouping baskets by themes or topics;" +"
      • Grouping baskets in folders for different projects;
      • Making " +"sections with sub-baskets representing chapters or pages;
      • Making a " +"group of baskets to export together (to eg. email them to people).
      " +msgstr "" +"

      Criar cestos dentro de outros cestos de forma a criar uma hierarquia " +"permite uma melhor organização. Pode, por exemplo:

      • Agrupar cestos " +"por temas ou tópicos;
      • Agrupar cestos em pastas para projectos " +"diferentes;
      • Criar secções com sub-cestos que representam capítulos " +"ou páginas;
      • Agrupar cestos para exportá-los em conjunto (para, por " +"exemplo, enviá-los por e-mail).
      " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Liv&re" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Mapa mental" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Imagem)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Texto Simples" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Texto" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Imagem" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animação" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Som" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Ligação" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Lançador" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Cor" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Desconhecido" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Editar este texto simples" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Editar este texto" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Editar esta imagem" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Editar esta animação" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Editar o nome do ficheiro deste som" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Editar o nome deste ficheiro" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Editar esta ligação" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Editar este lançador" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Editar esta cor" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Editar este objecto desconhecido" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "A abrir texto simples..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "A abrir textos simples..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "A abrir texto simples com..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "A abrir textos simples com..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Abrir texto simples com:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Abrir textos simples com:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "A abrir texto..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "A abrir textos..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "A abrir texto com..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "A abrir textos com..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Abrir texto com:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Abrir textos com:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Tamanho" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 por %2 pixels" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "A abir imagem..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "A abrir imagens..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "A abrir imagem com..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "A abrir imagens com..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Abrir imagem com:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Abrir imagens com:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Clique para ver no tamanho normal" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "A abrir animação..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "A abrir animações..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "A abrir animação com..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "A abrir animações com..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Abrir animação com:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Abrir animações com:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Tipo" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Abrir este ficheiro" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "A abrir ficheiro..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "A abrir ficheiros..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "A abrir ficheiro com..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "A abrir ficheiros com..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Abrir ficheiro com:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Abrir ficheiros com:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Abrir este som" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "A abrir som..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "A abrir sons..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "A abrir som com..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "A abrir sons com..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Abrir som com:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Abrir sons com:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Destino" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Abrir esta ligação" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "A ligação não tem nenhum URL para abrir." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "A abrir o destino da ligação..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "A abrir os destinos das ligações..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "A abrir o destino da ligação com..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "A abrir os destinos das ligações com..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Abrir destino da ligação com:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Abrir destinos das ligações com:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (correr no terminal)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Comentário" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Comando" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Executar esta aplicação" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "O lançador não tem nenhum comando para executar." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "A lançar aplicação..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "A lançar aplicações..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Vermelho (R): %1, Verde (G): %2, Azul (B): %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Matiz: %1, Saturação: %2, Valor: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Nome de Cor CSS" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Nome Estendido de Cor CSS" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "É uma Cor Web" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"De momento, não é possível editar imagens aqui (a próxima versão do Bloco de " +"Notas BasKet incluirá um editor de imagens).\n" +"Deseja abrir a imagem com uma aplicação capaz de a editar?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Editar Anotação com Imagem" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Esta imagem animada não pode ser editada aqui.\n" +"Deseja abri-la com uma aplicação que suporte imagens animadas?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Editar Anotação com Animação" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Editar Anotação com Cor" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Os dados desta nota estão num formato que não é suportado e não pode ser " +"editado neste programa.\n" +"No entanto pode arrastar os mesmos para uma aplicação que os compreenda." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Editar Anotação Desconhecida" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Editar Anotação com Ligação" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Automático" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Ãcone:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Destino:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Título:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Editar Anotação com Lançador" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Escolha um comando a executar:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Adivinhar" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Coman&do:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&Nome:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Negrito" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Sublinhado" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Alinhar à Esquerda" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Centrado" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Alinhar à Direita" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "Justificado" + +#: notefactory.cpp:445 +msgid "" +"

      %1 doesn't support the data you've dropped.
      It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

      If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

      " +msgstr "" +"

      O %1 não suporta os dados que introduziu.
      No entanto, criou uma nota " +"genérica com os mesmos, de forma a permitir que os copie para uma aplicação " +"que os compreenda.

      Se deseja que este tipo de dados seja suportado, " +"por favor contacte o programador ou visite a \"BasKet Drop Database\".

      " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Tipo(s) MIME não suportado(s)" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Mover para Aqui\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "&Copiar para Aqui\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "Criar uma &Ligação Aqui\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "C&ancelar\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Importar Ãcone como Imagem" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Escolha o tamanho do ícone a importar como imagem:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Carregar Conteúdodo Ficheiro para a Nota" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Protecção por Palavra-passe" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Nenhuma chave privada seleccionada." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "Ce&sto" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Exportar" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Importar" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "I&r" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "A¬ação" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "&Classificações" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Barra de Ferramentas de Formatação de Texto" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Fi<rar:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Sem protecção" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+S" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Proteger cesto com uma &palavra-passe" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Proteger cesto com chave p&rivada:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+R" + +#: settings.cpp:367 +msgid "On left" +msgstr "À esquerda" + +#: settings.cpp:368 +msgid "On right" +msgstr "À direita" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "Posição da árvor&e de cestos:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "No topo" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "No fundo" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Posição da barra de &filtragem:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "&Usar balões para relatar os resultados de acções globais" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "O que são acções globais?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Pode configurar atalhos globais para realizar algumas acções sem ter de " +"abrir a janela principal. De momento, pode colar o conteúdo da área-de-" +"transferência, escolher uma cor do ecrã, etc. Pode também usar a roda do " +"rato sobre o ícone da bandeja do painel para mudar o cesto activo, ou usar o " +"botão do meio do rato nesse ícone para colar a selecção actual." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Ao fazê-lo, %1 mostra uma mensagem num pequeno balão a informá-lo de que a " +"acção foi concluída com sucesso. Pode desactivar esse balão." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"Tenha em conta que essas mensagens são suficientemente inteligentes para não " +"aparecer caso a janela principal esteja aberta. Isto deve-se ao facto de " +"você já estar a visualizar o resultado das suas acções na janela principal." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Ãcone do Tabuleiro de Sistema" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "Ancorar no ta&buleiro de sistema" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Mostrar o ícone no cesto act&ual no ícone do tabuleiro do sistema" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "Ocultar a janela pr&incipal quando o apontador está fora dela há" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr " décimas de segundo" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"&Mostrar a janela principal quando o apontador \n" +"está sobre o ícone do tabuleiro de sistema durante" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Animar a<erações nos cestos" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Mostrar dica&s nos cestos." + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "Anotações &grandes" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Comportamento" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "&Transformar linhas começadas por * ou - em listas nos editores de texto" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Pedir confirmação antes &de apagar anotações" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "E&xportar classificações com o texto" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Quando é que isto se aplica?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" +"Aplica-se quando copia e cola, ou arrasta e larga anotações para um editor " +"de texto." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" +"Se activado, esta propriedade permite-lhe colar as classificações como " +"equivalentes textuais." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"De momento, uma lista de anoçãos com as classificações A Fazer e " +"Feito são exportadas como linhas precedidas de [ ] ou [x], representando uma caixa de verificação vazia e uma caixa de vericação " +"marcada." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "A&grupar uma nova anotação ao clicar na direita da linha de inserção" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Como agrupar uma nova anotação?" + +#: settings.cpp:557 +msgid "" +"

      When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

      " +msgstr "" +"

      Quando esta opção está activada, a linha de inserção não só lhe permite " +"inserir notas na posição actual do cursor como também lhe permite agrupar " +"uma nova nota com a que se encontra sob o cursor:

      " + +#: settings.cpp:559 +msgid "" +"

      Place your mouse between notes, where you want to add a new one.
      Click " +"on the left of the insertion-line middle-mark to insert a note." +"
      Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

      " +msgstr "" +"

      Coloque o apontador entre duas anotações, onde quer acrescentar uma nova " +"anotação.
      Clique na esquerda da linha de inserção para inserir uma anotação.
      Clique na direita para agrupar uma " +"anotação com a que estiver abaixo ou acima, dependendo do local onde " +"se encontra o seu apontador.

      " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Não fazer nada" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Colar o conteúdo da área de transferência" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Inserir anotação com lançador" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Inserir cor a partir do ecrã" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Carregar anotação a partir de ficheiro" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Importar Lançador do menu do KDE" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Importar ícone" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+clique-com-o-botão-do-meio em qualquer sítio:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "na posição do cursor" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "Bloq&uear automaticamente os cestos protegidos quando fechado durante" + +#: settings.cpp:603 +msgid " minutes" +msgstr " minutos" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" +"Usar o agente do GnuPG ¶ as chaves públicas/privadas dos cestos " +"protegidos" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Localização das novas anotações:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Na anotação actual" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Tamanho das &novas imagens:" + +#: settings.cpp:718 +msgid "&by" +msgstr "po&r" + +#: settings.cpp:721 +msgid "pixels" +msgstr "pixels" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Visualizar..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Ver o Conteúdo dos Ficheiros Adicionados para os Seguintes Tipos" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "Texto sim&ples" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "Página &HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Imagem ou animação" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Sons" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Gravação áudio da conferência" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Relatório anual" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Directoria pessoal" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Lançar %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Sons" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Ficheiros" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Ligações &Locais" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "L&igações de Rede" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "Lança&dores" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Abrir anotações com &texto numa aplicação diferente:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Abrir anotações com texto com:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Abrir anotações com &imagens numa aplicação diferente:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Abrir anotações com imagens com:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Abrir anotações com a&nimações numa aplicação diferente:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Abrir anotações com animações com:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Abir anotações com som n&uma aplicação diferente:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Abrir anotações com sons com:" + +#: settings.cpp:873 +msgid "" +"

      If checked, the application defined below will be used when opening that " +"type of note.

      Otherwise, the application you've configured in " +"Konqueror will be used.

      " +msgstr "" +"

      Se estiver seleccionado, a aplicação definida de seguida será usada para " +"abrir anotações desse tipo.

      Caso contrário, será usada a aplicação definida no Konqueror.

      " + +#: settings.cpp:882 +msgid "" +"

      Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

      " +msgstr "" +"

      Defina a aplicação a usar para abrir anotações deste tipo, em vez da " +"aplicação configurada do Konqueror.

      " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Como mudar as aplicações usadas para abrir ligações para a Web?" + +#: settings.cpp:904 +msgid "" +"

      When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

      Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
      • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

      Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

      For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

      " +msgstr "" +"

      Ao abrir ligações para a Web, elas são abertas em aplicações diferentes, " +"dependendo do conteúdo da ligação (uma página Web, uma imagem, um " +"documento PDF,...), tal como se fossem ficheiros armazenados no seu " +"computador.

      Eis como fazer se quiser abrir todos os endereços Web no " +"seu navegador Web. Isto é útil se não estiver a usar o KDE (se estiver a " +"usar, por exemplo, GNOME, XFCE, ...).

      • Abra o Centro de Controlo " +"do KDE (se não estiver disponível, experimente escrever \"kcontrol\" num " +"terminal de linha de comandos);
      • Vá a \"Componentes do KDE\" e depois " +"à secção \"Selector de Componentes\";
      • Escolha \"Navegação Web\", " +"escolha \"no seguinte nagevador:\" e introduza o nome do seu navegador Web " +"(algo como \"firefox\" ou \"epiphany\").

      Agora, quando clicar em " +"qualquer ligação que comece por \"http://...\", ela será aberta no " +"seu navegador Web (p. ex., Mozilla Firefox ou Epiphany ou...).

      Para " +"uma configuração mais pormenorizada (por exemplo, abrir apenas as páginas " +"Web no seu navegador Web), leia a segunda ligação de ajuda.

      " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Como mudar as aplicações usadas para abrir ficheiros e ligações?" + +#: settings.cpp:923 +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" +"

      Eis como definir a aplicação a usar para cada tipo de ficheiro. Isto " +"também se aplica a ligações Web se optar por não as abrir todas num " +"navegador web (ver primeira ligação de ajuda).As definições padrão deverão " +"servir, mas esta dica é útil caso esteja a usar GNOME, XFCE, ou outro " +"ambiente em vez do KDE.

      Este é um exemplo para abrir páginas HTML no " +"seu navegador Web (e continuar a usar outras aplicações para outros " +"endereços ou ficheiros). Repita estes passos para cada tipo de ficheiro que " +"quiser abrir numa aplicação específica.

      • Abra o Centro de Controlo " +"do KDE (se não estiver disponível, experimente escrever \"kcontrol\" num " +"terminal de linha de comandos);
      • Vá a \"Componentes do KDE\" e à " +"secção \"Associação de Ficheiros\";
      • Na árvore, abra \"text\" e " +"clique em \"html\";
      • Na lista de aplicações, adicione o seu navegador " +"Web como primeira entrada;
      • Faça a mesma coisa para o tipo " +"\"application -> xhtml+xml\".
      " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Importar Hierarquia" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Como Importar as Anotações?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Manter a hierarquia original (todas as notas em cestos separados)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Notas de &primeiro nível em cestos separados" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "Tod&as as notas num cesto" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Importar ficheiro de texto" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Formato do ficheiro de texto" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Anotações separadas por uma linha &em branco" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Uma a¬ação por linha" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "As anotações começam com um &hífen (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "As anotações começam com um a&sterisco (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&Usar outro separador de anotações:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "Tudo numa &anotação" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Do KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Do KNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Do Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Do Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "De %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" +"Não é possível importar esse ficheiro. Ou se encontra corrompido ou não é um " +"ficheiro do TuxCards." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Formato de Ficheiro Incorrecto" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Uma nota encontra-se encriptada. O importador ainda não suporta notas " +"encriptadas. Por favor remova a encriptação com o TuxCards e tente novamente." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Notas Encriptadas Ainda não Suportadas" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" +"Nota encriptada.
      O importador ainda não suporta " +"notas encriptadas. Por favor remova a encriptação com o TuxCards e tente " +"novamente.
      " + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" +"

      Mesmo que feche a janela principal, o %1 vai continuar a correr na " +"bandeja do painel. Use a opção Sair do menu Cesto para " +"encerrar a aplicação.

      " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Ancorar na Bandeja do Painel" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "A selecção foi colada no cesto %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Minimizar" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Restaurar" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Bloqueado)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "A Fazer" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Não assinalado" + +#: tag.cpp:544 +msgid "Done" +msgstr "Feito" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Progresso" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Prioridade" + +#: tag.cpp:599 +msgid "Low" +msgstr "Baixa" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Média" + +#: tag.cpp:600 +msgid "High" +msgstr "Alta" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Preferência" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Má" + +#: tag.cpp:601 +msgid "Good" +msgstr "Boa" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Excelente" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Interessante" + +#: tag.cpp:667 +msgid "Important" +msgstr "Importante" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Altamente Importante" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Ideia" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I" + +#: tag.cpp:668 +msgid "Title" +msgstr "Título" + +#: tag.cpp:669 +msgid "Code" +msgstr "Código" + +#: tag.cpp:669 +msgid "Work" +msgstr "Trabalho" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "T" + +#: tag.cpp:687 +msgid "Personal" +msgstr "Pessoal" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P" + +#: tag.cpp:687 +msgid "Funny" +msgstr "Divertido" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Personalizar Classificações" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "No&va Classificação" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Novo Est&ado" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Mover para Cima (Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Mover para Baixo (Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Classificação" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Remover" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "Atal&ho:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "Herdado de novas notas irm&ãs" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "Estado" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "No&me:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "Remo&ver" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Emblema:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "Cor &de fundo:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Rasurado" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Texto" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "Co&r:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "Tipo de &Letra:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "T&amanho:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Te&xto equivalente:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" +"Se preenchido, esta propriedade permite-lhe colar esta classificação ou " +"estado como o seu equivalente textual." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "Em toda&s as linhas" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "O que significa isto?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Quando uma anotação tem várias linhas, pode optar por exportar a " +"classificação ou o estado na primeira linha ou em todas as linhas da " +"anotação." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"No exemplo em cima, a classificação da anotação de cima só é explortada na " +"primeira linha, enquanto que a classificação da anotação de baixo é exportada em " +"todas as linhas da anotação." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" +"Eliminiar a classificação irá removê-la de todas as notas às quais se " +"encontra associada." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Corfirmar Eliminar Classificação" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Eliminar Classificação" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" +"Eliminar o estado irá remover a classificação de todas as anotações que se " +"encontram associadas a esse estado." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Confirmar Eliminar Estado" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Eliminar Estado" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 por 16 pixels" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 por 22 pixels" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 por 32 pixels" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 por 48 pixels" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 por 64 pixels" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 por 128 pixels" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Redimensione a janela para escolher o tamanho da imagem\n" +"e feche-a ou pressione Escape para aceitar as modificações." + diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..069662d --- /dev/null +++ b/po/ru.po @@ -0,0 +1,3387 @@ +# translation of ru.po to +# translation of basket.po to +# +# Danil Dotsenko , 2006. +# Daniel Dotsenko , 2007. +msgid "" +msgstr "" +"Project-Id-Version: ru\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-02-05 23:13-0800\n" +"Last-Translator: Daniel Dotsenko \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.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Danil Dotsenko" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "dd@accentsolution.com" + +#: aboutdata.cpp:27 +msgid "" +"

      Taking care of your ideas.

      A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

      " +msgstr "" +"

      Ваши идеи: Уход и забота.

      Помогаем увековечить ваши идеи и " +"Ñделать их легко-доÑтупными. С лёгкоÑтью организуем идеи на Ñлектронном " +"холÑте.

      " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Ðльбом заметок BasKet" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Ðвтор" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Шифрование корзин, Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Kontact, Импорт заметок KnowIt" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Ðвто-замыкание Корзин, значок Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñохранены, копирование и вÑтавка " +"в формате HTML, вÑплывающие подÑказки, кинуть на Ð¸Ð¼Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ñ‹" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Значок" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Сохранить как контейнер" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Пакуем в контейнер BasKet..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Данный файл не ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€ данных BasKet." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Ошибка в контейнер." + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Файл повреждён. Чтение невозможно." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Этот файл был Ñоздан другой верÑией %1. Его можно прочитать но, возможно, не вÑе данные будут импортированны вÑледÑтвие неÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð²Ñтроенных типов данных. Сохраните ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² другом файле, иначе неимпортированные данные могут быть утерÑны." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Этот файл был Ñоздан другой верÑией %1. ПожалуйÑта, уÑтановите более новую верÑию приложениÑ." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Резервное копирование" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Сохранить" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
      %1" +msgstr "МеÑтонахождение вÑех корзин:
      %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "Передвинуть в папку..." + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "ПодÑоединитÑÑ Ðº данным в другой папке..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Когда Ñто применимо?" + +#: backup.cpp:72 +msgid "" +"

      You can move the folder where %1 store your baskets to:

      • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
      • Store your " +"baskets on a server to share them between two computers.
        In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
        Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

      Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

      " +msgstr "" +"

      %1 может хранить Ñвои данные в папке вашего выбора:

      • " +"Хранение данных в домашней папке, как ~/Notes или ~/ " +"обеÑпечивает лёгкий доÑтуп Ð´Ð»Ñ Ñ€ÑƒÑ‡Ð½Ð¾Ð³Ð¾ Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸.
      • " +"Хранение данных на Ñервере позволит иметь доÑтуп к Ñтим данным Ñ Ð½ÐµÑкольких Ñтанций." +"
        ПодÑоедините Ñетевой реÑÑƒÑ€Ñ Ðº меÑтной файловой ÑиÑтеме и укажите %2 " +"на Ñту папку.
        Будте оÑторожны, еÑли более чем один компьютер попробуют изметить" +" данные на Ñервере одновременно, возможна Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…." +"

      ПожалуйÑта, не менÑйте Ñодержимое Ñтой папки в-ручную; " +"добавление файлов в Ñтруктуру папки не добавит его в Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð°Ð½Ð½Ñ‹Ñ….

      " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "Сохранить..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "ВоÑÑтановить..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "ПоÑледнÑÑ: никогда" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "ПоÑледнÑÑ: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Выберите папку" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "Папка не пуÑта. Стереть Ñодержимое?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Заменить Ñодержимое папки?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "За&менить" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Корзины передвинуты в %1. ПерезапуÑкаем %2." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Выберите папку" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Корзины переключены на папку %1. ПерезапуÑкаем %2." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "basket_архив_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Ðрхив tar.gz" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Ð’Ñе файлы" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "Файл %1 уже ÑущеÑтвует. ПерепиÑать поверх?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "ПерепиÑать поверх файла?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Пакуем ..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Открыть контейнер" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "README.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½ ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ %1 Ð´Ð»Ñ ÑохранноÑти ваших данных во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копии." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "ЕÑли воÑÑтановление данных прошло уÑпешно, удалите Ñту папку." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "ВоÑпользуйтеÑÑŒ Ñтой Ñпециальной копией корзин в Ñлучае провала процедуры воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копии." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "Выберите \"Корзина\" -> \"Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ...\" -> \"ПодÑоединитÑÑ Ðº данным в другой папке...\" и выберите папку." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "ВоÑÑтановление %1..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Читайте файл %1 в Ñлучае ошибок." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "ВоÑÑтановить" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копии. ВозвращаемÑÑ Ðº предыдущим корзинам." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Ошибка воÑÑтановлениÑ" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "УÑпешное воÑÑтановление резервной копии в %1. ПерезапуÑкаем %2." + +#: backup.cpp:338 +msgid "Restart" +msgstr "ПерезапуÑтить" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Корзины до воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копии" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Корзины до воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копии (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ° не подходит под категории фильтра и была ÑпрÑтана." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ° не подходит под категории фильтра и была ÑпрÑтана." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Ðекоторые из новых заметок не подходÑÑ‚ под категории фильтра и были ÑпрÑтаны." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Ðовые заметки не подходÑÑ‚ под категории фильтра и были ÑпрÑтаны." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Группировать" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Ð’Ñтавить" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "(%1) помещено в корзину %2" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"ЕÑли вы видите Ñто Ñообщение - в программе ÑлучилаÑÑŒ ошибка. ПожалуйÑта, " +"Ñообщите об Ñтой проблеме производителю Ñтой программы." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +" Ð’Ñтавить Ñюда\n" +"Щёкните правой клавишей мыши Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… вариантов" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "ПоменÑÑ‚ÑŒ размер колонок" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "ПоменÑÑ‚ÑŒ размер группы" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Изменить размер заметки" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Выделить или перемеÑтить заметку" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Выделить или перемеÑтить группу" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "МанипулÑÑ†Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ°Ð¼Ð¸" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "ПредпиÑÐ°Ð½Ð½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ°: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "РаÑкрыть группу" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Свернуть группу" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Сгруппировать заметку Ñ Ð½Ð¸Ð¶Ð½ÐµÐ¹\n" +"Щёкните правой клавишей мыши Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… вариантов" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Сгруппировать заметку Ñ Ð²ÐµÑ€Ñ…Ð½ÐµÐ¹\n" +"Щёкните правой клавишей мыши Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… вариантов" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Добавлен" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "ПоÑледнÑÑ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Щёлкните Ñправа что бы Ñгруппировать вмеÑто вÑтавки" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Щёлкните Ñлева что бы вÑтавить вмеÑто группировки" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "Раз&блокировать" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Защищено паролем." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Разблокируйте перед проÑмотром." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
      this version of %1." +msgstr "Шифрование не поддерживаетÑÑ
      Ñтой верÑией %1." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
      locking duration in " +"the application settings." +msgstr "" +"Ð”Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого Ð·Ð°Ð¼Ñ‹ÐºÐ°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ñ‹,
      измените период " +"автоматичеÑкого Ð·Ð°Ð¼Ñ‹ÐºÐ°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½ в наÑтройках приложениÑ." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Загрузка..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&ÐаÑтроить..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "Фильтровать по метке" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Фильтровать по &ÑоÑтоÑнию метки" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Метки" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "" +"Удалить Ñту заметку?\n" +"Удалить Ñти %n заметки?\n" +"Удалить Ñти %n заметок?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" +"Удалить заметку\n" +"Удалить заметки\n" +"Удалить заметки" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "" +"Заметка Ñкопирована в буфер.\n" +"Заметки Ñкопированы в буфер.\n" +"Заметки Ñкопированы в буфер." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "" +"Заметка вырезана в буфер.\n" +"Заметки вырезаны в буфер.\n" +"Заметки вырезаны в буфер." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "" +"Заметка Ñкопирована в выделение.\n" +"Заметки Ñкопированы в выделение.\n" +"Заметки Ñкопированы в выделение." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Ðевозможно открыть заметку." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтого файла." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Сохранить в файл" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Введите пароль Ð´Ð»Ñ Ð»Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ключа:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Введите пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ñ‹ '%1':" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Введите пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ñ‹ '%1':" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "ÐедоÑтаточно меÑта на диÑке" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Право доÑтупа к файлу данных" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "Ð”Ð»Ñ ÑƒÑпешного ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… вам нужно очиÑтить меÑто на диÑке %1." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "Похоже что у Ð²Ð°Ñ Ð½ÐµÑ‚ права на запиÑÑŒ Ð´Ð»Ñ %1." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Ошибка ÑохранениÑ" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Ðевозможно Ñоздать папку Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ корзины данных." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Ошибка при Ñоздании корзины" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Ошибка при копировании шаблона." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Ошибка при наÑтройке шаблона." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "СвойÑтва корзины" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "ИмÑ" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "&РиÑунок фона:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "Цвет фона:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "Цвет &текÑта" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(нет)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Позиционирование Ñодержимого" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "Столбцы:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "Свободное размещение" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "Свободное размещение" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "ÐšÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "ÐеÑколько подÑказок..." + +#: basketproperties.cpp:134 +msgid "" +"

      Easily Remember your Shortcuts:
      With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
      For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

      Local " +"vs Global:
      The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

      Show vs Switch:
      The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

      " +msgstr "" +"

      Ключ к запоминанию комбинаций:
      ПредпиÑание корзине " +"комбинации Alt+Буква подчеркнёт Ñту букву в лиÑте корзин." +"
      Пример: Alt+T Ð´Ð»Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ñ‹ Tips, приведёт к Tips.

      МеÑтные и Глобальные комбинации:
      МеÑтные " +"комбинации клавиш работают только когда окно Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑвлÑетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼. " +"Глобальные комбинации не требуют Ñтого и работают \"Ñквозь\" другие " +"приложениÑ.

      Показать и Переключить:
      Переключить " +"позволÑет выбор активной корзины без активизации окна приложениÑ. Это " +"полезно в тандеме Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ комбинациÑми Ð’Ñтавить в активную корзину и " +"Ð’Ñтавить выбор в активную корзину.

      " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "Показать корзину" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Показать корзину (Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "ПереключитьÑÑ Ð½Ð° Ñту корзину (Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Индикатор неÑохранённых данных." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" +"Ctrl+броÑить: копирование, Shift+броÑить: двинуть, Shift+Ctrl+броÑить: " +"ÑÑылка." + +#: basketstatusbar.cpp:148 +msgid "

      This basket is locked.
      Click to unlock it.

      " +msgstr "" +"

      Эта корзина заблокирована.
      Щёлкните мышью Ð´Ð»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" + +#: basketstatusbar.cpp:153 +msgid "

      This basket is unlocked.
      Click to lock it.

      " +msgstr "" +"

      Эта корзина разблокирована.
      Щёлкните мышью Ð´Ð»Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Общие" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Показать / ÑпрÑтать главное окно" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "" +"ПозволÑет показать главное окно еÑли оно ÑпрÑтано и ÑпрÑтать еÑли оно на " +"виду." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Ð’Ñтавить Ñодержимое буфера обмена в выбранную корзину" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "" +"ПозволÑет вÑтавить Ñодержимое буфера обмена в выбранную корзину без " +"необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Показать Ð¸Ð¼Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ корзины" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "" +"ПозволÑет узнать ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð° выбрана.без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ " +"окна." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Ð’Ñтавить выделенное в выбранную корзину" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "" +"ПозволÑет вÑтавить Ñодержимое буфера обмена в выбранную корзину без " +"необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Создать новую корзину" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "ПозволÑет Ñоздать корзину без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Перейти к предыдущей корзине" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "" +"ПозволÑет перейти к предыдущей корзине без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ " +"окна." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Перейти к Ñледующей корзине" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "" +"ПозволÑет перейти к Ñледующей корзине без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ " +"окна." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Ð’Ñтавить заметку из проÑтого текÑта" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "" +"Ð’Ñтавить заметку из проÑтого текÑта в выбраную корзину без необходимоÑти " +"Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Ð’Ñтавить риÑунок" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "Ð’Ñтавить риÑунок в выбраную корзину без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Ð’Ñтавить ÑÑылку" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Ð’Ñтавить ÑÑылку в выбраную корзину без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Ð’Ñтавить цветную заметку" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "" +"Ð’Ñтавить цветную заметку в выбраную корзину без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ " +"главного окна." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Выбрать цвет Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ñкрана" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Выбрать цвет Ñ Ð»ÑŽÐ±Ð¾Ð¹ точки Ñкрана в выбраную корзину без необходимоÑти " +"Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ окна." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Сделать Ñнимок зоны Ñкрана" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Ð’Ñтавить Ñнимок зоны Ñкрана в выбраную корзину без необходимоÑти Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ " +"главного окна." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Корзины" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "ПожалуйÑта, иÑпользуйте английÑкий или французÑкий." + +#: bnpview.cpp:355 +msgid "" +"

      Basket Tree

      Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

      Дерево корзин

      Ð’Ñ‹ можете организовывать данные путём Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ " +"корзин в группы по темам. ПользуйтеÑÑŒ мышью Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‚Ð°ÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½ из " +"одной группы в другую." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "Контейнер BasKet..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "Скрыть Окно" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "Страница HTML" + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "Заметки KDE" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Sticky Notes" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "ТекÑтовый файл..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "Резервное копирование..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Удалить" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Выделить вÑе" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Убрать выделение Ñо вÑех" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Убрать выделение Ñо вÑех" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "&Инвертировать выделение" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Уберает выделение Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ñ… заметок, выделÑет невыделенные заметки" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Правка..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Открыть" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "Открыть в..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "Сохранить в файл..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "Сгруппировать" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Разбить группу" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "Вверх" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "&Выше" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "&Ðиже" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "Вниз" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&ТекÑÑ‚" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "СÑÑ‹&лка на реÑурÑ" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&РиÑунок" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "Цвет" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "СÑылка на &приложение" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "Ð’Ñтавить Ñылку Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· меню KDE..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Ð’Ñтавить &значок..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Загрузить из файла..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "ВзÑÑ‚ÑŒ цвет c точки Ñкрана" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Сделать &Ñнимок зоны Ñкрана" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ð¾Ð»Ð¾Ð²Ð½Ð°Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð°..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "ÐÐ¾Ð²Ð°Ñ Ð´Ð¾Ñ‡ÐµÑ€Ð½ÑÑ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð°..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "ÐÐ¾Ð²Ð°Ñ Ñ€Ð¾Ð´ÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð°..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Создать" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Удалить" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Пароль..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "За&блокировать" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Фильтр" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "ПоиÑк по вÑем корзин&ам" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "ОчиÑтить фильтр" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð°" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ñ€Ð·Ð¸Ð½Ð°" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "Свернуть вид корзины" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "Развернуть вид корзины" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Комбинации клавиш (глобальные)..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "Удалить" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Конвертирование текÑта" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "ПроизводитÑÑ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ проÑтого текÑта в текÑÑ‚ Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Заблокированный" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "ПуÑто" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" +"%n заметка\n" +"%n заметки\n" +"%n заметок" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" +"%n выделена\n" +"%n выделены\n" +"%n выделено" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "вÑе варианты подходÑщие под уÑÐ»Ð¾Ð²Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð¾Ð²" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "фильтр не уÑтановлен" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" +"%n Ñовпадение\n" +"%n ÑовпадениÑ\n" +"%n Ñовпадений" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Корзина %1 оцвечена" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Заметки Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ текÑтом конвертированны в текÑÑ‚ Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Конвертирование окончено" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Заметки Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ текÑтом отÑутÑтвуют." + +#: bnpview.cpp:1484 +msgid "" +"

      The file basketui.rc seems to not exist or is too old.
      %1 cannot " +"run without it and will stop.

      Please check your installation of %2." +"

      If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

      As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

      " +msgstr "" +"

      Файл basketui.rc либо не ÑщеÑтвует, либо очень Ñтар.
      %1 не может " +"работать без него и оÑтанавливает Ñвою работу.

      Проверьте " +"ÑложенноÑÑ‚ÑŒ инÑталÑции %2.

      ЕÑли у Ð²Ð°Ñ Ð½ÐµÑ‚Ñƒ прав админиÑтратора Ð´Ð»Ñ " +"полноценной уÑтановки приложениÑ, можно Ñкопировать файл basket.rc из " +"инÑталÑционного пакета в папку %4.

      Ð’ крайнем " +"Ñлучае, можно попробовать удалить файл %5basketui.rc

      " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Ðе найден" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Заметку невозможно добавить." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Cнимок зоны Ñкрана вÑтавлен в корзину \"%1\"" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Удалить" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Удалить только Ñту" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Удалить вмеÑте Ñ Ð´Ð¾Ñ‡ÐµÑ€Ð½Ð¸Ð¼Ð¸" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "Удалить корзину %1 и её Ñодержимое?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Удалить" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "Удалить" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
      Do you want to remove " +"them too?
      " +msgstr "%1 Ñодержит Ñледующие дочерние корзины.
      Их тоже удалить?
      " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Удалить дочерние корзины" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "Удалить дочерние корзины" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "СвойÑтва корзины" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Содержимое буфера обмена (%1) вÑтавлено в %2" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Выделенное (%1) вÑтавлено в %2" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Заметка не была добавлена." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "Корзина %1 заблокирована" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Заблокированно)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "ПредпиÑать новую &метку..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Удалить вÑе" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"Ошибка в %1.\n" +"Это очень Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ помочь нам починить приложение. Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ " +"ÑопутÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐµ приведена внизу и ждёт вашего Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° кнопку " +"Отправить.\n" +"Заранее ÑпаÑибо." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "ПожалуйÑта, добавьте детали вы находите нужными Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ Ñтой ошибки." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"Ошибка в %1.\n" +"Это очень Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ проверить еÑли уже вышла Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ " +"Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñодержит необходимые иÑправлениÑ." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Окно Ñлужебных Ñообщений" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "ЭкÑпортировать обект в HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° HTML" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Вложить меÑтные подÑоединённые файлы" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Вложить меÑтные подÑоединённые папки" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "Стереть файлы в целевой папке" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "Форматировать" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "ОчиÑтить уÑÐ»Ð¾Ð²Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "Фильтр: " + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "&Метка: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "ИÑкать во вÑех корзинах" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(метки нет)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(помечен)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "ÐвтоматичеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° орфографии" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Проверить орфографию..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Разрешить табулÑцию" + +#: formatimporter.cpp:132 +msgid "" +"

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " +msgstr "" +"

      Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ. (Более по вопроÑу на basket.kde.org).

      Папка %1 была Ñкопирована Ð´Ð»Ñ " +"нужд корзины. Ð’Ñ‹ можете удалить папку, корзину, или иÑпользовать оба.Ðо, " +"помните! ÐœÐ¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÐЕ отражаетÑÑ Ð½Ð° ÑоÑтоÑнии другого. Теперь они - " +"отдельные, неÑвÑзанные реÑурÑÑ‹.

      " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Импорт из папки" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "Документы HTML" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "ЭкÑпорт в HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "ЭкÑпорт в HTML" + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_файлы" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "значки" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "риÑунки" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "корзины" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "данные" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "Создано Ñ %1. Организуем невозможное Ñ Ð»Ñ‘Ð³ÐºÐ¾Ñтью." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(По умолчанию)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Другое..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "ЛиÑÑ‚ личных ключей" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "ÐÐ´Ñ€ÐµÑ Ñлектронной почты" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "Идентификатор" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Выберите ключь шифровки:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "ЛиÑÑ‚ ключей неожиданно оборвалÑÑ." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Этот публичный ключ не может быть иÑпользован Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð°Ñ†Ð¸Ð¸" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Стандарт не поддерживаетÑÑ" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Ðеправильный пароль." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Выберите значок" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "О&бзор..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Ð’Ñе значки)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Ðедавние)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "ДейÑтвиÑ" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "ПриложениÑ" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "УÑтройÑтва" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Файловые СиÑтемы" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Типы файлов" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Файлы значков (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "ПоÑлать разработчикам положительный отзыв" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "ПоÑлать разработчикам отрицательный отзыв" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "ПоÑлать разработчикам предложение об изменении Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "ПоÑлать разработчикам проÑьбу о включении дополнительных функций" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "Отправить комментарий" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "Добро пожаловать в %1." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "Добро пожаловать в %1." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "" +"Ваши отзывы очень важны и полезны Ð´Ð»Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ³Ð¾ ÑовершенÑÑ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого " +"приложениÑ." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" +"Каждый раз когда вы приÑтно или неприÑтно удивлены, пожалуйÑта щёлкните на " +"подходÑщую руку под титульной Ñтрокой. Вам будет дана возможноÑÑ‚ÑŒ напиÑать " +"отзыв и подтведить его отправку." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" +"Каждый раз когда вы приÑтно или неприÑтно удивлены, пожалуйÑта щёлкните на " +"подходÑщую руку под титульной Ñтрокой. Вам будет дана возможноÑÑ‚ÑŒ напиÑать " +"отзыв и подтведить его отправку." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" +"Каждый раз когда вы приÑтно или неприÑтно удивлены, пожалуйÑта щёлкните на " +"подходÑщую руку под титульной Ñтрокой. Вам будет дана возможноÑÑ‚ÑŒ напиÑать " +"отзыв и подтведить его отправку." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "Ðналогичным ÑпоÑобом можно предоÑтавлÑÑ‚ÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" +"Каждый раз когда вы приÑтно или неприÑтно удивлены, пожалуйÑта щёлкните на " +"подходÑщую руку под титульной Ñтрокой. Вам будет дана возможноÑÑ‚ÑŒ напиÑать " +"отзыв и подтведить его отправку." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" +"Пример:\n" +"Примеры:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "ПонравилоÑÑŒ новое оформление. ИнтереÑненькое такое." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" +"Ðе понравилаÑÑŒ приветÑтвенное окно гида. Забирает Ñлишком много " +"времени." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "Щёлкаю на Добавить... не работает." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" +"ХотелоÑÑŒ бы что бы чёлк на заметку и можно по Ñлектронной почте было " +"отправить." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Помочь улучшить приложение" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "ÐÐ´Ñ€ÐµÑ Ñлектронной почты" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Он будет иÑпользован только Ð´Ð»Ñ Ð¿Ñ€Ñмого контакта Ñ Ð²Ð°Ð¼Ð¸ в Ñлучае " +"необходимоÑти более полного набора данных по оговоренной проблеме." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" +"ÐÐ´Ñ€ÐµÑ Ñлектронной почты не обÑзателен. ЕÑли он не будет указан ваши заметки " +"будут отоÑланны ононимно." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Отправить Комментарий" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Отправить комментарий" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "ПонравилоÑÑŒ" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Ðе понравилоÑÑŒ" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Приложение не правильно ÑÐµÐ±Ñ Ð²ÐµÐ´Ñ‘Ñ‚" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "ÐÐ¾Ð²Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾ÑÑ‚ÑŒ" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Показать кнопки отзывов" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "Отправить комментарий" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "ÐÐ´Ñ€ÐµÑ Ñлектронной почты" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Кратко о вашем мнении о %1." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "ПожалуйÑта, иÑпользуйте английÑкий." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "ЕÑÑ‚ÑŒ возможноÑÑ‚ÑŒ иÑпользовать Интернет-приложение перевода" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" +"ПридерживаÑÑÑŒ баланÑа между негативными и позитивными комментариÑми, вы " +"поддерживаете рабочий Ð±Ð°Ð»Ð°Ð½Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð°." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "ЗапроÑÑ‹ новых функций в данный момент будут игнорированны." + +#: likeback.cpp:839 +msgid "

      Error while trying to send the report.

      Please retry later.

      " +msgstr "

      Ошибка при отÑылке отзыва.

      Попробуйте Ñнова позже.

      " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "ÐšÐ¾Ð¼Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" + +#: likeback.cpp:843 +msgid "" +"

      Your comment has been sent successfully. It will help improve the " +"application.

      Thanks for your time.

      " +msgstr "

      Отзыв отоÑлан уÑпешно.

      Большое ÑпаÑибо за учаÑтие.

      " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Комментарий отправлен" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "&КурÑив" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "Полу&жирный" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Ð’Ñегда" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Ðикогда" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "При наведении курÑора мыши" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "При курÑоре мыши выведеном вне" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "Подчёркнутый:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "&Цвет:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "Цвет при наведении курÑора мыши:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Размер значка:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Ðет" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Размер значка" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "2Ñ… Размера значка" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "3Ñ… Размера значка" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "Предварительный проÑмотр:" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Выключили, но вÑÑ‘ равно видите картинки?" + +#: linklabel.cpp:607 +msgid "" +"

      This is normal because there are several type of notes.
      This setting " +"only applies to file and local link notes.
      The images you see are image " +"notes, not file notes.
      File notes are generic documents, whereas image " +"notes are pictures you can draw in.

      When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
      For instance, " +"when dropping image or text files, image and text notes are created for them." +"
      For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

      If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

      " +msgstr "" +"

      Это нормально. ЕÑÑ‚ÑŒ разные виды заметок.
      Эта наÑтройка влиÑет только " +"на заметки Ñодержащие файлы и ÑÑылки на локальные реÑурÑÑ‹.
      Картинки " +"которые вы видите - заметки Ñодержащие риÑунок.
      Когда файлы броÑаютÑÑ Ð² " +"корзины, %1 ÑамоÑтоÑтельно раÑпознаёт тип файла и выберает ÑпоÑоб его " +"изображениÑ.
      Когда раÑпознаётÑÑ Ñ€Ð¸Ñунок или текÑÑ‚, ÑоздаютÑÑ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ " +"Ñодержащие копию Ñтого риÑунка или текÑта.
      Те файлы которые %2 не может " +"\"понÑÑ‚ÑŒ\"ÑтановÑÑ‚ÑÑ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¾Ð¹ Ñодержащей ÑÑылку к файлу и отображает его в " +"виде картинки предварительного проÑмотра.

      ЕÑлии вам Ñто поведение не " +"нравитÑÑ, наÑтройте его в \"Общее\" отделе ÐаÑтроек Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (облаÑÑ‚ÑŒ " +"\"Показывать Ñодержимое добавленных файлов отноÑÑщихÑÑ Ðº Ñледующему типу\")." +"

      " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Пример" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Свернуть" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Корзина" + +#: mainwindow.cpp:310 +msgid "

      Do you really want to quit %1?

      " +msgstr "

      Выйти из %1?

      " + +#: mainwindow.cpp:312 +msgid "" +"

      Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

      " +msgstr "" +"

      Заметьте что вы не обÑзаны закрыть Ñто приложение перед окончанием работы " +"в KDE. ЕÑли вы оÑтавите приложение работающим, оно будет автоматичеÑки " +"загруженр в начале Ñледующей ÑеÑÑии KDE.

      " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Подтвердите выход" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Создать корзину" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Цвет фона" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "Управление шаблонами..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Одна колонка" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "Две колонки" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Три колонки" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Свободное размещение" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "Шаблон:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(лиÑÑ‚ корзин)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Создать в:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Полезный Ñовет." + +#: newbasketdialog.cpp:217 +msgid "" +"

      Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

      • Grouping baskets by themes or topics;" +"
      • Grouping baskets in folders for different projects;
      • Making " +"sections with sub-baskets representing chapters or pages;
      • Making a " +"group of baskets to export together (to eg. email them to people).
      " +msgstr "" +"

      ÐаÑтоÑтельно рекомендуетÑÑ Ñоздавать иерархии Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ дочерних корзин. " +"Варианты группировки иерархий:

      • по топикам;
      • по проÑктам;
      • Ñ Ñ†ÐµÐ»ÑŒÑŽ имитации Ñтруктуры книги в виде разделов и параграфов;
      • по ÑпоÑобам обработки (пр.: \"ОтоÑлать вÑем на лиÑте\").
      " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Свободное размещение" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Свободное размещение" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(риÑунок)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "ПроÑтой текÑÑ‚" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "ТекÑÑ‚" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "РиÑунок" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "ÐнимациÑ" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Звук" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "СÑылка реÑурÑа" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "СÑылка к приложению" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Цвет" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "ÐеизвеÑтно" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Править обычный текÑÑ‚" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Править текÑÑ‚" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Править риÑунок" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Править анимацию" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Правка имени файла звука" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "Правка имени файла" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Правка ÑÑылки" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Правка ÑÑылки к приложению" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Правка цвета" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Правка неизвеÑтного обьекта" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Открытие текÑта..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Открытие текÑта..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Открытие текÑта в..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Открытие текÑта в..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Открыть текÑÑ‚ в:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Открыть текÑÑ‚ в:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Открытие текÑта..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Открытие текÑта..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Открытие текÑта в..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Открытие текÑта в..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Открыть текÑÑ‚ в:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Открыть текÑÑ‚ в:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Размер" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 Ñ… %2 точек" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Открытие риÑунка..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Открытие риÑунков..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Открытие риÑунка в..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Открытие риÑунков в..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Открыть риÑунок в:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Открыть риÑунки в:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Щёлните мышью Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ размера" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Открываем файл анимации..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Открываем файлы анимации..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Открываем файл анимации в..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Открываем файлы анимации в..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Открыть файл анимации в:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Открыть файлы анимации в:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Тип" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Открыть файл" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Открытие файла..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Открытие файлов..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Открытие файла в..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Открытие файлов в..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Открыть файл в:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Открыть файлы в:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Открыть файл звука" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Загрузка файла звука..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Загрузка файла звука..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Загрузка файла звука в..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Загрузка файла звука в..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Открыть файла звука в:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Открыть файла звука в:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Цель" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Следовать ÑÑылке" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "СÑылка не Ñодержит Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Открытие реÑурÑа ÑÑылки..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Открытие реÑурÑов ÑÑылок..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Открытие реÑурÑа ÑÑылки в..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Открытие реÑурÑов ÑÑылок в..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Открыть реÑÑƒÑ€Ñ ÑÑылки в:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Открыть реÑурÑÑ‹ ÑÑылок в:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1(запуÑтить в терминале)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Комментарий" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Команда" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "ЗапуÑтить Ñту программу" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "СÑылка пуÑта." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "ЗапуÑкаем программу..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "ЗапуÑкаем программы..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB - КраÑныйЗелёныйСиний" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr " КраÑный Зелёный Синий" + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV Тон ÐаÑыщенноÑÑ‚ÑŒ Значение" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr " Тон ÐаÑыщенноÑÑ‚ÑŒ Значение" + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° CSS" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "Ð˜Ð¼Ñ Ñ€Ð°Ñширенного цвета CSS" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "ЯвлÑетÑÑ Web Цветом" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Ðевозможно редактировать риÑунки внутри BasKet. Одна из Ñледующих верÑий " +"обретёт Ñту функцию.\n" +"Открыть Ñтот риÑунок во внешнем редакторе?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Примечание по изменению риÑунков" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Ðевозможно редактировать анимацию внутри BasKet.\n" +"Открыть Ñту анимацию во внешнем редакторе?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Примечание по изменению анимации" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Примечание по изменению цвета" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Тип Ñтой заметки неизвеÑтен\n" +"Перетащите Ñту заметку в программу ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÐµÑ‘ поймёт." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Примечание по правке неизвеÑтной заметки" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Примечание по изменению ÑÑылки" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Ðвто" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Пиктограмма:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "Цель:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "Заго&ловок:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Примечание по изменению ÑÑылки к приложению" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Выберите комманду Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "ÐвтоматичеÑки" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "Коман&да:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&ИмÑ:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Полужирный" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Подчёркнутый" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "По левому краю" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "По центру" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "По правому краю" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "По ширине" + +#: notefactory.cpp:445 +msgid "" +"

      %1 doesn't support the data you've dropped.
      It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

      If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

      " +msgstr "" +"

      %1 не поддерживает данные которые вы Ñюда броÑили.
      Заметка Ñ ÑÑылкой " +"была Ñоздана в замен.

      Сообщите мне еÑли вы хотите увидеть поддержку " +"Ñтого типа данных в будущем BasKet Drop Database.

      " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Этот(и) вид(Ñ‹) MIME не поддерживаютÑÑ" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "ПеремеÑтить Ñюда\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "Копировать Ñюда\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "СÑылка Ñюда\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "Отмена\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Импортировать значок как картинку" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Выбрать размер значка надлежащий импортации в картинку." + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Загрузка Файл Примечание" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Защита поролем" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Личный ключ не выбран." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Корзина" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&ЭкÑпорт" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Импорт" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Перейти" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Заметки" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "Метки" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Панель инÑтрументов Формат" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Фильтр:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "Ðет защиты поролем" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Защитить паролем" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Защитить личным ключём" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "Слева" + +#: settings.cpp:368 +msgid "On right" +msgstr "Справа" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð¸Ð´Ð° дерева корзин:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Сверху" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Снизу" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ фильтрованиÑ:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "Результат глобальной комманды во вÑплывающем уведомлении" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Что Ñто значит?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" +"Приложением можно манипулировать даже не Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°Ñ Ð³Ð»Ð²Ð°Ð½Ð¾Ð³Ð¾ окна. Ð’Ñтавьте " +"Ñодержимое буфера обмена, Ñделайте Ñнимок зоны Ñкрана, поменÑйте активную " +"корзину ролликом мыши над значком в ÑиÑтемном лотке. Щелчок Ñредней клавиши " +"мыши над значком вÑтавлÑет в активную корзину заметку Ñ Ñодержимым буфера " +"обмена." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" +"Ð’ процеÑÑе иÑпользованиÑ, %1 показывает вÑплывающую подÑказку Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ " +"о том что было Ñделано." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" +"ЕÑли главное окно показано, вÑплывающие подÑказки не показываютÑÑ Ñ‚Ð°Ðº как " +"результат манипулÑции показан в главном окне?" + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Значок ÑиÑтемного лотка" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "ПриÑтыковать в ÑиÑтемный лоток" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "Значок выбранной корзины замещает Ñтандартный" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "Скрыть главное окно еÑли мышь выведена вне на" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "/10 Ñекунды" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "КурÑор мыши показывает главное окно поÑле" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð´ÐµÐ¹Ñтвий в корзинах" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "Показывать подÑказки" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "Увеличить размер заметок" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Поведение" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "Превращать * и - в маркер ÑпиÑка" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Спрашивать разрешение перед удалением заметки" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "ЭкÑпортировать метки в текÑÑ‚" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Когда Ñто применимо?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "ОтноÑитÑÑ Ðº переноÑу или копированию заметок во внешний текÑтовый редактор." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "ЕÑли включено, позволÑет вÑтавлÑÑ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼ÐµÑ‚Ð¾Ðº в текÑтовом формате." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"К примеру, лиÑÑ‚ заметок помеченный как Сделать и Сделано " +"ÑкÑпортируетÑÑ ÐºÐ°Ðº [ ] or [x]." + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "Группировка новой заметки Ñ Ð±Ð»Ð¸Ð·-лежащими" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Как группировать новые заметки?" + +#: settings.cpp:557 +msgid "" +"

      When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

      " +msgstr "" +"

      При уÑтановке Ñтой наÑтройки, вы можете Ñгруппировать новую заметку Ñ Ñ‚Ð¾Ð¹ " +"что под курÑором.

      " + +#: settings.cpp:559 +msgid "" +"

      Place your mouse between notes, where you want to add a new one.
      Click " +"on the left of the insertion-line middle-mark to insert a note." +"
      Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

      " +msgstr "" +"

      УÑтановите курÑор мыши между заметками между которыми вы хотите вÑтавить " +"новую.
      Щёлкните Ñлева от значка вÑтавки Ð´Ð»Ñ Ð²Ñтавки заметки." +"
      Щёлкните Ñправа от значка вÑтавки Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¸ новой " +"заметки Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¾Ð¹ выше или ниже новой. Вертикальное (отноÑительно " +"разделительной полоÑÑ‹) раÑположене курÑора мыши определÑет Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ из " +"заметок произойдёт группировка.

      " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Ðичего не делать" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Ð’Ñтавить заметку отражающую буфер обмена" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Ð’Ñтавить заметку Ñ ÑÑылками на приложениÑ" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Выбрать цвет Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ñкрана" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Загрузить из файла..." + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "Ð’Ñтавить Ñылку Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· меню KDE..." + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Ð’Ñтавить &значок..." + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+ÑреднÑÑ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° мыши:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "." + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "ÐвтоматичеÑки замыкать защищённые корзины поÑле" + +#: settings.cpp:603 +msgid " minutes" +msgstr " минут" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "ИÑпользовать агент GnuPG Ð´Ð»Ñ Ð»Ð¸Ñ‡Ð½Ð¾Ð³Ð¾/публичного " + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "РаÑположение новых заметок:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Ðа меÑто выделенной заметки" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "Размер новых риÑунков:" + +#: settings.cpp:718 +msgid "&by" +msgstr "на" + +#: settings.cpp:721 +msgid "pixels" +msgstr "пикÑелов" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "Макет..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Показывать Ñодержимое добавленных файлов отноÑÑщихÑÑ Ðº Ñледующему типу" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "ПроÑтой текÑÑ‚" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "Ñтраница формата HTML" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "РиÑунок или анимациÑ" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "Звуки" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Ðудио запиÑÑŒ конференции" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Годовой отчёт" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Папка \"Домой\"" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "ЗапуÑтить %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "Звук" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Файл" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑÑылка" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "Сетевой реÑурÑ" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "Приложение" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "Открыть заметки Ñ Ñ‚ÐµÐºÑтом во внешнем приложении:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Открыть текÑÑ‚:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "Открыть заметки Ñ Ñ€Ð¸Ñунками во внешнем приложении:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Открываем в:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "Открыть заметки Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸ÐµÐ¹ во внешнем приложении:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Открываем в:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "Открыть заметки Ñо звуками во внешнем приложении:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Открыть заметки Ñо звуками в:" + +#: settings.cpp:873 +msgid "" +"

      If checked, the application defined below will be used when opening that " +"type of note.

      Otherwise, the application you've configured in " +"Konqueror will be used.

      " +msgstr "" +"

      ЕÑли помечено, приложение упомÑнутое ниже будет иÑпользовано Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ " +"Ñтого типа заметок

      Ð’ противном Ñлучае приложение пропиÑанное в " +"Konqueror будет иÑпользовано по-умолчанию.

      " + +#: settings.cpp:882 +msgid "" +"

      Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

      " +msgstr "

      Выберите приложение Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸.

      " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Как изменить приложение иÑпользуемое Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Web ÑÑылок?" + +#: settings.cpp:904 +msgid "" +"

      When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

      Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
      • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

      Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

      For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

      " +msgstr "" +"

      Ð©Ñ‘Ð»ÐºÐ°Ñ Ð½Ð° линк, вы откроете Ñодержимое привÑзанного файла в " +"ÑоответÑвуйщем приложении, что похоже на поведение в оÑтальных чаÑÑ‚ÑÑ… " +"операционной ÑиÑтемы.

      ЕÑли еÑтиь желание изменить приложение в котором " +"откроетÑÑ Ð»Ð¸Ð½Ðº:

      • Откройте Центр Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐаÑтройка KDE) (или " +"запуÑтите \"kcontrol\" в коммандной Ñтроке);
      • Перейдите в " +"\"Компоненты KDE\" и \"Выбор Компонентов\" Ñекцию;
      • Выберите \"Браузер" +"\", активируйте \"в Ñледующем браузере:\" и введите комманду запуÑка другого " +"браузера. (Примеры: \"firefox\" или \"epiphany\").

      С Ñтих пор " +"вÑе линки начинающиеÑÑ Ñ \"http://...\", будут открыватьÑÑ Ñ‚Ð°Ð¼ где " +"вам надо.

      " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Как изменить приложение иÑпользуемое Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² и меÑтных ÑÑылок?" + +#: settings.cpp:923 +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" +"

      Что бы научить приложение открывать линки в ÑпецифичеÑких приложениÑÑ… " +"опробуйте Ñледующий ÑпоÑоб.

      ДопуÑтим, мы хотим открывать HTML линки в " +"Ñпециальном браузере, но оÑтольные файлы в Ñтандарном режиме. Следуйте Ñтим " +"шагам Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ типа фалов.

      • Откройте Центр Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ " +"(ÐаÑтройка KDE) (или запуÑтите \"kcontrol\" в коммандной Ñтроке);
      • Выберите \"Компоненты KDE\" и \"ÐÑÑоциации Файлов\" Ñекцию;
      • Ð’ " +"дереве, выберите \"text\", затем \"html\";
      • Добавьте выше желаемое " +"первым в лиÑте приложений;
      • Повторите процедуру в типе \"application -" +"> xhtml+xml\".
      " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "Импорт дерева данных" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "до Импорт ПримечаниÑ?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" +"Сохранить первоначальную Ñтруктуру дерева данных (вÑе заметки в отдельных " +"корзинах)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Заметки первого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð² отдельных корзинах" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "Ð’Ñе заметки в одной корзине" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Импорт текÑÑ‚ файл" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Формат текÑÑ‚ файла" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "Заметки разделены пуÑтыми линиÑми" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Одна заметка на линию" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "Заметка начинаетÑÑ Ñ (-)" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "Заметка начинаетÑÑ Ñ (*)" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "ИÑпользовать другую пунктуацию:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "Ð’Ñе заметки в одной корзине" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "Из KJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "Из Заметок KDE" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Из Sticky Notes" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Из Tomboy" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "Из %1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "Ошибка при импорте файла. Файл повреждён или в неправильном формате." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Файл в неправильном формате" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Заметка зашифрована. Фильтр импорта пока не поддерживает зашифрованные " +"заметки. Уберите шифрацию Ñ TaxCards и попытайтеÑÑŒ импортировать опÑÑ‚ÑŒ." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "Импорт зашифрованых заметок пока не поддерживаетÑÑ" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" +"Ð—Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ°.
      Импорт зашифрованых " +"заметок пока не поддерживаетÑÑ. Уберите шифрацию Ñ TaxCards и попытайтеÑÑŒ " +"импортировать опÑÑ‚ÑŒ.
      " + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" +"

      Закрытие главного окна позволÑет %1 работать в ÑиÑтемном лотке. " +"ИÑпользуйте функцию Выйти Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтой программы." +"

      " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "ПриÑтыковывать к СиÑтемному лотоку" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Выбранное (%1) вÑтавлено в корзину %2" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Свернуть" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&ВоÑÑтановить" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 Заблокированный" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Ð’ работе" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "Флажок отÑутÑтвует" + +#: tag.cpp:544 +msgid "Done" +msgstr "Готово" + +#: tag.cpp:545 +msgid "Progress" +msgstr "Выполнение" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Приоритет" + +#: tag.cpp:599 +msgid "Low" +msgstr "Ðизкий" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Средний" + +#: tag.cpp:600 +msgid "High" +msgstr "Ð’Ñ‹Ñокий" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Предпочтение" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Плохой" + +#: tag.cpp:601 +msgid "Good" +msgstr "Хороший" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Великолепный" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Выделение" + +#: tag.cpp:667 +msgid "Important" +msgstr "Важное" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Очень важное" + +#: tag.cpp:668 +msgid "Idea" +msgstr "ИдеÑ" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "И." + +#: tag.cpp:668 +msgid "Title" +msgstr "Заголовок" + +#: tag.cpp:669 +msgid "Code" +msgstr "Код" + +#: tag.cpp:669 +msgid "Work" +msgstr "Работа" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "Р." + +#: tag.cpp:687 +msgid "Personal" +msgstr "ПерÑональные" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "П." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Задорное" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "ÐаÑтроить метки" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ°" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Ðовое cоÑтоÑние метки" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "ПеремеÑтить вверх (Ctrl+Shift+Вверх)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "ПеремеÑтить вниз (Ctrl+Shift+Вниз)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Метка" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "Удалить" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "КомбинациÑ:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "УнаÑледовано родÑтвенными заметками" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "СоÑтоÑние метки" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&ИмÑ:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "Удалить" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "Эмблема" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "Фон:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Зачёркнутый" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "ТекÑÑ‚:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "&Цвет:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Шрифт:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Размер:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "СловеÑный Ñквивалент:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "Этот текÑÑ‚ будет иÑпользован в замен ÑоÑтоÑÐ½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸ Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… операций." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñтроки" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Что Ñто значит?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" +"Когда заметка имеет много Ñтрок, Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²ÑтавлÑет СловеÑный Ñквивалент " +"метки в начало каждой Ñтроки." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" +"Когда заметка имеет много Ñтрок, метка первой Ñтроки вÑтавлÑÐµÑ‚Ñ ÐºÐ°Ðº " +"ÑловеÑный Ñквивалент в начало первой Ñтроки, а метка в поÑледней заметке в " +"каждую поÑледующую Ñтроку." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "УдалÑÑ Ñту метку, вы удалите её из вÑех заметок." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Подтвердите удаление метки" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "Удалить метку" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "УдалÑÑ Ñто ÑоÑтоÑние метки, вы удалите метки Ñодержащие его из вÑех заметок." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "Подтвердите удаление ÑоÑтоÑÐ½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "Удалить ÑоÑтоÑние метки" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 на 16 точек" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 на 22 точки" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 на 32 точки" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 на 48 точек" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 на 64 точки" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 на 128 точек" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Изменить размер окошка Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° картинки\n" +"и закройте его (или нажмите клавишу Esc) Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹." + diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..999bf4a --- /dev/null +++ b/po/tr.po @@ -0,0 +1,3329 @@ +# translation of basket.po to +# translation of tr.po to +# translation of baskettr.po to +# +# Serdar Soytetir , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: tr\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-05-18 16:54+0300\n" +"Last-Translator: Serdar Soytetir \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.11.4\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Serdar Soytetir" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "tulliana@gmail.com" + +#: aboutdata.cpp:27 +msgid "" +"

      Taking care of your ideas.

      A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

      " +msgstr "

      Düşüncelerinize iyi bakın.

      Düşüncelerinizi tam olarak aklınıza geldiği gibi ve hızlı bir şekilde kaydetmenize, sonradan kolayca bulmanıza yarayan bir not alma uygulamasıdır. Notlarınızı düzenlemek asla bu kadar kolay olmadı.

      " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Basket Not Tutma Aracı" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "Yazar, geliştirici" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Sepet şifrelemesi, Kontact entegrasyonu, KnowIt dosyalarını içe aktarma" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "Otomatik sepet kilitleme, kaydetme-durum simgesi, HTML kopyala/yapıştır, sepet dı ipucu, basket adına atma" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "Simge" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "Basket Arşivi Olarak Kaydet" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "Basket arşivi olarak kaydediliyor. Lütfen bekleyin..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "Bu dosya bir basket arşivi değil." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "Basket Arşiv Hatası" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "Bu dosya bozuk. Açılamadı." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "Bu dosya %1 uygulamasının daha yeni bir sürümü ile oluşturulmuş. Bu dosya açılamaz ancak dosyanın içerisindeki bilgilere erişebileceksiniz. Örneğin, daha yeni sürümlerde kullanılan bazı notlarınız kaybolabilir. Dosyayı yeniden kaydederken başka bir dosyaya kaydedin ve orijinal dosyayı koruyun." + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "Bu dosya %1 uygulamasının daha yeni bir sürümü ile oluşturuldu. Dosyayı açabilmek için lütfen uygulamayı daha yeni bir sürüme yükseltin." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "Yedekle & Yedek Yükle" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "Kaydetme Dizini" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
      %1" +msgstr "Sepetleriniz ÅŸu dizine kaydedildi:
      %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "&Başka Bir Dizine Taşı" + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "Varolan B&aşka Bir Dizin Kullan..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "Bu neden yapılır?" + +#: backup.cpp:72 +msgid "" +"

      You can move the folder where %1 store your baskets to:

      • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
      • Store your " +"baskets on a server to share them between two computers.
        In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
        Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

      Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

      " +msgstr "" +"

      %1'nun sepetlerinizi depoladığı dizini başka bir yere taşıyabilirsiniz:

      • Sepetlerinizi " +"Ev Dizininizdeki görünür bir yere taşıyarak, ~/Notlar ya da ~/Sepetler gibi, istediÄŸiniz zaman elle yedekleyebilirsiniz.
      • Sepetlerinizi bir sunucu üzerine taşıyarak iki bilgisayar arasında paylaÅŸabilirsiniz.
        Bu durumda paylaşılan dizini yerel dosya sistemine bağlayıp %2'ya bu dizini kullanmasını söylemelisiniz.
        Uyarı: %3'yu aynı anda iki bilgisayarda çalıştırmamalısınız. Aksi durumda iki uygulama arasında eşzamanlama kaybolabileceğinden veri kaybedebilirsiniz." +"

      Lütfen dizin içeriğini elle değiştirmemeniz gerektiğini unutmayın (bir sepet dizinine dosya eklemek o dosyayı sepetinize eklemez).

      " + +#: backup.cpp:89 +msgid "Backups" +msgstr "Yedekler" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "&Yedekle..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "&Bir Yedeklemeyi Geri Yükle" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "Son yedekleme: yok" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "Son yedekleme: %1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "Seperlerin Taşınacağı Bir Dizin Seçin" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "%1 dizini boş değil. Üzerine yazmak ister msiniz?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "Dizinin Üzerine Yazılsın mı?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "&Üzerine Yaz" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Sepetleriniz %1 dizinine başarıyla taşındı. Bu değişikliğin etkin olabilmesi için %2 yeniden başlatılacak." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "Sepetlerinizi Kaydetmek İçin Oluşturulmuş Bir Dizin Seçin" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "Sepet kaydetme dizininiz %1 olarak değiştirildi. Bu değişikliğin etkin olabilmesi için %2 yeniden başlatılacak." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "Sepetler_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "Gzip Tarafından Sıkıştırılan Tar Arşivleri" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "Tüm Dosyalar" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "Sepetleri Yedekle" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "%1 dosyası zaten var. Dosyanın üzerine yazmak ister misiniz?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "Dosyanın üzerine yazılsın mı?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "Sepetler yedekleniyor. Lütfen bekleyin..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "Basket Arşivi Aç" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "README.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "Bu, sepetlerinizin %1 yedeğinizi geri yüklemeden önceki halinin güvenlik için alınan bir kopyasıdır." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "Eğer geri yükleme başarılı olduysa ve istediklerinizi geri yüklediyseniz bu dizini silebilirsiniz." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "Eğer ger yükleme sırasında birşeyler ters gittiyse bu klasörü sepetleriniz kaydetmek için kullanabilirsiniz ve böylece hiç veri kaybetmezsiniz." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "\"Sepet\" -> \"Yedekle & Yedeği Geri Yükle...\" -> \"Varolan Başka Bir Dizin Kullan...\" yolunu takip ederek o dizini seçin." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "%1Arşivi geri yükleniyor. Lütfen bekleyin..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "Yedeği geri yükleme sürecinde birşeyler ters giderse %1 dosyasını okuyun." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "Sepetleri Yeniden Yükle" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "Bu dosya ya bir sepet arşivi değil ya da bozuk. İçeriye aktarılamaz. Bu dosya yerine eski sepetleriniz kullanılacak." + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "Geri Yükleme Hatası" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "Yedeğiniz %1 dizinine başarıyla geri yüklendi. Bu değişikliğin etkin olabilmesi için %2 yeniden başlatılacak." + +#: backup.cpp:338 +msgid "Restart" +msgstr "Yeniden Başlat" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "Geri Yüklemeden Önceki Sepetler" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "Geri Yüklemeden Önceki Sepetler (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "Yeni not süzgece uymuyor,gizli." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "Bir yeni not süzgece uymuyor, gizli." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "Bazı yeni notlar süzgece uymuyorlar, gizliler." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "Yeni notlar süzgece uymuyorlar,gizliler." + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "Grupla" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "Ekle" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "%1 sepete atıldı" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" +"Bu ileti asla ortaya çıkmamalıdır. Eğer bu iletiyi gördüyseniz bu programda " +"hatalar var demektir! Lütfen hataları geliştiriciye raporlayın." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"Notu buraya ekle\n" +"Daha fazla seçenek için sağ tıklayın" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "Şu sütunları yeniden boyutlandır" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "Bu grubu yeniden boyutlandır" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "Bu notu yeniden boyutlandır" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "Bu notu seç ya da taşı" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "Bu grubu seç ya da taşı" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "Bu nota etiket ata ya da bu notun etiketini kaldır" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "Atanmış Etiketler: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1 %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "Bu grubu genişlet" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "Bu grubu topla" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"Notu alttaki ile grupla\n" +"Daha çok seçenek için sağ tıklayın" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"Notu üstteki ile grupla\n" +"Daha çok seçenek için sağ tıklayın" + +#: basket.cpp:2818 +msgid "Added" +msgstr "Eklendi" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "Son Düzenleme" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1:%2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "Eklemek yerine gruplamak için sağa tıklayın" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "Eklemek yerine gruplamak için sola tıklayın" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "&Kilidi Aç" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "Parola korumalı sepet." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "Erişmek için Kilidi Aç düğmesine tıklayın." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
      this version of %1." +msgstr "%1 uygulamasının bu sürümünde
      ÅŸifreleme desteklenmiyor." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
      locking duration in " +"the application settings." +msgstr "Sepetlerin otomatik kilitlenmesini engellemek için
      kilitlenme süresini belirleyen ayarı uygulamanın ayarlarından değiştirin." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "Yükleniyor..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "&Özelleştir..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "Bu etikete göre &Süz" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "Bu &İfadeye göre Süz" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "Etiketler" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "Gerçekten %n adet notu silmek istediğinizden emin misiniz?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "Notları Sil" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "Not panoya kopyalandı." + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "Not panoya alındı-kesildi." + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "Notlar seçilen yere kopyalandı." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "Bu not açılamadı." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "Bu dosyayı açmak için yetkiniz yok." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "Dosyaya Kaydet" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "Lütfen aşağıdaki anahtar için parolayı girin:" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "Lütfen %1 sepeti için parolayı girin:" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "Lütfen %1 sepeti için bir parola atayın:" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "Sepet Verilerini Kaydetmek için Yetersiz Disk Alanı" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "Yanlış Sepet Dosyası İzinleri" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" +"Uygulamanın değişikliklerinizi güvenli şekilde kaydetmesi için lütfen " +"diskinizden dosyaları silin %1." + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" +"%1 için dosya izinleri yanlış. Lütfen o dosyalara yazma hakkınız olup " +"olmadığını kontrol edin." + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "Kaydetme Hatası" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "Bu yeni sepet için klasör oluşturma işlemi başarısız oldu." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Sepet Oluşturma İşlemi Başarısız Oldu" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "Bu yeni sepet için şablon kopyalama işlemi başarısız oldu." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "Bu yeni sepet için şablon özelleştirme işlemi başarısız oldu." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Sepet Özellikleri" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "İsim" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "Arkaplan re&smi:" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "Arkaplan &rengi:" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "&Metin rengi:" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(Hiçbiri)" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "Düzenleme" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "&Sütunlar:" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "&Serbest Biçim" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "&Zihin haritası" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "&Klavye Kısayolları" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "Birkaç ipucuna bakın..." + +#: basketproperties.cpp:134 +msgid "" +"

      Easily Remember your Shortcuts:
      With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
      For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

      Local " +"vs Global:
      The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

      Show vs Switch:
      The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

      " +msgstr "" +"

      Kısayollarınızı Kolayca Hatırlayın:
      İlk seçenek " +"Alt+Harf ile sepete kısayol vermektir. Bu işlem sepet " +"ağacında sepetin adında ilgili harfin altını çizecektir.
      Örneğin eğer " +"Türküler isimli bir sepete kısayol olarak Alt+T atamışsanız bu " +"sepet sepet ağacında Türküler şeklinde görünecektir. Bu ipucu " +"kısayollarınızı görselleştirerek daha çabuk hatırlamanıza yardımcı olur.

      Yerel & Genel:
      Birinci seçenek ana pencere aktif " +"iken sepeti göstermenizi sağlar. Genel kısayollar ise ana pencere gizli olsa " +"bile her yerde geçerlidir.

      Göster & Seç:
      Son " +"seçenek bir sepeti ana pencereyi açmadan geçerli hale getirir. Örneğin pano " +"içeriğini ya da seçimini geçerli sepete yapıştır gibi işlemler için genel " +"kısayol atamak ve her yerden bu işlemleri yapabilmek kullanışlı olacaktır.

      " + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "Bu sepeti &göster" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "Bu sepeti göster (&genel kısayol)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "Bu sepeti seç (genel kısayol)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "Eğer henüz kaydedilmemiş bir değişiklik varsa gösterir." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+bırak: kopyala, Shift+bırak: taşı, Shift+Ctrl+bırak: bağlantı" + +#: basketstatusbar.cpp:148 +msgid "

      This basket is locked.
      Click to unlock it.

      " +msgstr "

      Bu sepetkilitli.
      Kilidi açmak için tıklayın.

      " + +#: basketstatusbar.cpp:153 +msgid "

      This basket is unlocked.
      Click to lock it.

      " +msgstr "

      Bu sepetkilitli deÄŸil.
      Kilitlemek için tıklayın.

      " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "Genel" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "Ana pencereyi göster/gizle" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "Ana pencere gizli ise göstermenizi, görünüyor ise gizlemenizi sağlar." + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "Pano içeriğini geçerli sepete yapıştır" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "Ana pencereyi açmadan pano içeriğini geçerli sepete yapıştırmanızı sağlar." + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "Geçerli sepet adını göster" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "Ana pencereyi açmadan geçerli sepeti bilmenizi sağlar." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "Seçimi geçerli sepete yapıştır" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "Ana pencereyi açmadan pano seçimini geçerli sepete yapıştırmanızı sağlar." + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "Yeni bir sepet oluştur" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" +"Ana pencereyi açmadan yeni bir sepet oluşturmanızı sağlar (daha sonra bu " +"yeni sepete bir not ekle, panoyu ya da seçimi yapıştır gibi işlemler için " +"genel kısayol atayabilirsiniz)." + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "Önceki sepete git" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "Ana pencereyi açmadan geçerli sepet olarak önceki sepeti seçmenizi sağlar." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "Sonraki sepete git" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "Ana pencereyi açmadan geçerli sepet olarak sonraki sepeti seçmenizi sağlar." + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "Metin notu ekle" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "Ana pencereyi açmadan geçerli sepete bir metin notu eklemenizi sağlar." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "Resim notu ekle" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "Ana pencereyi açmadan geçerli sepete bir resim notu eklemenizi sağlar." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "Bağlantı notu ekle" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "Ana pencereyi açmadan geçerli sepete bir bağlantı notu eklemenizi sağlar." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "Renk notu ekle" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "Ana pencereyi açmadan geçerli sepete bir renk notu eklemenizi sağlar." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "Ekrandan renk al" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "" +"Ana pencereyi açmadan geçerli sepete ekranın bir pikselinden alınan bir renk " +"notu eklemenizi sağlar." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "Ekran görüntüsü yakala" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "" +"Ana pencereyi açmadan geçerli sepete yakalanan bir ekran görüntüsü notu " +"eklemenizi sağlar." + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Sepetler" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "Lütfen İngilizce ya da Fransızca yazın." + +#: bnpview.cpp:355 +msgid "" +"

      Basket Tree

      Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" +"

      Sepet Ağacı

      İşte burada sepetlerinizin listesi var. Verilerinizi " +"farklı sepetlere atarak organize edebilirsiniz. Konularına göre sepetleri " +"gruplandırabilir, bir sepet içerisinde başka bir sepet oluşturabilirsiniz. " +"Sepetlerinize tıklayarak gözatabilirsiniz ya da sürükleyip bırakarak yeniden " +"düzenleyebilirsiniz." + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "&Basket Arşivi..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "&Pencereyi Gizle" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "&HTML Web Sayfası..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "&Kjots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "&Yapışkan Notlar" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "&Tomboy" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "Metin &Dosyası..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "&Yedekle && Yedeği Geri Yükle..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "&Sil" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "Tüm notları seçer" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "Hiçbirsini Seçme" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "Seçilen notların hiçbirisini seçme" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "Seçimi Tersine &Çevir" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "Şimdiki seçilen notların seçimini tersine çevirir" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "&Düzenle..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "&Aç" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "&Birlikte Aç..." + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "Dosyaya Kay&det..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "&Grupla" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "Grubu Çö&z" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "En ü&ste Taşı" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "&Yukarı Taşı" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "A&şağı Taşı" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "En a<a Taşı" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "&Metin" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "Bağla&ntı" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "&Resim" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "&Renk" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "&Başlatıcı" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "KDE Menüsünden &Başlatıcı..." + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "Simge &Ekle..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "Dosyadan &Yükle..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "E&krandan Renk" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "Ekran &Görüntüsü Yakala" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "&Yeni Sepet..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "Yeni &Alt-Sepet..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "Yeni &Kardeş-Sepet..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "&Yeni" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "&Kaldır" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "Pa&rola..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "&Kilitle" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "&Süzgeç" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "Tüm &Sepetleri Süz" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "Süzgeci &Kaldır" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "&Önceki Sepet" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "So&nraki Sepet" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "Sepeti &Topla" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "Sepeti &Genişlet" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "Genel Kısayolları &Yapılandır..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "&Hoşgeldin Sepetleri" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "Düz Metin Notları Dönüştürme" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "Düz metin notları zengin metin notlarına dönüştürülüyor..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "Kilitli" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "Not yok" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "Toplam %n not" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "seçili %n" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "tüm uyanlar" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "süzgeç yok" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "süzgece uyan %n" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "Yakalanan renk %1sepetine eklendi." + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "Düz metin notları zengin metin notlarına dönüştürüldü." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "Düönüştürme İşlemi Bitti" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "Dönüştürülecek düz metin notu yok." + +#: bnpview.cpp:1484 +msgid "" +"

      The file basketui.rc seems to not exist or is too old.
      %1 cannot " +"run without it and will stop.

      Please check your installation of %2." +"

      If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

      As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

      " +msgstr "" +"

      basketui.rc dosyanız yok ya da çok eski.
      %1 bu dosya olmadan " +"çalışamaz ve durur.

      Lütfen %2 kurulumunuzu kontrol edin.

      Sistem geneline uygulamayı kurmak için yönetici erişiminiz yoksa " +"indirdiğiniz arşivden basketui.rc dosyasını %4 " +"adresine kopyalayın.

      Eğer bu da olmazsa ve uygulamayı doğru " +"kurduğunuzdan eminseniz ama bir deneme sürümünü kullanyorsanız %5basketui.rc " +"dosyasını silmeyi deneyin.

      " + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "Kaynak Bulunamadı" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "Not eklenemez." + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "Yakalanan ekran görüntüsü %1sepetine eklendi." + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "Sepeti Sil" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "Sadece şu sepetli Sil" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "Sepeti & Alt Sepetlerini Sil" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "%1 sepetini ve içeriğini silmek istediğinizden emin misiniz?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "Sepeti Kaldır" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "&Sepeti Kaldır" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
      Do you want to remove " +"them too?
      " +msgstr "" +"%1 sepetinin alt sepetleri var.
      Onları da silmek istiyor " +"musunuz?
      " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "Alt Sepetleri Sil" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "Alt Sepetleri &Kaldır" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Basket Arşivleri" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "Pano içeriği %1 sepete yapıştırıldı" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "Seçilen %1 sepete yapıştırıldı" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "Not eklendi." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "%1 sepeti kilitli" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(Kilitli)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "Yeni E&tiket Ata..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "&Tümünü Kaldır" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" +"%1 çöktü! Bunun için üzgünüz.\n" +"\n" +"Fakat bu her şeyin sonu değil! Bu çökme konusunda bize yardım edebilirsiniz. " +"Aşağıdaki çökme bilgileri için sadece Gönder düğmesine tıklayabilir, " +"birazcık zaman ayırarak çökmenin nasıl ortaya çıktığını açıklayabilirsiniz.\n" +"\n" +"Çok Teşekkürler." + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" +"Aşağıdaki bilgiler geliştiricilerin problemi anlamasına yardımcı olacaktır, " +"lütfen bilgiler üzerinde değişiklik yapmayın." + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" +"%1 çöktü! Bunun için üzgünüz.\n" +"\n" +"Fakat bu herşeyin sonu değil! Büyük olasılıkla bu problemi çözen bir " +"güncelleme vardır. Lütfen dağıtımınızın deposuna bakın." + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "Hata Ayıklama Penceresi" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "Sepeti HTML Olarak Aktar" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "HTML Dosya Adı" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "&Dosya adı:" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "Bağlantı notu olan &yerel dosyaları göm" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "Bağlantı notu olan &yerel klasörleri göm" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "&Hedef klasörde bulunan önceki dosyaları sil" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "İzlenim için &biçim" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "Süzgeci Kaldır" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "&Süzgeç:" + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "E&tiket: " + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "Tüm Sepetleri Süz" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(Etiketsiz)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(Etiketli)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "Otomatik Yazım Denetimi Yap" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "Yazım Denetimi Yap..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "Çizelgelemeye İzin Ver" + +#: formatimporter.cpp:132 +msgid "" +"

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " +msgstr "" +"

      Klasör yansılama artık mümkün değil ( daha fazla bilgi için basket.kde.org adresine bakın.).

      %" +"1 klasörü sepet gereksinimleri için kopyalandı. Bu klasörü ya da sepeti " +"veya her ikisini de silebilirsiniz. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "Dizin Yansısı Ekle" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML Dökümanları" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "HTML Olarak Aktar" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "HTML olarak aktarılıyor. Lütfen bekleyin..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "%1_dosya" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "simgeler" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "resimler" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "sepetler" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "veri" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "Not almaya ve her çeşit veriyi el altında tutmaya yarayan ve bir KDE aracı olan Basket uygulamasının %1 sürümü ile oluşturuldu." + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(Öntanımlı)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "Diğer..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "Özel Anahtar Listesi" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "E-Posta" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "Kimlik" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "Bir anahtar seçin:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "Anahtar listeleme işlemi beklenmedik şekilde kesildi." + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "Bu Public key şifreleme anlamına gelmez" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "Desteklenmeyen algoritma" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "Yanlış parola." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "Simge Seç" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "&Gözat..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(Tüm Simgeler)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(Geçerli)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "İşlemler" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "Uygulamalar" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "Aygıtlar" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "Dosya Sistemi" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "Dosya Türleri" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Sime Dosyaları (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "Hoşlandığınız bir özellik ile ilgili uygulamanın geliştiricisine bir yorum gönderin" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "Hoşlanmadığınız bir özellik ile ilgili uygulamanın geliştiricisine bir yorum gönderin" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "Uygulamanın gösterdiği tutarsız bir davranışı ile ilgili uygulamanın geliştiricisine bir yorum gönderin" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "Olmasını istediğiniz bir özellik ile ilgili uygulamanın geliştiricisine bir yorum gönderin" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "&Gelitiriciye Bir Yorum Gönder" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "%1 uygulamasının deneme sürümüne hoş geldiniz." + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "%1 Uygulamasına Hoşgeldiniz." + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "Uygulamayı geliştirebilmek için bize yardım edin, yorumlarınız önemli." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "Beğendiğiniz ya da hayal kırıklığına uğradığınız her durumda, pencere başlık çubuğunun altında bulunan ilgili yüze tıklayarak kısaca neyi beğendiğinizi ya da beğenmediğinizi yazıp, Gönder düğmesine tıklayın." + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "Beğendiğiniz her durumda, pencere başlık çubuğunun altında bulunan gülen yüze tıklayarak kısaca neyi beğendiğinizi yazıp, Gönder düğmesine tıklayın." + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "Hayal kırıklığına uğradığınız her durumda, pencere başlık çubuğunun altında bulunan somurtkan yüze tıklayarak kısaca neyi beğenmediğinizi yazıp, Gönder düğmesine tıklayın." + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "Bir hata bildirmek istediğinizde de aynı yolu izleyin: pencerenin sağ köşesinde bulunan kırık nesne simgesine tıklayarak hatayı tarif edin ve Gönder düğmesine tıklayın." + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "Uygulamada bir hata bulduğunuzda pencere başlık çubuğunun altındaki kırık nesne simgesine tıklayarak hatalı davranışı kısaca anlatıp Gönder düğmesine tıklayın." + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "Örnekler:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "Yeni arayüzden hoşlandım. Çok dinlendirici." + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "Sihirbazın hoş geldin sayfasından hoşlanmıyorum.Çok zaman harcıyor." + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "Uygulama tutarsız bir davranış gösterdi ekle düğmesine tıkladığımda hiçbir şey olmuyor." + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "Yaptıklarımı e-posta ile göndermemi sağlayacak yeni bir özellik istiyorum." + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "Uygulamanın İyileştirilmesine Yardım Et" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "E-posta Adresi" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "Lütfen e-posta adresinizi girin." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" +"Bu sadece yorumlarınızla ilgili sizinle bağlantı kurmak, hatayı nasıl " +"oluşturduğunuzu sormak ve hata düzeltmelerini test etmeniz için " +"size gönderbilmek için kullanılacak." + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "E-posta adresi yazmak isteğe bağlıdır. Eğer bir adres girmezseniz yorumlarıız anaonim olarak gönderilecektir." + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "Gliştiricilere Bir Yorum Gönder" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "Uygulamanın Geliştiricilerine Şu Konuda Bir Yorum Gönder:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "Hoş&landığınız bir şey" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "Hoşlan&madığınız bir şey" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "Bu uygulamanın &gösterdiği bir tutarsız davranış" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "İstediğiniz yeni bir &özellik" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "Pencerenin başlık ç&ubuğu altında yorum düğmelerini göster" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "&Yorum Gönder" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "&E-posta Adresi..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "Lütfen %1 hakkındaki düşüncelerinizin kısa bir özetini girin." + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "Lütfen İngilizce yazın." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "Çevrimiçi çeviri aracını kullanabilirsiniz." + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "Yaptığınız yorumlar uygulamanın geliştirilmesinde işe yarayacaktır, olumlu ve olumsuz yorumlarınızı aynı oranda göndermeye çalışın." + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "Lütfen yeni özellikler istemeyin: istekleriniz kabul edilmeyecektir." + +#: likeback.cpp:839 +msgid "

      Error while trying to send the report.

      Please retry later.

      " +msgstr "" +"

      Hata raporu gönderilirken hata oluştu.

      Lütfen daha sonra tekrar " +"deneyin.

      " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "Gönderme Hatası" + +#: likeback.cpp:843 +msgid "" +"

      Your comment has been sent successfully. It will help improve the " +"application.

      Thanks for your time.

      " +msgstr "" +"

      Yorumunuz başarılı şekilde gönderilmiştir.

      Zaman ayırdığınız için " +"teşekkür ederiz. Yorumunuz uygulamanın gelişimine katkıda bulunacaktır.

      " + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "Yorum Gönerildi" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "İta&lik" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "&Kalın" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "Her zaman" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "Asla" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "Fare üzerindeyken" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "Fare dışardayken" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "Altı &çizili:" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "&Renk:" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "&Fare etkinleştirmesi rengi:" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "Simge boyutu:" + +#: linklabel.cpp:600 +msgid "None" +msgstr "Hiçbiri" + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "Simge boyutu" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "Simgeyi iki kat büyült" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "Simgeyi üç kat büyült" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "&Önizleme" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "Önizlemeyi kapattığınız halde resimleri mi görüyorsunuz?" + +#: linklabel.cpp:607 +msgid "" +"

      This is normal because there are several type of notes.
      This setting " +"only applies to file and local link notes.
      The images you see are image " +"notes, not file notes.
      File notes are generic documents, whereas image " +"notes are pictures you can draw in.

      When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
      For instance, " +"when dropping image or text files, image and text notes are created for them." +"
      For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

      If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

      " +msgstr "" +"

      Bu normaldir çünkü çeşitli not tipleri vardır.
      Bu ayarlar sadece " +"dosyalara ve yerel bağlantılara uygulanır.
      Gördüğünüz resimler dosya " +"notları değil resim notlarıdır.
      Dosya notları düzenlenebilen resim " +"otlarının aksine temel dokümanlardır.
      Dosyalar sepete atılırken %1 " +"dosyaların tipini belirler ve dosyanın içeriğini size gösterir.
      Örneğin " +"resim ya da metin dosyaları sepete atılırken bu dosyalar için resim ve metin " +"notları oluşturulur.
      %2 tarafından tanınmayan dosyalar temel dosya " +"notları olarak kabul edilir ve bir simge ya da dosya adı ile önizlemesi " +"gösterilir.

      Eğer uygulamanın dosyanın içeriğine göre önizleme " +"göstermesini istemiyorsanız \"Genel\" sayfasına gelerek \"Aşağıdaki Dosya " +"Tiplerinde Eklenen Dosyanın İçeriğini Göster\" içindeki \"Resim ya da " +"animasyon\" grubunun işaretini kaldırın.

      " + +#: linklabel.cpp:623 +msgid "Example" +msgstr "Örnek" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "Küçült" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Sepet" + +#: mainwindow.cpp:310 +msgid "

      Do you really want to quit %1?

      " +msgstr "

      %1 uygulamasından çıkmak istediğinizden emin misiniz?

      " + +#: mainwindow.cpp:312 +msgid "" +"

      Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

      " +msgstr "

      KDE oturumunuzu kapatmadan önce uygulamadan çıkmak zorunda değilsiniz. Eğer uygulama çalışırken oturumunuzu kapattıysanız sonraki oturumda uygulama geri yüklenecektir.

      " + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "Çıkış Doğrulaması" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "Yeni Sepet" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "Arkaplan rengi" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "Şablonları &Yönet..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "Tek sütun" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "İki sütun" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "Üç sütun" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Boş" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "%Şablon:" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Sepetler)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "Burada &Oluştur:" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "Neden kullanışlıdır?" + +#: newbasketdialog.cpp:217 +msgid "" +"

      Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

      • Grouping baskets by themes or topics;" +"
      • Grouping baskets in folders for different projects;
      • Making " +"sections with sub-baskets representing chapters or pages;
      • Making a " +"group of baskets to export together (to eg. email them to people).
      " +msgstr "" +"

      Sepetlerin içerisinde başka sepetler oluşturarak bir hiyerarşi şu " +"şekillerde oluşturulabilir:

      • Sepetleri temalarına ya da " +"konularına göre gruplamak;
      • Farklı projeler için sepetleri " +"klasörlerde gruplamak;
      • Bölümleri ya da sayfaları temsil eden alt " +"sepetler oluÅŸturmak;
      • Sepetleri birlikte dışarı aktarmak için " +"gruplamak (örneÄŸin birlikte e-posta gönderebilmek için).
      " + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "Serbest Biçim" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "Zihin Haritası" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(Resim)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "Düz Metin" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "Metin" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "Resim" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "Animasyon" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "Ses" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "Bağlantı" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "Başlatıcı" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "Renk" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "Bilinmeyen" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "Bu düz metni düzenle" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "Bu metni düzenle" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "Bu resmi düzenle" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "Bu animasyonu düzenle" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "Bu sesin dosya adını düzenle" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "BU dosyanın adını düzenle" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "Bu bağlantıyı düzenle" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "Bu başlatıcıyı düzenle" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "Bu rengi düzenle" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "Bu bilinmeyen nesneyi düzenle" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "Düz metin açılıyor..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "Düz metinler açılıyor..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "Düz metin birlikte açılıyor..." + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "Düz metinler birlikte açılıyor..." + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "Düz metni birlikte aç:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "Düz metinleri birlikte aç:" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "Metin açılıyor..." + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "Metinler açılıyor..." + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "Metin birlikte açılıyor..." + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "Metinler birlikte açılıyor..." + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "Metni birlikte aç:" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "Metinleri birlikte aç:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "Boyut" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 x %2 piksel" + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "Resim açılıyor..." + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "Resimler açılıyor..." + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "Resim birlikte açılıyor..." + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "Resimler birlikte açılıyor..." + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "Resmi birlikte aç:" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "Resimleri birlikte aç:" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "Resmi orijinal boyutunda görmek için tıklayın" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "Animasyon Açılıyor..." + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "Animasyonlar Açılıyor..." + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "Animasyon Birlikte Açılıyor..." + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "Animasyonlar Birlikte Açılıyor..." + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "Animasyonu Birlikte Aç:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "Animasyonları Birlikte Aç:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "Tip" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "Bu dosyayı aç" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "Dosya açılıyor..." + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "Dosyalar açılıyor..." + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "Dosya birlikte açılıyor..." + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "Dosyalar birlikte açılıyor..." + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "Dosyayı birlikte aç:" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "Dosyaları birlikte aç:" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "Bu sesi aç" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "Ses açılıyor..." + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "Sesler açılıyor..." + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "Ses birlikte açılıyor..." + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "Sesler birlikte açılıyor..." + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "Sesi birlikte aç:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "Sesleri birlikte aç:" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "Hedef" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "Bu bağlantıyı aç" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "Bağlantıyı açmak için bir URL yok." + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "Bağlantı hedefi açılıyor..." + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "Bağlantı hedefleri açılıyor..." + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "Bağlantı hedefi birlikte açılıyor..." + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "Bağlantı hedefleri birlikte açılıyor..." + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "Bağlantı hedefini birlikte aç:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "Bağlantı hedeflerini birlikte aç:" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (konsolda çalıştır)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "Yorum" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "Komut" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "Bu uygulamayı başlat" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "Çalıştırmak için başlatıcıya ait bir komut yok." + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "Uygulama başlatılıyor..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "Uygulamalar başlatılıyor..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "Kırmızı: %1, Yeşil: %2, Mavi: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "HSV" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "Ton: %1, Doygunluk: %2, Değer: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS Renk Adı" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "CSS Genişletilmiş Renk Adı" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "Web Rengi" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" +"Şimdilik resimler burada düzenlenemiyor (fakat Basket sonraki sürümünde bir " +"resim editörü de içerecek).\n" +"Bu dosyayı açabilen bir uygulama ile açmak ister misiniz?" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "Resim Notunu Düzenle" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" +"Bu hareketli resim burada düzenlenemez.\n" +"Bu dosyayı açabilen bir uygulama ile açmak ister misiniz?" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "Animasyon Notunu Düzenle" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "Renk Notunu Düzenle" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" +"Bu notun tipi bilinmiyor ve burada düzenlenemez.\n" +"Bununla birlikte, bu notu açabilecek bir uygulamaya notu kopyalayabilir ya " +"da sürükleyip bırakabilirsiniz." + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "Bilinmeyen Notu Düzenle" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "Bağlantı Notunu Düzenle" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "Otomatik" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "&Simge:" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "&Hedef:" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "&Başlık:" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "Başlatıcı Notunu Düzenle" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "Çalıştırmak için bir komut seçin:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "&Tahmin Et" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "K&omut:" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "&İsim:" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "Kalın" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "Altı Çizili" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "Sola Yasla" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "Ortala" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "Sağa Yasla" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "İki Yana Yasla" + +#: notefactory.cpp:445 +msgid "" +"

      %1 doesn't support the data you've dropped.
      It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

      If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

      " +msgstr "" +"

      %1 bıraktığınız veriyi desteklemiyor.
      Ancak, daha sonra bu veriyi " +"kullanabiliecek bir uygulama ile açabilmeniz için genel bir not " +"oluşturabilir.

      Bu verinin desteklenmesini istiyorsanız geliştirici ile " +"bağlantı kurun ya daBasKet Drop " +"Database adresini ziyeret edin.

      " + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "Desteklenmeyen MIME Tipi" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "&Buraya Taşı\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "Buraya &Kopyala\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "Buraya B&ağ Koy\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "İ&ptal\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "Simgeyi resim olarak ekle" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "Resim olarak eklenecek simge için boyutu seçin:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "Dosya İçeriğini Bir Not İçine Yükle" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "Parola Koruması" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "Özel anahtar seçilmedi." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&Sepet" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "&Dışarı Aktar" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "&Ekle" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "&Git" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "&Not" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "E&tiketler" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "Metin Biçimlendirme Araç Çubuğu" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "Sü&zgeç:" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+Z" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "&Koruma yok" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "Sepeti bir pa&rola ile koru" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+R" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "Sepeti bir özel anahtar ile &koru:" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "Solda" + +#: settings.cpp:368 +msgid "On right" +msgstr "Sağda" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Sepet ağacı konumu:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "Üstte" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "Altta" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "Süzgeç &çubuğu konumu:" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "Genel işlemlerin sonuçlarını göstermek için &baloncuk kullan" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "Genel işlemler neler?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "Genel kısayolları yapılandırarak ana pencereyi açmadan komutlar verebilirsiniz. Örneğin, pano içeriğini yapıştırabilir, ekrandan renk yakalayabilirsiniz. Ayrıca siste çekmecesindeki simge üzerinde fare tekerini kullanarak geçerli sepeti değiştirebilirsiniz. Yada farenin orta düğmesini simge üzerindeyken tıklayarak pano içeriğini not olarak yapıştırabilirsiniz." + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "Bu işlemlerden birini yaptığınızda %1 size işleminizin başarılı olduğunu bildirmek için bir balon iletisi gösterecektir. Bu bilgilendirme balonunu isterseniz pasifleştirebilirsiniz." + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "Ana pencere açık olduğunda bu balon iletilerin görünmeyeceğini unutmayın. Çünkü yaptığınız işlemlerin sonuçlarını zaten ana pencerede görüyorsunuzdur." + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "Sistem Çekmecesi Simgesi" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "&Sistem çekmecesine küçült" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "&Geçerli sepet simgesini sistem çekmecesinde göster" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "Üzerinden &fare çekildikten sonra ana pencereyi gizle" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "saniyenin onda biri" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "" +"Sistem çekmecesindeki simge üzerine fare geldiğinde ana paencereyi göstermek " +"için bekle" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "Sepet içindeki değişiklikleri &canlandır" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "&Sepetler içerisinde ipuçlarını göster" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "&Büyük notlar" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "Davranış" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "* ya da - ile başlayan satırları metin düzenleyicilerde listelere dönüştür" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "Notları silmeden önce &kullanıcıya sor" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "Me&tinlerin içindeki etiketleri dışa aktar" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "Bu ne zaman uygulanır?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "Bir notu bir metin düzenleyiciye kopyalayıp yapıştırdığınızda ya da tutup attığınızda uygulanır." + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "Bu özellik etkinleştirildiğinde bir etiketi metin eşdeğeri olarak yapıştırmanızı sağlar." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" +"

      Notları bir metin düzenleyiciye kopyalayıp yapıştırdığınızda ya da " +"sürükleyip bıraktığınızda uygulanır.

      Etkinleştirildiğinde bu özellik " +"size etiketleri metin karşılıkları ile yapıştırmanızı sağlar.
      Örneğin " +"bir liste olan ve Yapılacak İş ve Bitmiş etiketlerini taşıyan " +"notlar dışa aktarıldığında notun başına [ ] ya da [x] işareti " +"konulur. Bu işaretler boş ve dolu işaret kutularını temsil eder.

      " + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "&Girdi satırının sağına tıklandığında yeni bir notu gruplandır." + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "Yeni bir not nasıl gruplanır?" + +#: settings.cpp:557 +msgid "" +"

      When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

      " +msgstr "" +"

      Bu seçenek aktif edildiğinde girdi satırı imleç konumuna sadece yeni not " +"girmenizi sağlamaz. Ayrıca bu yeni notu imlecin altındaki diğer not ile " +"gruplamanıza da izin verir.

      " + +#: settings.cpp:559 +msgid "" +"

      Place your mouse between notes, where you want to add a new one.
      Click " +"on the left of the insertion-line middle-mark to insert a note." +"
      Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

      " +msgstr "" +"

      Fare imlecini yeni not oluşturmak istediğiniz iki notun arasına getirin." +"
      Girdi satırının sol tarafındaki otra işarete tıklayın ve yeni " +"notu ekleyin.
      Farenize sağ tıklayarak imlecin konumuna göre " +"notu üstteki ya da alttaki bir not ile gruplandırın.

      " + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "Hiçbir şey yapma" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "Panoyu yapıştır" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "Başlatıcı notu ekle" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "Ekrandan renk ekle" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "Dosyadan not yükle" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "KDE Menüsünden Başlatıcı Ekle" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "Simge Ekle" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+orta-düğme herhangi bir yer:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "imleç konumunda" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "Kilit korumalı sepetleri şu süre yaklaşınca otomatik olarak kilitle" + +#: settings.cpp:603 +msgid " minutes" +msgstr " dakika" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "Private/public key &korumalı sepetler için GnuPG kullan" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "&Yeni notların yeri:" + +#: settings.cpp:693 +msgid "At current note" +msgstr "Geçerli notta" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "&Yeni resim boyutu:" + +#: settings.cpp:718 +msgid "&by" +msgstr "&x" + +#: settings.cpp:721 +msgid "pixels" +msgstr "piksel" + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "&Göster..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "Aşağıdaki Dosya Tiplerinde Eklenen Dosyaların İçeriğini Göster" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "&Düz metin" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML sayfası" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "&Resim ya da animasyon" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "&Ses" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "Konferans ses kaydı" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "Yıllık rapor" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Ev Dizini" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "Çalıştır %1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "&Sesler" + +#: settings.cpp:800 +msgid "&Files" +msgstr "&Dosyalar" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "&Yerel Bağlantılar" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "&Ağ Bağlantıları" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "&Başlatıcılar" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "M&etin notlarını özel bir uygulama ile aç:" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "Metin notlarını birlikte aç:" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "&Resim notlarını özel bir uygulama ile aç:" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "Resim notlarını birlikte aç:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "A&nimasyon notlarını özel bir uygulama ile aç:" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "Animasyon notarını birlikte aç:" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "&Ses notlarını özel bir uygulama ile aç:" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "Ses notlarını birlikte aç:" + +#: settings.cpp:873 +msgid "" +"

      If checked, the application defined below will be used when opening that " +"type of note.

      Otherwise, the application you've configured in " +"Konqueror will be used.

      " +msgstr "" +"

      Eğer seçilirse,bu tip notlar açılırken aşağıda belirlenen uygulama " +"kullanılır.

      Aksi durumda ise, Konqueror yapılandırmasında seçtiğiniz " +"uygulama kullanılacaktır.

      " + +#: settings.cpp:882 +msgid "" +"

      Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

      " +msgstr "" +"

      Bu tip notları Konqueror yapılandırmasında tanımlanan dışında bir " +"uygulama ile açmak için bir uygulama tanımlayın.

      " + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "Web bağlantılarını açmak için kullanılan uygulamalar nasıl değiştirilir?" + +#: settings.cpp:904 +msgid "" +"

      When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

      Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
      • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

      Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

      For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

      " +msgstr "" +"

      Web bağlantıları açılırken bağlantının içeriğine göre yerel dosyalarınız " +"gibi farklı uygulamalar kullanılır. (Web sayfası, resim , PDF dokümanı gibi)" +"

      Burada her Web adresinin Web tarayıcınız ile nasıl açılacağını " +"ayarlayabilirsiniz. Bu özellik KDE kullanmıyorsanız kullanışlıdır (Örneğin " +"GNOME ya da XFCE kullanıyorsanız).

      • KDE Denetim Masasını açın " +"(EÄŸer sisteminizde baÄŸlantı olarak yoksa \"kcontrol\" komutunu çalıştırarak " +"açabilirsiniz).
      • \"KDE BileÅŸenlerine\" giderek \"BileÅŸen Seçici\" " +"bölümüne gelin.
      • \"Web Tarayıcıyı\" seçin. Ardından \"Farklı bir " +"tarayıcıyı:\" seçerek Web tarayıcınızın adını girin (\"firefox\" ya da " +"\"epiphany\" gibi).

      Burada tümü seçilirse \"http://...\" " +"ile başlayan tüm adresler Web tarayıcınızla açılacaktır.

      Daha ayrıntılı bir yapılandırma yardımı için takip eden yardımı tıklayın.

      " + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "Dosya ve bağlantıları açmak için kullanılan uygulamalar nasıl değiştirilir?" + +#: settings.cpp:923 +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" +"

      Burada hangi dosya tipi için hangi uygulamanın kullanılacağını nasıl " +"ayarlayacağınız anlatılıyor. Bu aynı zamanda eğer sistematik olarak Web " +"tarayıcı ile açma seçeneği işaretli ise Web bağlantılarına da uygulanır. " +"Öntanımlı ayarlar sizin için yeterli olacaktır. Fakat bu ipucu GNOME, XFCE " +"gibi KDE dışında başka bir masaüstü ortamı kullanıyorsanız sizin için " +"faydalı olacaktır.

      Bu HTML dosyalarınızı nasıl Web Tarayıcınızla " +"açacağınızı gösteren bir örnektir. Aşağıdaki aşamaları diğer dosya tipleri " +"için özel bir uygulama tanımlarken de uygulamalısınız.

      • KDE " +"Denetim Masasını açın (EÄŸer sisteminizde baÄŸlantı olarak yoksa \"kcontrol\" " +"komutunu çalıştırarak açabilirsiniz).
      • \"KDE BileÅŸenlerine\" giderek " +"\"Dosya Ä°liÅŸkileri\" bölümüne gelin.
      • AÄŸaçtan \"metini\" ve ardından " +"\"html\" öğesine tıklayın.
      • Uygulama listesinden Web Tarayıcınızı " +"ilk girdi olarak ekleyin.
      • Aynı iÅŸlemi \"application -> xhtml+xml\" " +"tipi için de uygulayın.
      " + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "HiyerarÅŸi Ekle" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "Nasıl Yeni Not Eklenir?" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "&Orijinal hiyerarÅŸiyi koru (tüm notlar farklı sepetlerde)" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "&Birinci seviye notlar farklı sepetlerde" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "&Tüm notlar bir sepet içerisinde" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "Metin Dosyası Al" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "Metin Dosyasının Biçemi" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "BoÅŸ &bir satır ile ayrılmış notlar" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "Her &satıra bir not" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "(-) ile baÅŸlayan notlar" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "(*) ile baÅŸlayan notlar" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "&BaÅŸka bir ayırıcı kullan:" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "&Tümü bir not içerisinde" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "KJotes Uygulamasından" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "KNotes Uygulamasından" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "Sticky Notes Uygulamasından" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "Tomboy Uygulamasından" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "%1 den" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "Bu dosya içeriye aktarılamadı. Dosya bozuk ya da TuxCards dosyası deÄŸil." + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "Kötü Dosya Tipi" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" +"Bir not ÅŸifrelendi. İçeri aktarıcı henüz ÅŸifrelenmiÅŸ notları desteklemiyor. " +"Lütfen TuxCards dosyasından ÅŸifrelemeyi kaldırın ve dosyayı yeniden içeri " +"aktarın." + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "ÅžifrelenmiÅŸ Notlar Henüz Desteklenmiyor" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" +"ÅžifrelenmiÅŸ not.
      İçeriye aktarıcı henüzşifreli " +"notları desteklemiyor. Lütfen şifrelemeyi TuxCards ile kaldırın ve dosyayı " +"yeniden içeriye aktarmayı deneyin.
      " + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" +"

      Ana pencere kapatılsa da %1 sistem çekmecesinde çalışmaya devam " +"edecektir. Uygulamadan çıkmak için Sepet menüsünden Çık " +"seçeneğini tıklayın.

      " + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "Sistem Çekmecesine Küçültülüyor" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "Seçilen %1 sepete yapıştırıldı." + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "&Küçült" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "&Geri Yükle" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (Kilitli)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "Yapılacak İş" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "İşaretsiz" + +#: tag.cpp:544 +msgid "Done" +msgstr "Bitmiş" + +#: tag.cpp:545 +msgid "Progress" +msgstr "İşlem" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "% 0" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "% 25" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "% 50" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "% 75" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "% 100" + +#: tag.cpp:599 +msgid "Priority" +msgstr "Öncelik" + +#: tag.cpp:599 +msgid "Low" +msgstr "Düşük" + +#: tag.cpp:599 +msgid "Medium" +msgstr "Orta" + +#: tag.cpp:600 +msgid "High" +msgstr "Yüksek" + +#: tag.cpp:600 +msgid "Preference" +msgstr "Seçenek" + +#: tag.cpp:600 +msgid "Bad" +msgstr "Kötü" + +#: tag.cpp:601 +msgid "Good" +msgstr "İyi" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "Mükemmel" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "Önem" + +#: tag.cpp:667 +msgid "Important" +msgstr "Önemli" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "Çok Önemli" + +#: tag.cpp:668 +msgid "Idea" +msgstr "Fikir" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "F." + +#: tag.cpp:668 +msgid "Title" +msgstr "Başlık" + +#: tag.cpp:669 +msgid "Code" +msgstr "Kod" + +#: tag.cpp:669 +msgid "Work" +msgstr "İş" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "İ." + +#: tag.cpp:687 +msgid "Personal" +msgstr "Kişisel" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "K." + +#: tag.cpp:687 +msgid "Funny" +msgstr "Neşeli" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "Etiketleri Özelleştir" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "Yeni &Etiket" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "Yeni &İfade" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "Yukarı Taşı (Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "Aşağı Taşı (Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "Etiket" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "&Kaldır" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "Kısa&yol:" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "&Yeni kardeş notlar tarafından miras bırakılmış" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "İfade" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "&İsim:" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "&Kaldır" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "&Amblem:" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "&Arkaplan:" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "Üzeri Çizili" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "&Metin:" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "&Renk:" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "&Yazı Tipi:" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "&Boyut:" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "Metin eşdeğeri:" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "Bu özellik doldurulduğunda bir etiketi ya da ifadeyi metin eşdeğeri olarak yapıştırmanızı sağlar." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "Her satır üz&erinde" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "Bu ne anlama gelir?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "Bir not birden fazla satırdan oluşuyorsa etiket ya da ifadeyi sadece ilk satıra ya da her satıra eklenecek şekilde dışarı aktarmayı seçebilirsiniz." + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "Yukarıdaki örnekte, en üstteki notun etiketi sadece ilk satıra eklenerek dışarı aktarılmıştır. Aşağıdaki notun etiketi ise her satıra eklenerek dışarı aktarılmıştır." + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "Bir etiketi silmek onu kullanan tüm notlar üzerinden o etiketi kaldırır." + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "Etiket Silmeyi Doğrula" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "&Etiketi Sil" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "Bir ifadeyi silmek onu kullanan tüm notlar üzerinden o ifadeyi kaldırır." + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "İfade Silmeyi Doğrula" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "İfadeyi Sil" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16 x 16 piksel" + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22 x 22 piksel" + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32 x 32 piksel" + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48 x 48 piksel" + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64 x 64 piksel" + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128 x 128 piksel" + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"Resim boyutunu seçmek için pencereyi boyutlandırın ve kapatın\n" +"ya da Esc tuşuna basarak değişiklikleri kabul edin." + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..dd79432 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,3185 @@ +# translation of zh_CN.po to 中文简体 +# Translation of zh_TW.po to 正體中文 +# Translation of basket.po to 正體中文 +# This file is distributed under the same license as the BasKet package. +# Copyright (C) 2003-2005. +# +# Rex , 2004. +# cao ting , 2007. +msgid "" +msgstr "" +"Project-Id-Version: zh_CN\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2007-02-25 16:46+0800\n" +"Last-Translator: cao ting \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.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "cao ting" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "ctqucl@gmail.com" + +#: aboutdata.cpp:27 +msgid "" +"

      Taking care of your ideas.

      A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

      " +msgstr "

      抓ä½ä½ çš„çµæ„Ÿ.

      一个用æ¥è®°è½½æƒ³æ³•çš„å°è´´å£«è½¯ä»¶,å¯ä»¥å¸®åŠ©ä½ ä¾¿æ·çš„记录和整ç†æƒ³æ³•.

      " + +#: aboutdata.cpp:34 +msgid "BasKet Note Pads" +msgstr "Basket贴示æ¿" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "创建者,维护者" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "Basket ç¼–ç , Kontact æ•´åˆ, KnowIt 输出" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" +"Baskets 自动é”定, ä¿å­˜çŠ¶æ€å›¾æ ‡, HTML 导入导出, basket å称 tip, " +"basket å称导入" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +msgid "Icon" +msgstr "图标" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "ä¿å­˜ä¸ºBasket文档" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "ä¿å­˜ä¸ºbasket文档.请ç¨ç­‰..." + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "ä¸æ˜¯ä¸€ä¸ªæ­£ç¡®çš„basket文档." + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "文档已æŸå" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "无法打开,文档已æŸå." + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "这个文件由最近的%1版本所创建,你需è¦å‡çº§åˆ°æ›´æ–°çš„版本æ‰èƒ½æ‰“å¼€." + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "备份与还原" + +#: backup.cpp:65 +msgid "Save Folder" +msgstr "ä¿å­˜æ–‡ä»¶å¤¹" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
      %1" +msgstr "ä½ çš„basket里é¢å·²ç»å­˜åœ¨äº†è¿™æ ·çš„目录:
      %1" + +#: backup.cpp:69 +msgid "&Move to Another Folder..." +msgstr "移动到å¦ä¸€ä¸ªç›®å½•(&d)" + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "使用其它目录(&U)..." + +#: backup.cpp:71 +msgid "Why to do that?" +msgstr "ä½ è¦å¹²ä»€ä¹ˆ?" + +#: backup.cpp:72 +msgid "" +"

      You can move the folder where %1 store your baskets to:

      • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
      • Store your " +"baskets on a server to share them between two computers.
        In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
        Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

      Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

      " +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "备份" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "备份中(&B)..." + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "备份与还原(&R)..." + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "最近的备份:æ— " + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "最近的备份:%1" + +#: backup.cpp:124 +msgid "Choose a Folder Where to Move Baskets" +msgstr "选择你的Basketå°†è¦ç§»åŠ¨åˆ°çš„目录" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "目录%1éžç©º. 确定覆盖么?" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "确定覆盖目录?" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "覆盖(&O)" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "ä½ çš„basketæˆåŠŸç§»åŠ¨åˆ°äº†%1. 更改åŽçš„设置将在%2被采用." + +#: backup.cpp:155 +msgid "Choose an Existing Folder to Store Baskets" +msgstr "选择一个目录æ¥ä¿å­˜Basket." + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "ä½ çš„basket目录æˆåŠŸå˜æ›´åˆ°äº†%1.更改åŽçš„设置将在%2被采用." + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "用Gzip压缩" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "所有文件" + +#: backup.cpp:179 backup.cpp:200 +msgid "Backup Baskets" +msgstr "备份Basket" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "文件%1已存在.是å¦è¦†ç›–?" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "覆盖文件?" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "备份basket中. 请ç¨å€™..." + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "打开basket文档" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "README.txt" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "你正在编辑的是å为%1çš„basket安全拷è´." + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "如果你已ç»æˆåŠŸä»Žå¤‡ä»½è¿˜åŽŸäº†æ–‡æ¡£.ä½ å¯ä»¥åˆ é™¤æ­¤ç›®å½•." + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "如果你还原备份文档失败.ä½ å¯ä»¥ç»§ç»­ä½¿ç”¨å½“å‰ç›®å½•é‡Œé¢çš„basket." + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "选择 \"Basket\" -> \"备份与还原...\" -> \"使用å¦ä¸€ä¸ªç›®å½•...\" 并选定目录." + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "%1还原中.请ç¨ç­‰..." + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" +"如果你还原备份文档失败,请检查文件%1." + +#: backup.cpp:257 +msgid "Restore Baskets" +msgstr "还原Basket" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "还原失败" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +msgid "Restart" +msgstr "é‡å¯" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "还原å‰çš„Basket" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "还原å‰çš„Basket (%1)" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "新建ä¸è¿›è¡Œæ£€ç´¢çš„éšè—贴示." + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "一个éšè—的贴示未被检索." + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "一些éšè—的贴示未被检索." + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "éšè—贴示未被检索" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "分组" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "æ’å…¥" + +#: basket.cpp:1968 +msgid "Dropped to basket %1" +msgstr "放置到basket%1" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "程åºæœ‰bug!请å‘å¼€å‘者æ交bug." + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" +"æ’入贴示到这里\n" +"å³é”®èŽ·å–更多信æ¯" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "调整列" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "调整组" + +#: basket.cpp:2776 +msgid "Resize this note" +msgstr "调整贴示" + +#: basket.cpp:2777 +msgid "Select or move this note" +msgstr "选择/移动贴示" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "选择/移动组" + +#: basket.cpp:2779 +msgid "Assign or remove tags from this note" +msgstr "分é…/移除贴示标记" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "分é…的标记: %1" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "%1, %2" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "展开组" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "折å ç»„" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" +"以下贴示全部组选\n" +"å³é”®èŽ·å–更多信æ¯." + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" +"以上贴示全部组选\n" +"å³é”®èŽ·å–更多信æ¯." + +#: basket.cpp:2818 +msgid "Added" +msgstr "已添加" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "最近的å˜æ›´" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "%1: %2" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "å³ä¾§æ’入组" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "左侧æ’入组" + +#: basket.cpp:3026 +msgid "&Unlock" +msgstr "解é”(&U)" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "密ç ä¿æŠ¤çš„basket." + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "点击解é”访问文件." + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
      this version of %1." +msgstr "当å‰ç‰ˆæœ¬(%1)ä¸æ”¯æŒåŠ å¯†." + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
      locking duration in " +"the application settings." +msgstr "请在程åºè®¾ç½®å†…更改é”定期é™
      æ¥å…³é—­æ–‡æ¡£çš„自动é”定功能." + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "读å–中..." + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +msgid "&Customize..." +msgstr "设置(&C)..." + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "按标记检索(&F)" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "按æ¡ä»¶æ£€ç´¢(&S)" + +#: basket.cpp:3429 +msgid "Tags" +msgstr "标记" + +#: basket.cpp:4065 +#, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "你确定删除这%næ¡è´´ç¤º?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "删除贴示" + +#: basket.cpp:4165 +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "å¤åˆ¶è´´ç¤ºåˆ°å‰ªè´´æ¿" + +#: basket.cpp:4166 +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "å¤åˆ¶åˆ°å‰ªè´´æ¿" + +#: basket.cpp:4167 +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "å¤åˆ¶æ‰€é€‰è´´ç¤º." + +#: basket.cpp:4213 basket.cpp:4262 +msgid "Unable to open this note." +msgstr "无法打开贴示." + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "ä½ æ— æƒæ‰“开这个文档." + +#: basket.cpp:4279 +msgid "Save to File" +msgstr "ä¿å­˜åˆ°æ–‡æ¡£" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "请输入ç§é’¥å¯†ç :" + +#: basket.cpp:5221 +msgid "Please enter the password for the basket %1:" +msgstr "请输入basket %1 的密ç :" + +#: basket.cpp:5266 +msgid "Please assign a password to the basket %1:" +msgstr "请设置basket %1 的密ç :" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "ç£ç›˜ç©ºé—´ä¸è¶³" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "错误的文档æƒé™" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "ä¿å­˜é”™è¯¯" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "新建basket目录失败." + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +msgid "Basket Creation Failed" +msgstr "Basket创建失败" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "æ‹·è´æ¨¡æ¿å¤±è´¥." + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "当å‰æ¨¡æ¿è®¾ç½®æ— æ•ˆ." + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "%1+%2+" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "%1+" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "%1+%2" + +#: basketproperties.cpp:46 +msgid "Basket Properties" +msgstr "Basket喜好设置" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +msgid "Name" +msgstr "å称" + +#: basketproperties.cpp:76 +msgid "Background &image:" +msgstr "背景图åƒ(&i)" + +#: basketproperties.cpp:77 +msgid "&Background color:" +msgstr "背景颜色(&B):" + +#: basketproperties.cpp:78 +msgid "&Text color:" +msgstr "文本颜色(&T):" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "(æ— )" + +#: basketproperties.cpp:107 +msgid "Disposition" +msgstr "é…ç½®" + +#: basketproperties.cpp:110 +msgid "Col&umns:" +msgstr "列数(&u):" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "自由形状(&F)" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "æ€ç»´è„‘图(&M)" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "键盘快æ·é”®(&K)" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "学习一些技巧..." + +#: basketproperties.cpp:134 +msgid "" +"

      Easily Remember your Shortcuts:
      With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
      For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

      Local " +"vs Global:
      The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

      Show vs Switch:
      The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

      " +msgstr "" + +#: basketproperties.cpp:149 +msgid "S&how this basket" +msgstr "显示这些basket" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "显示basket(全局快æ·æ–¹å¼)(&g)" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "转到这个文档(全局快æ·æ–¹å¼)(&w)" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "显示尚未ä¿å­˜çš„已更改文档." + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "Ctrl+drop: å¤åˆ¶, Shift+drop: 移动, Shift+Ctrl+drop: 链接." + +#: basketstatusbar.cpp:148 +msgid "

      This basket is locked.
      Click to unlock it.

      " +msgstr "

      basket被é”定.
      点击解é”.

      " + +#: basketstatusbar.cpp:153 +msgid "

      This basket is unlocked.
      Click to lock it.

      " +msgstr "

      basket被解é”.
      点击é”定.

      " + +#: bnpview.cpp:175 bnpview.cpp:1128 +msgid "General" +msgstr "主è¦" + +#: bnpview.cpp:231 +msgid "Show/hide main window" +msgstr "显示/éšè—主窗å£" + +#: bnpview.cpp:232 +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "éšè—/显示切æ¢" + +#: bnpview.cpp:236 +msgid "Paste clipboard contents in current basket" +msgstr "粘贴剪贴æ¿å†…容到当å‰æ–‡æ¡£" + +#: bnpview.cpp:237 +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "粘贴剪贴æ¿å†…容" + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "显示basket文件å" + +#: bnpview.cpp:241 +msgid "Allows you to know basket is current without opening the main window." +msgstr "切æ¢ä¸ºä¸»è¦." + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "粘贴到basket" + +#: bnpview.cpp:245 +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "粘贴剪贴æ¿é€‰é¡¹" + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "新建basket" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "新建basket" + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "转到上一个basket" + +#: bnpview.cpp:253 +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "切æ¢åˆ°ä¸Šä¸€ä¸ªbasket." + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "转到下一个basket" + +#: bnpview.cpp:257 +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "切æ¢åˆ°ä¸‹ä¸€ä¸ªbasket" + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "æ’入文本贴示" + +#: bnpview.cpp:265 +msgid "Add a text note to the current basket without having to open the main window." +msgstr "添加一个文本贴示到当å‰basket." + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "æ’入图片贴示" + +#: bnpview.cpp:269 +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "添加一个图片贴示到当å‰basket." + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "æ’入链接贴示" + +#: bnpview.cpp:273 +msgid "Add a link note to the current basket without having to open the main window." +msgstr "添加一个链接贴示到当å‰basket." + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "æ’入贴示" + +#: bnpview.cpp:277 +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "添加一个新贴示到当å‰æ–‡æ¡£." + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "èƒå–颜色" + +#: bnpview.cpp:281 +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "添加一个贴示到当å‰basket." + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "抓å–å±å¹•èŒƒå›´" + +#: bnpview.cpp:286 +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "抓å–å±å¹•èŒƒå›´" + +#: bnpview.cpp:298 +msgid "Baskets" +msgstr "Basket" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "请使用英语或法语." + +#: bnpview.cpp:355 +msgid "" +"

      Basket Tree

      Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" + +#: bnpview.cpp:366 bnpview.cpp:368 +msgid "&Basket Archive..." +msgstr "basket文档(&B)..." + +#: bnpview.cpp:371 +msgid "&Hide Window" +msgstr "éšè—主窗体(&H)" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "HTML网页(&H)..." + +#: bnpview.cpp:377 +msgid "K&Notes" +msgstr "K&Notes" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "K&Jots" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "&KnowIt..." + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "Tux&Cards..." + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "贴上贴示(&S)" + +#: bnpview.cpp:387 +msgid "&Tomboy" +msgstr "阿贴便签(&T)" + +#: bnpview.cpp:389 +msgid "Text &File..." +msgstr "其它文档格å¼..." + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "备份与还原(&B)..." + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "删除(&e)" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "选择全部贴示" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "全部å–消(&n)" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "å–消所有选定的贴示" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "æ’入所选(&I)" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "æ’入当å‰é€‰å®šçš„贴示" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "编辑(&E)..." + +#: bnpview.cpp:417 +msgid "&Open" +msgstr "打开(&O)" + +#: bnpview.cpp:420 +msgid "Open &With..." +msgstr "打开方å¼(&W)" + +#: bnpview.cpp:424 +msgid "&Save to File..." +msgstr "ä¿å­˜åˆ°æ–‡æ¡£(&S)..." + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "分组(&G)" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "解除分组(&n)" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "置顶(&T)" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "上移(&U)" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "下移(&D)" + +#: bnpview.cpp:438 +msgid "Move on &Bottom" +msgstr "置底(&B)" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "文字(&T)" + +#: bnpview.cpp:455 +msgid "&Link" +msgstr "链接(&L)" + +#: bnpview.cpp:456 +msgid "&Image" +msgstr "图片(&I)" + +#: bnpview.cpp:457 +msgid "&Color" +msgstr "颜色(&C)" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "è¿è¡Œç¨‹åº(&a)" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "从Kèœå•è¿è¡Œç¨‹åº(&K)" + +#: bnpview.cpp:461 +msgid "Im&port Icon..." +msgstr "载入图标(&p)..." + +#: bnpview.cpp:462 +msgid "Load From &File..." +msgstr "从文档载入(&F)..." + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "抓å–å±å¹•é¢œè‰²(&o)" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "抓å–å±å¹•èŒƒå›´(&Z)" + +#: bnpview.cpp:520 +msgid "&New Basket..." +msgstr "新建Basket(&N)..." + +#: bnpview.cpp:522 +msgid "New &Sub-Basket..." +msgstr "新建å­Basket(&S)..." + +#: bnpview.cpp:524 +msgid "New Si&bling Basket..." +msgstr "新建兄弟Basket(&b)..." + +#: bnpview.cpp:527 +msgid "&New" +msgstr "新建(&N)" + +#: bnpview.cpp:535 +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "移除(&R)" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "设置密ç ä¿æŠ¤(&w)..." + +#: bnpview.cpp:540 +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "é”定(&L)" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "检索(&F)" + +#: bnpview.cpp:554 +msgid "Filter all &Baskets" +msgstr "检索全部Basket(&B)" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "é‡ç½®æ£€ç´¢(&R)" + +#: bnpview.cpp:563 +msgid "&Previous Basket" +msgstr "上一个Basket(&P)" + +#: bnpview.cpp:565 +msgid "&Next Basket" +msgstr "下一个Basket(&N)" + +#: bnpview.cpp:567 +msgid "&Fold Basket" +msgstr "折å Basket(&F)" + +#: bnpview.cpp:569 +msgid "&Expand Basket" +msgstr "展开Basket(&E)" + +#: bnpview.cpp:579 +msgid "Configure &Global Shortcuts..." +msgstr "设置全局快æ·æ–¹å¼(&G)..." + +#: bnpview.cpp:583 +msgid "&Welcome Baskets" +msgstr "欢迎使用Basket(&W)" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "纯文本贴示转æ¢" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "转æ¢çº¯æ–‡æœ¬è´´ç¤ºä¸º..." + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "å·²é”定" + +#: bnpview.cpp:1295 +msgid "No notes" +msgstr "无贴示" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "%næ¡è´´ç¤º" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "%næ¡å·²é€‰å®š" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "所有符åˆ" + +#: bnpview.cpp:1299 +msgid "no filter" +msgstr "无符åˆ" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "%næ¡ç¬¦åˆ" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "%1, %2, %3" + +#: bnpview.cpp:1420 +msgid "Picked color to basket %1" +msgstr "放置到basket %1" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "è¿™æ¡çº¯æ–‡æœ¬è´´ç¤ºå·²ç»è½¬æ¢å®Œæˆ." + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "转æ¢å®Œæˆ" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "没有待转æ¢çš„纯文本贴示." + +#: bnpview.cpp:1484 +msgid "" +"

      The file basketui.rc seems to not exist or is too old.
      %1 cannot " +"run without it and will stop.

      Please check your installation of %2." +"

      If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

      As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

      " +msgstr "" + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "文件æºä¸å­˜åœ¨" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "无法添加贴示" + +#: bnpview.cpp:1589 +msgid "Grabbed screen zone to basket %1" +msgstr "抓å–å±å¹•åˆ°basket%1" + +#: bnpview.cpp:1637 +msgid "Delete Basket" +msgstr "删除Basket" + +#: bnpview.cpp:1640 +msgid "Delete Only that Basket" +msgstr "åªåˆ é™¤è¿™ä¸ªBasket" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "删除贴示和内容" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +msgid "Do you really want to remove the basket %1 and its contents?" +msgstr "你确定è¦åˆ é™¤%1和它里é¢çš„所有内容?" + +#: bnpview.cpp:1657 +msgid "Remove Basket" +msgstr "移除Basket" + +#: bnpview.cpp:1659 +msgid "&Remove Basket" +msgstr "移除Basket(&R)" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
      Do you want to remove " +"them too?
      " +msgstr "%1 有å­basket.
      ä½ è¦åŒæ—¶åˆ é™¤è¿™äº›ä¹ˆ?
      " + +#: bnpview.cpp:1673 +msgid "Remove Children Baskets" +msgstr "移除å­Basket" + +#: bnpview.cpp:1675 +msgid "&Remove Children Baskets" +msgstr "移除å­Basket(&R)" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +msgid "Basket Archives" +msgstr "Basket文档设置" + +#: bnpview.cpp:1869 +msgid "Clipboard content pasted to basket %1" +msgstr "粘贴所选内容到basket %1" + +#: bnpview.cpp:1877 +msgid "Selection pasted to basket %1" +msgstr "粘贴所选到basket %1" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "未添加贴示." + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "文档 %1 被é”定" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "(å·²é”定)" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "分é…新标记(&A)..." + +#: bnpview.cpp:2260 +msgid "&Remove All" +msgstr "移除所有(&R)" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" + +#: debugwindow.cpp:34 +msgid "Debug Window" +msgstr "窗体调整" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "输出Basket为HTML" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "HTML文件å" + +#: exporterdialog.cpp:49 +msgid "&Filename:" +msgstr "文件å(&F):" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "嵌入本地文件链接(&E)" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "嵌入本地目录链接(&l)" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "从目录中移除先å‰çš„文件(&p)" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "排版(&m)" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "设置检索" + +#: filter.cpp:64 +msgid "&Filter: " +msgstr "检索(&F):" + +#: filter.cpp:66 +msgid "T&ag: " +msgstr "标记(&a):" + +#: filter.cpp:69 +msgid "Filter all Baskets" +msgstr "检索全部Bakset" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "(未被标记)" + +#: filter.cpp:150 +msgid "(Tagged)" +msgstr "(已标记)" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "拼写检查" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "检查拼写..." + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "å…许列表" + +#: formatimporter.cpp:132 +msgid "" +"

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " +msgstr "" + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "é•œåƒç›®å½•å¯¼å…¥" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "HTML文档" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "导出到HTML" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "导出为HTML.请ç¨ç­‰..." + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "图标" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "图片" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "basket" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "æ•°æ®" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "(默认)" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "其它..." + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "ç§é’¥åˆ—表" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "Email" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "ID" + +#: kgpgme.cpp:67 +msgid "Choose a secret key:" +msgstr "选择一个密钥:" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "" + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "解ç çš„公钥ä¸æ­£ç¡®" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "ä¸æ”¯æŒçš„规则" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "错误的密ç ." + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "选择图标" + +#: kicondialog.cpp:121 +msgid "&Browse..." +msgstr "æµè§ˆ(&B)..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "(所有图标)" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "(最近)" + +#: kicondialog.cpp:135 +msgid "Actions" +msgstr "å¯åŠ¨å™¨" + +#: kicondialog.cpp:136 +msgid "Applications" +msgstr "应用程åº" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "设备" + +#: kicondialog.cpp:138 +msgid "Filesystem" +msgstr "文件系统" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "文件类型" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "å‘é€å»ºè®®ç»™å¼€å‘者" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "欢迎使用测试版 %1" + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "欢迎使用 %1" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "您的建议将有助于我们程åºçš„改善." + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "示例:" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "" + +#: likeback.cpp:469 +msgid "I dislike the welcome page of that assistant. Too time consuming." +msgstr "" + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "帮助改善程åº" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "Email地å€" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "请æ交你的Email地å€." + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "å‘é€å»ºè®®ç»™å¼€å‘者" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "建议内容:" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "你喜欢的功能(&l)" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "你讨厌的功能(&d)" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "程åºbug" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "一个新的çµæ„Ÿ" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "在窗å£çš„标题æ æ˜¾ç¤ºæ交按钮(&w)" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "å‘é€æ„è§(&S)" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "Email地å€(&E)..." + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "请使用英语." + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" + +#: likeback.cpp:839 +msgid "

      Error while trying to send the report.

      Please retry later.

      " +msgstr "

      å‘é€æŠ¥å‘Šå¤±è´¥.

      请ç¨åŽå†è¯•.

      " + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "传输错误" + +#: likeback.cpp:843 +msgid "" +"

      Your comment has been sent successfully. It will help improve the " +"application.

      Thanks for your time.

      " +msgstr "" + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "æ„è§å‘é€" + +#: linklabel.cpp:564 +msgid "I&talic" +msgstr "斜体(&I)" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "粗体(&B)" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "设为默认" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "从ä¸" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "鼠标悬åœæ—¶" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "鼠标越界" + +#: linklabel.cpp:578 +msgid "&Underline:" +msgstr "下划线(&U)" + +#: linklabel.cpp:583 +msgid "Colo&r:" +msgstr "颜色(&r)" + +#: linklabel.cpp:588 +msgid "&Mouse hover color:" +msgstr "鼠标悬åœé¢œè‰²:(&M):" + +#: linklabel.cpp:595 +msgid "&Icon size:" +msgstr "图标尺寸(&I):" + +#: linklabel.cpp:600 +msgid "None" +msgstr "æ— " + +#: linklabel.cpp:601 +msgid "Icon size" +msgstr "图标尺寸" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "两å€å¤§å°" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "三å€å¤§å°" + +#: linklabel.cpp:604 +msgid "&Preview:" +msgstr "预览(&p)" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "明明关闭了预览ä»ç„¶æ˜¾ç¤ºå›¾åƒ?" + +#: linklabel.cpp:607 +msgid "" +"

      This is normal because there are several type of notes.
      This setting " +"only applies to file and local link notes.
      The images you see are image " +"notes, not file notes.
      File notes are generic documents, whereas image " +"notes are pictures you can draw in.

      When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
      For instance, " +"when dropping image or text files, image and text notes are created for them." +"
      For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

      If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

      " +msgstr "" + +#: linklabel.cpp:623 +msgid "Example" +msgstr "示例" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "最å°åŒ–" + +#: mainwindow.cpp:301 +msgid "Basket" +msgstr "Basket" + +#: mainwindow.cpp:310 +msgid "

      Do you really want to quit %1?

      " +msgstr "

      你确定è¦é€€å‡º%1?

      " + +#: mainwindow.cpp:312 +msgid "" +"

      Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

      " +msgstr "" + +#: mainwindow.cpp:315 +msgid "Quit Confirm" +msgstr "确认退出" + +#: newbasketdialog.cpp:88 +msgid "New Basket" +msgstr "æ–°Basket" + +#: newbasketdialog.cpp:113 +msgid "Background color" +msgstr "背景颜色" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "管ç†æ¨¡æ¿(&M)..." + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "一列" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "两列" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "三列" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "Free" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "模æ¿(&T):" + +#: newbasketdialog.cpp:214 +msgid "(Baskets)" +msgstr "(Basket)" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "创建到(&C):" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "这样å¯ä»¥ä¹ˆ?" + +#: newbasketdialog.cpp:217 +msgid "" +"

      Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

      • Grouping baskets by themes or topics;" +"
      • Grouping baskets in folders for different projects;
      • Making " +"sections with sub-baskets representing chapters or pages;
      • Making a " +"group of baskets to export together (to eg. email them to people).
      " +msgstr "" + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "自由形状" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "æ€ç»´è„‘图" + +#: note.cpp:2818 +msgid "(Image)" +msgstr "(图片)" + +#: notecontent.cpp:173 +msgid "Plain Text" +msgstr "纯文本" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "文本" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "图片" + +#: notecontent.cpp:176 +msgid "Animation" +msgstr "媒体" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "声音" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "链接" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "è¿è¡Œ" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "颜色" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "未知的" + +#: notecontent.cpp:323 +msgid "Edit this plain text" +msgstr "编辑纯文本" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "编辑文本" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "编辑图片" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "编辑媒体" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "更改声音文件å" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "更改文件å" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "更改链接" + +#: notecontent.cpp:330 +msgid "Edit this launcher" +msgstr "编辑è¿è¡Œç¨‹åº" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "更改颜色" + +#: notecontent.cpp:332 +msgid "Edit this unknown object" +msgstr "编辑未知的对象" + +#: notecontent.cpp:558 +msgid "Opening plain text..." +msgstr "打开纯文本文件..." + +#: notecontent.cpp:559 +msgid "Opening plain texts..." +msgstr "打开纯文本文件(多个)..." + +#: notecontent.cpp:560 +msgid "Opening plain text with..." +msgstr "用...打开纯文本文件" + +#: notecontent.cpp:561 +msgid "Opening plain texts with..." +msgstr "用...打开纯文本文件(多个)" + +#: notecontent.cpp:562 +msgid "Open plain text with:" +msgstr "打开纯文本:" + +#: notecontent.cpp:563 +msgid "Open plain texts with:" +msgstr "打开纯文本(多个):" + +#: notecontent.cpp:649 +msgid "Opening text..." +msgstr "" + +#: notecontent.cpp:650 +msgid "Opening texts..." +msgstr "" + +#: notecontent.cpp:651 +msgid "Opening text with..." +msgstr "" + +#: notecontent.cpp:652 +msgid "Opening texts with..." +msgstr "" + +#: notecontent.cpp:653 +msgid "Open text with:" +msgstr "打开文本贴示(多个):" + +#: notecontent.cpp:654 +msgid "Open texts with:" +msgstr "打开多文本贴示:" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "尺寸" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 X %2 åƒç´ " + +#: notecontent.cpp:769 +msgid "Opening image..." +msgstr "" + +#: notecontent.cpp:770 +msgid "Opening images..." +msgstr "" + +#: notecontent.cpp:771 +msgid "Opening image with..." +msgstr "" + +#: notecontent.cpp:772 +msgid "Opening images with..." +msgstr "" + +#: notecontent.cpp:773 +msgid "Open image with:" +msgstr "" + +#: notecontent.cpp:774 +msgid "Open images with:" +msgstr "" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "点击完整视图" + +#: notecontent.cpp:862 +msgid "Opening animation..." +msgstr "" + +#: notecontent.cpp:863 +msgid "Opening animations..." +msgstr "" + +#: notecontent.cpp:864 +msgid "Opening animation with..." +msgstr "" + +#: notecontent.cpp:865 +msgid "Opening animations with..." +msgstr "" + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "打开媒体文件:" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "打开媒体文件:" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "æ ¼å¼" + +#: notecontent.cpp:1016 +msgid "Open this file" +msgstr "打开这个文件" + +#: notecontent.cpp:1035 +msgid "Opening file..." +msgstr "" + +#: notecontent.cpp:1036 +msgid "Opening files..." +msgstr "" + +#: notecontent.cpp:1037 +msgid "Opening file with..." +msgstr "" + +#: notecontent.cpp:1038 +msgid "Opening files with..." +msgstr "" + +#: notecontent.cpp:1039 +msgid "Open file with:" +msgstr "" + +#: notecontent.cpp:1040 +msgid "Open files with:" +msgstr "" + +#: notecontent.cpp:1111 +msgid "Open this sound" +msgstr "打开这个声音" + +#: notecontent.cpp:1148 +msgid "Opening sound..." +msgstr "" + +#: notecontent.cpp:1149 +msgid "Opening sounds..." +msgstr "" + +#: notecontent.cpp:1150 +msgid "Opening sound with..." +msgstr "" + +#: notecontent.cpp:1151 +msgid "Opening sounds with..." +msgstr "" + +#: notecontent.cpp:1152 +msgid "Open sound with:" +msgstr "打开声音:" + +#: notecontent.cpp:1153 +msgid "Open sounds with:" +msgstr "打开声音(多个):" + +#: notecontent.cpp:1191 +msgid "Target" +msgstr "确定目标" + +#: notecontent.cpp:1214 +msgid "Open this link" +msgstr "打开这个链接" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "链接缺ä¹åœ°å€" + +#: notecontent.cpp:1243 +msgid "Opening link target..." +msgstr "" + +#: notecontent.cpp:1244 +msgid "Opening link targets..." +msgstr "" + +#: notecontent.cpp:1245 +msgid "Opening link target with..." +msgstr "" + +#: notecontent.cpp:1246 +msgid "Opening link targets with..." +msgstr "" + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "打开目标链接:" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "打开目标链接(多个):" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "%1 (终端è¿è¡Œ)" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "注解" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "命令" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "è¿è¡Œç¨‹åº" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "缺ä¹è¿è¡Œçš„命令" + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "è¿è¡Œç¨‹åº..." + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "è¿è¡Œç¨‹åº(多个)..." + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "RGB" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "红: %1, 绿: %2, è“: %3," + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "色彩模å¼(HSV)" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "色彩: %1, 饱和度: %2, 值: %3," + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "CSS 颜色å" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "CSS Extended 颜色å" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "网页色彩模å¼" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" + +#: noteedit.cpp:383 +msgid "Edit Image Note" +msgstr "编辑图片" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" + +#: noteedit.cpp:399 +msgid "Edit Animation Note" +msgstr "编辑媒体" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "编辑颜色" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" + +#: noteedit.cpp:501 +msgid "Edit Unknown Note" +msgstr "编辑未知的贴示" + +#: noteedit.cpp:530 +msgid "Edit Link Note" +msgstr "编辑链接" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "自动" + +#: noteedit.cpp:551 noteedit.cpp:704 +msgid "&Icon:" +msgstr "图标(&I):" + +#: noteedit.cpp:575 +msgid "Ta&rget:" +msgstr "确定目标(&r)" + +#: noteedit.cpp:576 +msgid "&Title:" +msgstr "标题(&T):" + +#: noteedit.cpp:689 +msgid "Edit Launcher Note" +msgstr "编辑è¿è¡Œç¨‹åº" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "选择è¦è¿è¡Œçš„命令:" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "推测(&G)" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "命令(&d):" + +#: noteedit.cpp:724 tagsedit.cpp:379 +msgid "&Name:" +msgstr "Name(&N):" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "粗体" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "下划线" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "é å·¦å¯¹é½" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "居中" + +#: noteedit.cpp:828 +msgid "Align Right" +msgstr "é å³å¯¹é½" + +#: noteedit.cpp:829 +msgid "Justified" +msgstr "两边对é½" + +#: notefactory.cpp:445 +msgid "" +"

      %1 doesn't support the data you've dropped.
      It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

      If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

      " +msgstr "" + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "ä¸æ”¯æŒçš„MIMEæ ¼å¼" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "移动到这里(&M)\tShift" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "å¤åˆ¶è¿™é‡Œ(&C)\tCtrl" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "链接这里(&L)\tCtrl+Shift" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "å–消(&a)\tEscape" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "把图标作为图片载入" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "选择将图标设置æˆå›¾ç‰‡çš„尺寸:" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "将文件内容载人贴示" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "密ç ä¿æŠ¤" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "未选择ç§é’¥." + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, no-c-format +msgid "&Basket" +msgstr "&BasKet" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "导出(&E)" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "载人(&I)" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "转到(&G)" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, no-c-format +msgid "&Note" +msgstr "贴示(&N)" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, no-c-format +msgid "&Tags" +msgstr "标记(&T)" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "文本排版工具æ " + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "KIconDialogUI" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, no-c-format +msgid "Fi<er:" +msgstr "检索(&l):" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "未ä¿æŠ¤(&N)" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "密ç ä¿æŠ¤basket(&k)" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "Alt+P" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "ä¿æŠ¤basketçš„ç§é’¥(&k):" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#: settings.cpp:367 +msgid "On left" +msgstr "é å·¦" + +#: settings.cpp:368 +msgid "On right" +msgstr "é å³" + +#: settings.cpp:369 +msgid "&Basket tree position:" +msgstr "&Basketæ ‘:" + +#: settings.cpp:376 settings.cpp:691 +msgid "On top" +msgstr "置顶" + +#: settings.cpp:377 settings.cpp:692 +msgid "On bottom" +msgstr "置底" + +#: settings.cpp:378 +msgid "&Filter bar position:" +msgstr "检索å§ä½ç½®(&F):" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "递归执行全局设定(&U)." + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "应用到全部么?" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" + +#: settings.cpp:402 +msgid "System Tray Icon" +msgstr "托盘图标" + +#: settings.cpp:407 +msgid "&Dock in system tray" +msgstr "放到系统托盘(&D)" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "在托盘上显示当å‰basket图标(&S)" + +#: settings.cpp:426 +msgid "&Hide main window when mouse leaves it for" +msgstr "鼠标离开åŽéšè—主窗体(&H)" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "秒" + +#: settings.cpp:437 +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "鼠标移动到托盘图标时显示主窗体(&m)" + +#: settings.cpp:511 +msgid "Ani&mate changes in baskets" +msgstr "" + +#: settings.cpp:514 +msgid "&Show tooltips in baskets" +msgstr "显示技巧æ示工具" + +#: settings.cpp:517 +msgid "&Big notes" +msgstr "大é‡çš„贴示(&B)" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "行为" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "删除贴示å‰ç¡®è®¤(&D)" + +#: settings.cpp:533 +msgid "&Export tags in texts" +msgstr "导出标记到文本(&E)" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "适用的情况?" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "当你把一个贴示通过å¤åˆ¶ç²˜è´´æˆ–拖动到文本编辑器时å¯ä»¥ä½¿ç”¨ã€‚" + +#: settings.cpp:541 +msgid "If enabled, this property lets you paste the tags as textual equivalents." +msgstr "如果开å¯ï¼Œå°†ä¼šæŠŠä½ çš„åŒä¹‰æ ‡è®°è½¬æ¢æˆå…¶ç›¸å¯¹åº”的内容." + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "当点击一行的å³ä¾§æ—¶å¯¹æ–°å»ºè´´ç¤ºè¿›è¡Œåˆ†ç»„." + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "如何对新的贴示进行分组?" + +#: settings.cpp:557 +msgid "" +"

      When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

      " +msgstr "

      当开å¯è¿™ä¸ªé€‰é¡¹åŽ,æ’入行将ä¸å…许你在光标ä½ç½®ç²˜è´´è´´ç¤º,但是你ä¾ç„¶å¯ä»¥åœ¨å…‰æ ‡ä¸‹å†…容使用新建分组功能:

      " + +#: settings.cpp:559 +msgid "" +"

      Place your mouse between notes, where you want to add a new one.
      Click " +"on the left of the insertion-line middle-mark to insert a note." +"
      Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

      " +msgstr "" + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "ä¸æ“作" + +#: settings.cpp:575 +msgid "Paste clipboard" +msgstr "粘贴" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "æ’å…¥è¿è¡Œç¨‹åºè´´ç¤º" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "从å±å¹•æ’入颜色" + +#: settings.cpp:582 +msgid "Load note from file" +msgstr "从文档读å–贴士" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "从Kèœå•è½½äººè¿è¡Œç¨‹åº" + +#: settings.cpp:584 +msgid "Import icon" +msgstr "载人图标" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "&Shift+点击鼠标中键:" + +#: settings.cpp:588 +msgid "at cursor position" +msgstr "光标ä½ç½®" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "关闭文档åŽè‡ªåŠ¨é”定ä¿æŠ¤(&u)" + +#: settings.cpp:603 +msgid " minutes" +msgstr "分钟" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "使用GnuPG密钥æ¥ä¿æŠ¤æ–‡æ¡£(&p)" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "新建贴示(&P):" + +#: settings.cpp:693 +msgid "At current note" +msgstr "当å‰è´´ç¤º" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "新图片尺寸(&N):" + +#: settings.cpp:718 +msgid "&by" +msgstr "" + +#: settings.cpp:721 +msgid "pixels" +msgstr "åƒç´ " + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "预览(&V)..." + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "显示已添加文件的类型" + +#: settings.cpp:732 +msgid "&Plain text" +msgstr "纯文本(&P)" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "&HTML页é¢" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "图片或媒体(&I)" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "声音(&S)" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "录音" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "统计报告" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "Home目录" + +#: settings.cpp:798 +#, c-format +msgid "Launch %1" +msgstr "è¿è¡Œ%1" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "多个声音(&S)" + +#: settings.cpp:800 +msgid "&Files" +msgstr "文件(&F)" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "本地链接(&L)" + +#: settings.cpp:802 +msgid "&Network Links" +msgstr "网络链接(&N)" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "执行程åº" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "用自定义程åºæ‰“开文本贴示(&t):" + +#: settings.cpp:841 +msgid "Open text notes with:" +msgstr "打开文本贴示(多个):" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "使用自定义程åºæ‰“开贴示(&i):" + +#: settings.cpp:849 +msgid "Open image notes with:" +msgstr "使用自定义程åºæ‰“开图åƒè´´ç¤º:" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "使用自定义程åºæ‰“开媒体贴示(&n):" + +#: settings.cpp:857 +msgid "Open animation notes with:" +msgstr "使用自定义程åºæ‰“开媒体贴示(&n):" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "使用自定义程åºæ‰“开声音贴示(&u);" + +#: settings.cpp:865 +msgid "Open sound notes with:" +msgstr "打开声音贴示(&w):" + +#: settings.cpp:873 +msgid "" +"

      If checked, the application defined below will be used when opening that " +"type of note.

      Otherwise, the application you've configured in " +"Konqueror will be used.

      " +msgstr "" + +#: settings.cpp:882 +msgid "" +"

      Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

      " +msgstr "" + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "如何改å˜æ‰“开网页链接的程åº?" + +#: settings.cpp:904 +msgid "" +"

      When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

      Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
      • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

      Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

      For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

      " +msgstr "" + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "如何改å˜æ‰“开文件和链接的程åº?" + +#: settings.cpp:923 +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "é‡è¦çº§åˆ«" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "Basket内的第一级贴示(&F)" + +#: softwareimporters.cpp:54 +msgid "&All notes in one basket" +msgstr "选择整个文档(&A)" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "载入文本文件" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "文本类型" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "使用空行æ¥åˆ†å¼€è´´ç¤º(&e)." + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "一æ¡è´´ç¤ºä¸€è¡Œ(&n)." + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "用(-)å·æ¥æ ‡æ³¨è´´ç¤ºå¤´(&d)." + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "用(*)å·æ¥æ ‡æ³¨è´´ç¤ºå¤´(&s)." + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "使用其它æ¿å—(&U):" + +#: softwareimporters.cpp:95 +msgid "&All in one note" +msgstr "选择整个贴示(&A)" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "æºè‡ªKJots" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "æºè‡ªKNotes" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "æºè‡ªé™„ç€çš„贴示" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "æºè‡ªé˜¿è´´ä¾¿ç­¾" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "æºè‡ª%1" + +#: softwareimporters.cpp:643 +msgid "Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "æŸå的文件类型" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "ç›®å‰å°šä¸æ”¯æŒåŠ å¯†è´´ç¤º" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "放到系统托盘" + +#: systemtray.cpp:237 +msgid "Pasted selection to basket %1" +msgstr "粘贴所选到basket %1" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "最å°åŒ–(&M)" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "还原(&R)" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "%1 (å·²é”定)" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "%1: %2" + +#: tag.cpp:544 +msgid "To Do" +msgstr "To Do" + +#: tag.cpp:544 +msgid "Unchecked" +msgstr "ä¸æ£€æŸ¥" + +#: tag.cpp:544 +msgid "Done" +msgstr "完æˆ" + +#: tag.cpp:545 +msgid "Progress" +msgstr "计划" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "0 %" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "25 %" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "50 %" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "75 %" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "100 %" + +#: tag.cpp:599 +msgid "Priority" +msgstr "优先级" + +#: tag.cpp:599 +msgid "Low" +msgstr "低" + +#: tag.cpp:599 +msgid "Medium" +msgstr "适中" + +#: tag.cpp:600 +msgid "High" +msgstr "高" + +#: tag.cpp:600 +msgid "Preference" +msgstr "喜好设定" + +#: tag.cpp:600 +msgid "Bad" +msgstr "垃圾" + +#: tag.cpp:601 +msgid "Good" +msgstr "很好" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "éžå¸¸ä¹‹å¥½" + +#: tag.cpp:601 +msgid "Highlight" +msgstr "高亮显示" + +#: tag.cpp:667 +msgid "Important" +msgstr "é‡è¦" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "éžå¸¸é‡è¦" + +#: tag.cpp:668 +msgid "Idea" +msgstr "想法" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "I." + +#: tag.cpp:668 +msgid "Title" +msgstr "标题" + +#: tag.cpp:669 +msgid "Code" +msgstr "代ç " + +#: tag.cpp:669 +msgid "Work" +msgstr "任务" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "W." + +#: tag.cpp:687 +msgid "Personal" +msgstr "个性化设置" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "P." + +#: tag.cpp:687 +msgid "Funny" +msgstr "很有趣" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "%1 (%2)" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "调整标记" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "新标记(&e)" + +#: tagsedit.cpp:334 +msgid "New St&ate" +msgstr "新状æ€(&t)" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "上移(Ctrl+Shift+Up)" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "下移(Ctrl+Shift+Down)" + +#: tagsedit.cpp:375 +msgid "Tag" +msgstr "标记" + +#: tagsedit.cpp:382 +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "删除(&R)" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "å¿«æ·æ–¹å¼(&h):" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "继承自兄弟贴示(&I)" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "状æ€" + +#: tagsedit.cpp:402 +msgid "Na&me:" +msgstr "å称(&a):" + +#: tagsedit.cpp:409 +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "删除(&e)" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "标志(&E):" + +#: tagsedit.cpp:426 +msgid "&Background:" +msgstr "背景(&B):" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "全部改å˜" + +#: tagsedit.cpp:457 +msgid "&Text:" +msgstr "文本(&T)" + +#: tagsedit.cpp:467 +msgid "Co&lor:" +msgstr "颜色(&l)" + +#: tagsedit.cpp:471 +msgid "&Font:" +msgstr "字体(&F):" + +#: tagsedit.cpp:474 +msgid "&Size:" +msgstr "尺寸(&S):" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "åŒä¹‰æ–‡æœ¬(&x):" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "如果选中,它将根æ®ä½ çš„åŒä¹‰æ ‡è®°æ¥æ›¿æ¢æˆå¯¹åº”的内容." + +#: tagsedit.cpp:496 +msgid "On ever&y line" +msgstr "上划线(&y)" + +#: tagsedit.cpp:501 +msgid "What does it mean?" +msgstr "它有什么用?" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" + +#: tagsedit.cpp:901 +msgid "Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" + +#: tagsedit.cpp:902 +msgid "Confirm Delete Tag" +msgstr "确认删除标记" + +#: tagsedit.cpp:903 +msgid "Delete Tag" +msgstr "删除标记" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" + +#: tagsedit.cpp:909 +msgid "Confirm Delete State" +msgstr "确认删除状æ€" + +#: tagsedit.cpp:910 +msgid "Delete State" +msgstr "删除状æ€" + +#: variouswidgets.cpp:47 +msgid "..." +msgstr "..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +msgid "16 by 16 pixels" +msgstr "16X16 åƒç´ " + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +msgid "22 by 22 pixels" +msgstr "22X22 åƒç´ " + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +msgid "32 by 32 pixels" +msgstr "32X32 åƒç´ " + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +msgid "48 by 48 pixels" +msgstr "48X48 åƒç´ " + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +msgid "64 by 64 pixels" +msgstr "64X64 åƒç´ " + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +msgid "128 by 128 pixels" +msgstr "128X128 åƒç´ " + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" +"调整窗å£åˆ°é€‰æ‹©å›¾ç‰‡å¤§å°\n" +"关闭退出åŽä¼šè‡ªåŠ¨ä¿å­˜æ”¹å˜." + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..3f1d276 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,3760 @@ +# Translation of zh_TW.po to 正體中文 +# Translation of basket.po to 正體中文 +# This file is distributed under the same license as the BasKet package. +# Copyright (C) 2003-2005. +# Rex , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: zh_TW\n" +"POT-Creation-Date: 2007-01-13 15:57+0100\n" +"PO-Revision-Date: 2004-05-05 23:27+0800\n" +"Last-Translator: Rex \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.3.1\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "é›·å…‹æ–¯" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "rexforce@hotmail.com" + +#: aboutdata.cpp:27 +msgid "" +"

      Taking care of your ideas.

      A note-taking application that " +"makes it easy to record ideas as you think, and quickly find them later. " +"Organizing your notes has never been so easy.

      " +msgstr "" + +#: aboutdata.cpp:34 +#, fuzzy +msgid "BasKet Note Pads" +msgstr "Basketå好設定" + +#: aboutdata.cpp:41 +msgid "Author, maintainer" +msgstr "" + +#: aboutdata.cpp:45 +msgid "Basket encryption, Kontact integration, KnowIt importer" +msgstr "" + +#: aboutdata.cpp:49 +msgid "" +"Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, " +"drop to basket name" +msgstr "" + +#: aboutdata.cpp:53 basketproperties.cpp:61 newbasketdialog.cpp:103 +#, fuzzy +msgid "Icon" +msgstr "圖示(&I):" + +#: archive.cpp:54 bnpview.cpp:1750 +msgid "Save as Basket Archive" +msgstr "" + +#: archive.cpp:54 +msgid "Saving as basket archive. Please wait..." +msgstr "" + +#: archive.cpp:258 +msgid "This file is not a basket archive." +msgstr "" + +#: archive.cpp:258 archive.cpp:289 archive.cpp:316 archive.cpp:324 +#: archive.cpp:334 archive.cpp:381 +msgid "Basket Archive Error" +msgstr "" + +#: archive.cpp:289 archive.cpp:334 archive.cpp:381 +msgid "This file is corrupted. It can not be opened." +msgstr "" + +#: archive.cpp:311 +msgid "" +"This file was created with a recent version of %1. It can be opened but not " +"every information will be available to you. For instance, some notes may be " +"missing because they are of a type only available in new versions. When " +"saving the file back, consider to save it to another file, to preserve the " +"original one." +msgstr "" + +#: archive.cpp:322 +msgid "" +"This file was created with a recent version of %1. Please upgrade to a newer " +"version to be able to open that file." +msgstr "" + +#: backup.cpp:56 +msgid "Backup & Restore" +msgstr "" + +#: backup.cpp:65 +#, fuzzy +msgid "Save Folder" +msgstr "載入自檔案(&d)" + +#: backup.cpp:66 +msgid "Your baskets are currently stored in that folder:
      %1" +msgstr "" + +#: backup.cpp:69 +#, fuzzy +msgid "&Move to Another Folder..." +msgstr "載入自檔案(&d)" + +#: backup.cpp:70 +msgid "&Use Another Existing Folder..." +msgstr "" + +#: backup.cpp:71 +#, fuzzy +msgid "Why to do that?" +msgstr "貼上至所é¸æ“‡" + +#: backup.cpp:72 +msgid "" +"

      You can move the folder where %1 store your baskets to:

      • Store " +"your baskets in a visible place in your home folder, like ~/Notes or ~/" +"Baskets, so you can manually backup them when you want.
      • Store your " +"baskets on a server to share them between two computers.
        In this case, " +"mount the shared-folder to the local file system and ask %2 to use that " +"mount point.
        Warning: you should not run %3 at the same time on both " +"computers, or you risk to loss data while the two applications are desynced." +"

      Please remember that you should not change the content of that " +"folder manually (eg. adding a file in a basket folder will not add that file " +"to the basket).

      " +msgstr "" + +#: backup.cpp:89 +msgid "Backups" +msgstr "" + +#: backup.cpp:92 +msgid "&Backup..." +msgstr "" + +#: backup.cpp:93 +msgid "&Restore a Backup..." +msgstr "" + +#: backup.cpp:113 +msgid "Last backup: never" +msgstr "" + +#: backup.cpp:115 +#, c-format +msgid "Last backup: %1" +msgstr "" + +#: backup.cpp:124 +#, fuzzy +msgid "Choose a Folder Where to Move Baskets" +msgstr "新建一個basket" + +#: backup.cpp:136 +msgid "The folder %1 is not empty. Do you want to override it?" +msgstr "" + +#: backup.cpp:137 +msgid "Override Folder?" +msgstr "" + +#: backup.cpp:138 backup.cpp:190 bnpview.cpp:1759 htmlexporter.cpp:68 +msgid "&Override" +msgstr "" + +#: backup.cpp:147 +msgid "" +"Your baskets have been successfuly moved to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:155 +#, fuzzy +msgid "Choose an Existing Folder to Store Baskets" +msgstr "新建一個basket" + +#: backup.cpp:158 +msgid "" +"Your basket save folder has been successfuly changed to %1. %2 is " +"going to be restarted to take this change into account." +msgstr "" + +#: backup.cpp:170 +msgid "" +"_: Backup filename (without extension), %1 is the date\n" +"Baskets_%1" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 +msgid "Tar Archives Compressed by Gzip" +msgstr "" + +#: backup.cpp:175 backup.cpp:230 bnpview.cpp:1747 bnpview.cpp:1785 +#: htmlexporter.cpp:53 +msgid "All Files" +msgstr "" + +#: backup.cpp:179 backup.cpp:200 +#, fuzzy +msgid "Backup Baskets" +msgstr "(解除)鎖定basket" + +#: backup.cpp:187 bnpview.cpp:1756 htmlexporter.cpp:65 +msgid "The file %1 already exists. Do you really want to override it?" +msgstr "" + +#: backup.cpp:189 bnpview.cpp:1758 htmlexporter.cpp:67 +msgid "Override File?" +msgstr "" + +#: backup.cpp:200 +msgid "Backing up baskets. Please wait..." +msgstr "" + +#: backup.cpp:231 bnpview.cpp:1786 +msgid "Open Basket Archive" +msgstr "" + +#: backup.cpp:242 +msgid "README.txt" +msgstr "" + +#: backup.cpp:246 +#, c-format +msgid "" +"This is a safety copy of your baskets like they were before you started to " +"restore the backup %1." +msgstr "" + +#: backup.cpp:247 +msgid "" +"If the restoration was a success and you restored what you wanted to " +"restore, you can remove this folder." +msgstr "" + +#: backup.cpp:248 +msgid "" +"If something went wrong during the restoration process, you can re-use this " +"folder to store your baskets and nothing will be lost." +msgstr "" + +#: backup.cpp:249 +msgid "" +"Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing " +"Folder...\" and select that folder." +msgstr "" + +#: backup.cpp:254 +msgid "Restoring %1. Please wait..." +msgstr "" + +#: backup.cpp:255 +msgid "" +"If something goes wrong during the restoration process, read the file %1." +msgstr "" + +#: backup.cpp:257 +#, fuzzy +msgid "Restore Baskets" +msgstr "新建basket" + +#: backup.cpp:287 +msgid "" +"This archive is either not a backup of baskets or is corrupted. It cannot be " +"imported. Your old baskets have been preserved instead." +msgstr "" + +#: backup.cpp:287 +msgid "Restore Error" +msgstr "" + +#: backup.cpp:295 +msgid "" +"Your backup has been successfuly restored to %1. %2 is going to be " +"restarted to take this change into account." +msgstr "" + +#: backup.cpp:338 +msgid "Restart" +msgstr "" + +#: backup.cpp:351 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration" +msgstr "" + +#: backup.cpp:356 +msgid "" +"_: Safety folder name before restoring a basket data archive\n" +"Baskets Before Restoration (%1)" +msgstr "" + +#: basket.cpp:523 +msgid "The new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:524 +msgid "A new note does not match the filter and is hidden." +msgstr "" + +#: basket.cpp:525 +msgid "Some new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:526 +msgid "The new notes do not match the filter and are hidden." +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Group New Note)\n" +"Group" +msgstr "" + +#: basket.cpp:1542 +msgid "" +"_: The verb (Insert New Note)\n" +"Insert" +msgstr "" + +#: basket.cpp:1968 +#, fuzzy +msgid "Dropped to basket %1" +msgstr "放置(%1)至basket %2" + +#: basket.cpp:2338 +msgid "" +"This message should never appear. If it does, this program is buggy! Please " +"report the bug to the developer." +msgstr "" + +#: basket.cpp:2755 basket.cpp:2800 basket.cpp:2803 +msgid "" +"Insert note here\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2773 +msgid "Resize those columns" +msgstr "" + +#: basket.cpp:2775 +msgid "Resize this group" +msgstr "" + +#: basket.cpp:2776 +#, fuzzy +msgid "Resize this note" +msgstr "確èªåˆªé™¤" + +#: basket.cpp:2777 +#, fuzzy +msgid "Select or move this note" +msgstr "確èªåˆªé™¤" + +#: basket.cpp:2778 +msgid "Select or move this group" +msgstr "" + +#: basket.cpp:2779 +#, fuzzy +msgid "Assign or remove tags from this note" +msgstr "確èªåˆªé™¤" + +#: basket.cpp:2781 +#, c-format +msgid "Assigned Tags: %1" +msgstr "" + +#: basket.cpp:2788 +msgid "%1, %2" +msgstr "" + +#: basket.cpp:2795 +msgid "Expand this group" +msgstr "" + +#: basket.cpp:2796 +msgid "Collapse this group" +msgstr "" + +#: basket.cpp:2801 +msgid "" +"Group note with the one below\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2802 +msgid "" +"Group note with the one above\n" +"Right click for more options" +msgstr "" + +#: basket.cpp:2818 +msgid "Added" +msgstr "" + +#: basket.cpp:2819 +msgid "Last Modification" +msgstr "" + +#: basket.cpp:2827 +msgid "" +"_: of the form 'key: value'\n" +"%1: %2" +msgstr "" + +#: basket.cpp:2830 +msgid "Click on the right to group instead of insert" +msgstr "" + +#: basket.cpp:2832 +msgid "Click on the left to insert instead of group" +msgstr "" + +#: basket.cpp:3026 +#, fuzzy +msgid "&Unlock" +msgstr "鎖定(&L)\"%1\"" + +#: basket.cpp:3031 +msgid "Password protected basket." +msgstr "" + +#: basket.cpp:3033 +msgid "Press Unlock to access it." +msgstr "" + +#: basket.cpp:3035 +#, c-format +msgid "Encryption is not supported by
      this version of %1." +msgstr "" + +#: basket.cpp:3047 +msgid "" +"To make baskets stay unlocked, change the automatic
      locking duration in " +"the application settings." +msgstr "" + +#: basket.cpp:3082 basketstatusbar.cpp:83 bnpview.cpp:1293 bnpview.cpp:1957 +msgid "Loading..." +msgstr "" + +#: basket.cpp:3325 basket.cpp:3346 bnpview.cpp:2261 +#, fuzzy +msgid "&Customize..." +msgstr "é è¦½(&V)" + +#: basket.cpp:3327 basket.cpp:3348 +msgid "&Filter by this Tag" +msgstr "" + +#: basket.cpp:3349 +msgid "Filter by this &State" +msgstr "" + +#: basket.cpp:3429 +#, fuzzy +msgid "Tags" +msgstr "儲存目標" + +#: basket.cpp:4065 +#, fuzzy, c-format +msgid "" +"_n: Do you really want to delete this note?\n" +"Do you really want to delete those %n notes?" +msgstr "您真的確定è¦åˆªé™¤%1 ?" + +#: basket.cpp:4067 +msgid "" +"_n: Delete Note\n" +"Delete Notes" +msgstr "" + +#: basket.cpp:4165 +#, fuzzy +msgid "" +"_n: Copied note to clipboard.\n" +"Copied notes to clipboard." +msgstr "複製至剪貼簿" + +#: basket.cpp:4166 +#, fuzzy +msgid "" +"_n: Cut note to clipboard.\n" +"Cut notes to clipboard." +msgstr "複製至剪貼簿" + +#: basket.cpp:4167 +#, fuzzy +msgid "" +"_n: Copied note to selection.\n" +"Copied notes to selection." +msgstr "貼上至所é¸æ“‡" + +#: basket.cpp:4213 basket.cpp:4262 +#, fuzzy +msgid "Unable to open this note." +msgstr "確èªåˆªé™¤" + +#: basket.cpp:4237 +msgid "You are not authorized to open this file." +msgstr "" + +#: basket.cpp:4279 +#, fuzzy +msgid "Save to File" +msgstr "載入自檔案(&d)" + +#: basket.cpp:5219 +msgid "Please enter the password for the following private key:" +msgstr "" + +#: basket.cpp:5221 +#, fuzzy +msgid "Please enter the password for the basket %1:" +msgstr "自剪貼簿(%1)貼上至basket%2" + +#: basket.cpp:5266 +#, fuzzy +msgid "Please assign a password to the basket %1:" +msgstr "所é¸æ“‡çš„(%1)貼上至basket%2" + +#: basket.cpp:5328 +msgid "Insufficient Disk Space to Save Basket Data" +msgstr "" + +#: basket.cpp:5329 +msgid "Wrong Basket File Permissions" +msgstr "" + +#: basket.cpp:5332 +msgid "" +"Please remove files on the disk %1 to let the application safely save " +"your changes." +msgstr "" + +#: basket.cpp:5334 +msgid "" +"File permissions are bad for %1. Please check that you have write " +"access to it and the parent folders." +msgstr "" + +#: basket.cpp:5370 +msgid "Save Error" +msgstr "" + +#: basketfactory.cpp:60 +msgid "Sorry, but the folder creation for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:60 basketfactory.cpp:90 basketfactory.cpp:111 +#, fuzzy +msgid "Basket Creation Failed" +msgstr "Basket %1" + +#: basketfactory.cpp:90 +msgid "Sorry, but the template copying for this new basket has failed." +msgstr "" + +#: basketfactory.cpp:111 +msgid "Sorry, but the template customization for this new basket has failed." +msgstr "" + +#: basketlistview.cpp:338 +msgid "%1+%2+" +msgstr "" + +#: basketlistview.cpp:340 +msgid "%1+" +msgstr "" + +#: basketlistview.cpp:343 +msgid "%1+%2" +msgstr "" + +#: basketproperties.cpp:46 +#, fuzzy +msgid "Basket Properties" +msgstr "Basketå好設定" + +#: basketproperties.cpp:64 kgpgme.cpp:60 newbasketdialog.cpp:108 +#, fuzzy +msgid "Name" +msgstr "å稱(&N):" + +#: basketproperties.cpp:76 +#, fuzzy +msgid "Background &image:" +msgstr "背景é¡è‰²(&B)" + +#: basketproperties.cpp:77 +#, fuzzy +msgid "&Background color:" +msgstr "背景é¡è‰²(&B)" + +#: basketproperties.cpp:78 +#, fuzzy +msgid "&Text color:" +msgstr "é¡è‰²" + +#: basketproperties.cpp:87 +msgid "(None)" +msgstr "" + +#: basketproperties.cpp:107 +#, fuzzy +msgid "Disposition" +msgstr "於滑鼠指標ä½ç½®æ”¾ç½®ç‰©ä»¶(&D)" + +#: basketproperties.cpp:110 +#, fuzzy +msgid "Col&umns:" +msgstr "é¡è‰²" + +#: basketproperties.cpp:118 +msgid "&Free-form" +msgstr "" + +#: basketproperties.cpp:119 +msgid "&Mind map" +msgstr "" + +#: basketproperties.cpp:128 +msgid "&Keyboard Shortcut" +msgstr "" + +#: basketproperties.cpp:133 +msgid "Learn some tips..." +msgstr "" + +#: basketproperties.cpp:134 +msgid "" +"

      Easily Remember your Shortcuts:
      With the first " +"option, giving the basket a shortcut of the form Alt+Letter " +"will underline that letter in the basket tree.
      For instance, if you are " +"assigning the shortcut Alt+T to a basket named Tips, the " +"basket will be displayed as Tips in the tree. It helps you " +"visualize the shortcuts to remember them more quickly.

      Local " +"vs Global:
      The first option allows to show the basket while the " +"main window is active. Global shortcuts are valid from anywhere, even if the " +"window is hidden.

      Show vs Switch:
      The last option " +"makes this basket the current one without opening the main window. It is " +"useful in addition to the configurable global shortcuts, eg. to paste the " +"clipboard or the selection into the current basket from anywhere.

      " +msgstr "" + +#: basketproperties.cpp:149 +#, fuzzy +msgid "S&how this basket" +msgstr "切æ›è‡³ä¸Šä¸€å€‹basket" + +#: basketproperties.cpp:150 +msgid "Show this basket (&global shortcut)" +msgstr "" + +#: basketproperties.cpp:151 +msgid "S&witch to this basket (global shortcut)" +msgstr "" + +#: basketstatusbar.cpp:100 +msgid "Shows if there are changes that have not yet been saved." +msgstr "" + +#: basketstatusbar.cpp:128 +msgid "Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link." +msgstr "" + +#: basketstatusbar.cpp:148 +msgid "

      This basket is locked.
      Click to unlock it.

      " +msgstr "" + +#: basketstatusbar.cpp:153 +msgid "

      This basket is unlocked.
      Click to lock it.

      " +msgstr "" + +#: bnpview.cpp:175 bnpview.cpp:1128 +#, fuzzy +msgid "General" +msgstr "置中" + +#: bnpview.cpp:231 +#, fuzzy +msgid "Show/hide main window" +msgstr "顯示/éš±è—主視窗" + +#: bnpview.cpp:232 +#, fuzzy +msgid "" +"Allows you to show main Window if it is hidden, and to hide it if it is " +"shown." +msgstr "å…許您在主視窗隱è—時顯示之,而在顯示時隱è—之。" + +#: bnpview.cpp:236 +#, fuzzy +msgid "Paste clipboard contents in current basket" +msgstr "貼上剪貼簿內容至目å‰çš„basket" + +#: bnpview.cpp:237 +#, fuzzy +msgid "" +"Allows you to paste clipboard contents in the current basket without having " +"to open the main window." +msgstr "å…許您貼上剪貼簿內容至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:240 +msgid "Show current basket name" +msgstr "" + +#: bnpview.cpp:241 +#, fuzzy +msgid "Allows you to know basket is current without opening the main window." +msgstr "å…許您貼上剪貼簿內容至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:244 +msgid "Paste selection in current basket" +msgstr "貼上所é¸æ“‡åœ¨ç›®å‰çš„basket" + +#: bnpview.cpp:245 +#, fuzzy +msgid "" +"Allows you to paste clipboard selection in the current basket without having " +"to open the main window." +msgstr "å…許您貼上剪貼簿所é¸æ“‡è‡³ç›®å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗" + +#: bnpview.cpp:248 +msgid "Create a new basket" +msgstr "新建一個basket" + +#: bnpview.cpp:249 +msgid "" +"Allows you to create a new basket without having to open the main window " +"(you then can use the other global shortcuts to add a note, paste clipboard " +"or paste selection in this new basket)." +msgstr "" + +#: bnpview.cpp:252 +msgid "Go to previous basket" +msgstr "切æ›è‡³ä¸Šä¸€å€‹basket" + +#: bnpview.cpp:253 +#, fuzzy +msgid "" +"Allows you to change current basket to the previous one without having to " +"open the main window." +msgstr "å…許您切æ›ç›®å‰çš„basket至上一個而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:256 +msgid "Go to next basket" +msgstr "切æ›è‡³ä¸‹ä¸€å€‹basket" + +#: bnpview.cpp:257 +#, fuzzy +msgid "" +"Allows you to change current basket to the next one without having to open " +"the main window." +msgstr "å…許您切æ›ç›®å‰çš„basket至下一個而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:264 +msgid "Insert text note" +msgstr "" + +#: bnpview.cpp:265 +#, fuzzy +msgid "" +"Add a text note to the current basket without having to open the main window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:268 settings.cpp:576 +msgid "Insert image note" +msgstr "" + +#: bnpview.cpp:269 +#, fuzzy +msgid "" +"Add an image note to the current basket without having to open the main " +"window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:272 settings.cpp:577 +msgid "Insert link note" +msgstr "" + +#: bnpview.cpp:273 +#, fuzzy +msgid "" +"Add a link note to the current basket without having to open the main window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:276 settings.cpp:579 +msgid "Insert color note" +msgstr "" + +#: bnpview.cpp:277 +#, fuzzy +msgid "" +"Add a color note to the current basket without having to open the main " +"window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:280 +msgid "Pick color from screen" +msgstr "" + +#: bnpview.cpp:281 +#, fuzzy +msgid "" +"Add a color note picked from one pixel on screen to the current basket " +"without having to open the main window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:285 settings.cpp:580 +msgid "Grab screen zone" +msgstr "" + +#: bnpview.cpp:286 +#, fuzzy +msgid "" +"Grab a screen zone as an image in the current basket without having to open " +"the main window." +msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#: bnpview.cpp:298 +#, fuzzy +msgid "Baskets" +msgstr "BasKet" + +#: bnpview.cpp:346 +msgid "Please write in English or French." +msgstr "" + +#: bnpview.cpp:355 +msgid "" +"

      Basket Tree

      Here is the list of your baskets. You can organize your " +"data by putting them in different baskets. You can group baskets by subject " +"by creating new baskets inside others. You can browse between them by " +"clicking a basket to open it, or reorganize them using drag and drop." +msgstr "" + +#: bnpview.cpp:366 bnpview.cpp:368 +#, fuzzy +msgid "&Basket Archive..." +msgstr "新建basket" + +#: bnpview.cpp:371 +#, fuzzy +msgid "&Hide Window" +msgstr "éš±è—主視窗(&H)" + +#: bnpview.cpp:375 +msgid "&HTML Web Page..." +msgstr "" + +#: bnpview.cpp:377 +#, fuzzy +msgid "K&Notes" +msgstr "加入物件" + +#: bnpview.cpp:379 +msgid "K&Jots" +msgstr "" + +#: bnpview.cpp:381 +msgid "&KnowIt..." +msgstr "" + +#: bnpview.cpp:383 +msgid "Tux&Cards..." +msgstr "" + +#: bnpview.cpp:385 +msgid "&Sticky Notes" +msgstr "" + +#: bnpview.cpp:387 +#, fuzzy +msgid "&Tomboy" +msgstr "高" + +#: bnpview.cpp:389 +#, fuzzy +msgid "Text &File..." +msgstr "載入自檔案(&d)" + +#: bnpview.cpp:392 +msgid "&Backup && Restore..." +msgstr "" + +#: bnpview.cpp:397 +msgid "D&elete" +msgstr "" + +#: bnpview.cpp:403 +msgid "Selects all notes" +msgstr "" + +#: bnpview.cpp:404 +msgid "U&nselect All" +msgstr "" + +#: bnpview.cpp:406 +msgid "Unselects all selected notes" +msgstr "" + +#: bnpview.cpp:407 +msgid "&Invert Selection" +msgstr "" + +#: bnpview.cpp:410 +msgid "Inverts the current selection of notes" +msgstr "" + +#: bnpview.cpp:412 +msgid "" +"_: Verb; not Menu\n" +"&Edit..." +msgstr "" + +#: bnpview.cpp:417 +#, fuzzy +msgid "&Open" +msgstr "é–‹å•Ÿ(&O)%1" + +#: bnpview.cpp:420 +#, fuzzy +msgid "Open &With..." +msgstr "開啟自(&w),,,%1" + +#: bnpview.cpp:424 +#, fuzzy +msgid "&Save to File..." +msgstr "載入自檔案(&d)" + +#: bnpview.cpp:427 +msgid "&Group" +msgstr "" + +#: bnpview.cpp:429 +msgid "U&ngroup" +msgstr "" + +#: bnpview.cpp:432 +msgid "Move on &Top" +msgstr "" + +#: bnpview.cpp:434 +msgid "Move &Up" +msgstr "" + +#: bnpview.cpp:436 +msgid "Move &Down" +msgstr "" + +#: bnpview.cpp:438 +#, fuzzy +msgid "Move on &Bottom" +msgstr "在底部" + +#: bnpview.cpp:454 +msgid "&Text" +msgstr "文字(&T)" + +#: bnpview.cpp:455 +#, fuzzy +msgid "&Link" +msgstr "連çµ" + +#: bnpview.cpp:456 +#, fuzzy +msgid "&Image" +msgstr "å½±åƒ" + +#: bnpview.cpp:457 +#, fuzzy +msgid "&Color" +msgstr "é¡è‰²" + +#: bnpview.cpp:458 +msgid "L&auncher" +msgstr "" + +#: bnpview.cpp:460 +msgid "Import Launcher from &KDE Menu..." +msgstr "" + +#: bnpview.cpp:461 +#, fuzzy +msgid "Im&port Icon..." +msgstr "匯入一個圖示(&p)" + +#: bnpview.cpp:462 +#, fuzzy +msgid "Load From &File..." +msgstr "載入自檔案(&d)" + +#: bnpview.cpp:485 +msgid "C&olor from Screen" +msgstr "" + +#: bnpview.cpp:490 +msgid "Grab Screen &Zone" +msgstr "" + +#: bnpview.cpp:520 +#, fuzzy +msgid "&New Basket..." +msgstr "新建basket" + +#: bnpview.cpp:522 +#, fuzzy +msgid "New &Sub-Basket..." +msgstr "新建basket" + +#: bnpview.cpp:524 +#, fuzzy +msgid "New Si&bling Basket..." +msgstr "新建basket" + +#: bnpview.cpp:527 +#, fuzzy +msgid "&New" +msgstr "新建basket(&N)..." + +#: bnpview.cpp:535 +#, fuzzy +msgid "" +"_: Remove Basket\n" +"&Remove" +msgstr "新建basket" + +#: bnpview.cpp:538 +msgid "" +"_: Password protection\n" +"Pass&word..." +msgstr "" + +#: bnpview.cpp:540 +#, fuzzy +msgid "" +"_: Lock Basket\n" +"&Lock" +msgstr "新建basket" + +#: bnpview.cpp:550 +msgid "&Filter" +msgstr "" + +#: bnpview.cpp:554 +#, fuzzy +msgid "Filter all &Baskets" +msgstr "新建basket" + +#: bnpview.cpp:558 +msgid "&Reset Filter" +msgstr "" + +#: bnpview.cpp:563 +#, fuzzy +msgid "&Previous Basket" +msgstr "切æ›è‡³ä¸Šä¸€å€‹basket" + +#: bnpview.cpp:565 +#, fuzzy +msgid "&Next Basket" +msgstr "新建basket" + +#: bnpview.cpp:567 +#, fuzzy +msgid "&Fold Basket" +msgstr "BasKet" + +#: bnpview.cpp:569 +#, fuzzy +msgid "&Expand Basket" +msgstr "新建basket" + +#: bnpview.cpp:579 +#, fuzzy +msgid "Configure &Global Shortcuts..." +msgstr "設定全域快æ·éµ(&g)..." + +#: bnpview.cpp:583 +#, fuzzy +msgid "&Welcome Baskets" +msgstr "新建basket" + +#: bnpview.cpp:907 +msgid "Plain Text Notes Conversion" +msgstr "" + +#: bnpview.cpp:908 +msgid "Converting plain text notes to rich text ones..." +msgstr "" + +#: bnpview.cpp:1291 +msgid "Locked" +msgstr "" + +#: bnpview.cpp:1295 +#, fuzzy +msgid "No notes" +msgstr "加入物件" + +#: bnpview.cpp:1297 +#, c-format +msgid "" +"_n: %n note\n" +"%n notes" +msgstr "" + +#: bnpview.cpp:1298 +#, c-format +msgid "" +"_n: %n selected\n" +"%n selected" +msgstr "" + +#: bnpview.cpp:1299 +msgid "all matches" +msgstr "" + +#: bnpview.cpp:1299 +#, fuzzy +msgid "no filter" +msgstr "加入物件" + +#: bnpview.cpp:1301 +#, c-format +msgid "" +"_n: %n match\n" +"%n matches" +msgstr "" + +#: bnpview.cpp:1303 +msgid "" +"_: e.g. '18 notes, 10 matches, 5 selected'\n" +"%1, %2, %3" +msgstr "" + +#: bnpview.cpp:1420 +#, fuzzy +msgid "Picked color to basket %1" +msgstr "放置(%1)至basket %2" + +#: bnpview.cpp:1457 +msgid "The plain text notes have been converted to rich text." +msgstr "" + +#: bnpview.cpp:1457 bnpview.cpp:1459 +msgid "Conversion Finished" +msgstr "" + +#: bnpview.cpp:1459 +msgid "There are no plain text notes to convert." +msgstr "" + +#: bnpview.cpp:1484 +msgid "" +"

      The file basketui.rc seems to not exist or is too old.
      %1 cannot " +"run without it and will stop.

      Please check your installation of %2." +"

      If you do not have administrator access to install the application " +"system wide, you can copy the file basketui.rc from the installation archive " +"to the folder %4.

      As last ressort, if you are " +"sure the application is correctly installed but you had a preview version of " +"it, try to remove the file %5basketui.rc

      " +msgstr "" + +#: bnpview.cpp:1495 +msgid "Ressource not Found" +msgstr "" + +#: bnpview.cpp:1518 bnpview.cpp:1527 +msgid "Cannot add note." +msgstr "" + +#: bnpview.cpp:1589 +#, fuzzy +msgid "Grabbed screen zone to basket %1" +msgstr "放置(%1)至basket %2" + +#: bnpview.cpp:1637 +#, fuzzy +msgid "Delete Basket" +msgstr "新建basket" + +#: bnpview.cpp:1640 +#, fuzzy +msgid "Delete Only that Basket" +msgstr "新建basket" + +#: bnpview.cpp:1641 +msgid "Delete Note & Children" +msgstr "" + +#: bnpview.cpp:1649 bnpview.cpp:1655 +#, fuzzy +msgid "" +"Do you really want to remove the basket %1 and its contents?" +msgstr "您真的確定è¦åˆªé™¤%1 ?" + +#: bnpview.cpp:1657 +#, fuzzy +msgid "Remove Basket" +msgstr "新建basket" + +#: bnpview.cpp:1659 +#, fuzzy +msgid "&Remove Basket" +msgstr "新建basket" + +#: bnpview.cpp:1670 +msgid "" +"%1 have the following children baskets.
      Do you want to remove " +"them too?
      " +msgstr "" + +#: bnpview.cpp:1673 +#, fuzzy +msgid "Remove Children Baskets" +msgstr "新建basket" + +#: bnpview.cpp:1675 +#, fuzzy +msgid "&Remove Children Baskets" +msgstr "新建basket" + +#: bnpview.cpp:1747 bnpview.cpp:1785 +#, fuzzy +msgid "Basket Archives" +msgstr "Basketå好設定" + +#: bnpview.cpp:1869 +#, fuzzy +msgid "Clipboard content pasted to basket %1" +msgstr "自剪貼簿(%1)貼上至basket%2" + +#: bnpview.cpp:1877 +#, fuzzy +msgid "Selection pasted to basket %1" +msgstr "所é¸æ“‡çš„(%1)貼上至basket%2" + +#: bnpview.cpp:1889 +msgid "No note was added." +msgstr "" + +#: bnpview.cpp:1916 +msgid "Basket %1 is locked" +msgstr "" + +#: bnpview.cpp:1941 +msgid "(Locked)" +msgstr "" + +#: bnpview.cpp:2259 +msgid "&Assign new Tag..." +msgstr "" + +#: bnpview.cpp:2260 +#, fuzzy +msgid "&Remove All" +msgstr "新建basket" + +#: crashhandler.cpp:80 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! You could potentially help us fix the crash. " +"Information describing the crash is below, so just click send, or if you " +"have time, write a brief description of how the crash happened first.\n" +"\n" +"Many thanks." +msgstr "" + +#: crashhandler.cpp:87 +msgid "" +"The information below is to help the developers identify the problem, please " +"do not modify it." +msgstr "" + +#: crashhandler.cpp:206 +msgid "" +"%1 has crashed! We're sorry about this.\n" +"\n" +"But, all is not lost! Perhaps an upgrade is already available which fixes " +"the problem. Please check your distribution's software repository." +msgstr "" + +#: debugwindow.cpp:34 +#, fuzzy +msgid "Debug Window" +msgstr "除錯視窗" + +#: exporterdialog.cpp:37 +msgid "Export Basket to HTML" +msgstr "" + +#: exporterdialog.cpp:46 +msgid "HTML Page Filename" +msgstr "" + +#: exporterdialog.cpp:49 +#, fuzzy +msgid "&Filename:" +msgstr "檔案å稱(&F):" + +#: exporterdialog.cpp:52 +msgid "&Embed linked local files" +msgstr "" + +#: exporterdialog.cpp:53 +msgid "Embed &linked local folders" +msgstr "" + +#: exporterdialog.cpp:54 +msgid "Erase &previous files in target folder" +msgstr "" + +#: exporterdialog.cpp:55 +msgid "For&mat for impression" +msgstr "" + +#: filter.cpp:60 +msgid "Reset Filter" +msgstr "" + +#: filter.cpp:64 +#, fuzzy +msgid "&Filter: " +msgstr "檔案å稱(&F):" + +#: filter.cpp:66 +#, fuzzy +msgid "T&ag: " +msgstr "儲存目標" + +#: filter.cpp:69 +#, fuzzy +msgid "Filter all Baskets" +msgstr "新建basket" + +#: filter.cpp:149 +msgid "(Not tagged)" +msgstr "" + +#: filter.cpp:150 +#, fuzzy +msgid "(Tagged)" +msgstr "å½±åƒ" + +#: focusedwidgets.cpp:195 +msgid "Auto Spell Check" +msgstr "" + +#: focusedwidgets.cpp:195 +msgid "Check Spelling..." +msgstr "" + +#: focusedwidgets.cpp:198 +msgid "Allow Tabulations" +msgstr "" + +#: formatimporter.cpp:132 +msgid "" +"

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      The folder %1 " +"has been copied for the basket needs. You can either delete this folder or " +"delete the basket, or use both. But remember that modifying one will not " +"modify the other anymore as they are now separate entities.

      " +msgstr "" + +#: formatimporter.cpp:134 +msgid "Folder Mirror Import" +msgstr "" + +#: htmlexporter.cpp:53 +msgid "HTML Documents" +msgstr "" + +#: htmlexporter.cpp:57 htmlexporter.cpp:79 +msgid "Export to HTML" +msgstr "" + +#: htmlexporter.cpp:79 +msgid "Exporting to HTML. Please wait..." +msgstr "" + +#: htmlexporter.cpp:114 htmlexporter.cpp:139 htmlexporter.cpp:148 +msgid "" +"_: HTML export folder (files)\n" +"%1_files" +msgstr "" + +#: htmlexporter.cpp:120 htmlexporter.cpp:153 +msgid "" +"_: HTML export folder (icons)\n" +"icons" +msgstr "" + +#: htmlexporter.cpp:121 htmlexporter.cpp:154 +msgid "" +"_: HTML export folder (images)\n" +"images" +msgstr "" + +#: htmlexporter.cpp:122 htmlexporter.cpp:151 +msgid "" +"_: HTML export folder (baskets)\n" +"baskets" +msgstr "" + +#: htmlexporter.cpp:143 htmlexporter.cpp:149 htmlexporter.cpp:150 +msgid "" +"_: HTML export folder (data)\n" +"data" +msgstr "" + +#: htmlexporter.cpp:319 +msgid "Made with %1, a KDE tool to take notes and keep information at hand." +msgstr "" + +#: kcolorcombo2.cpp:126 kcolorcombo2.cpp:602 kcolorcombo2.cpp:624 +#: tagsedit.cpp:470 variouswidgets.cpp:269 +msgid "(Default)" +msgstr "" + +#: kcolorcombo2.cpp:138 +msgid "Other..." +msgstr "" + +#: kgpgme.cpp:49 +msgid "Private Key List" +msgstr "" + +#: kgpgme.cpp:61 +msgid "Email" +msgstr "" + +#: kgpgme.cpp:62 +msgid "ID" +msgstr "" + +#: kgpgme.cpp:67 +#, fuzzy +msgid "Choose a secret key:" +msgstr "新建一個basket" + +#: kgpgme.cpp:228 +msgid "Key listing unexpectedly truncated." +msgstr "" + +#: kgpgme.cpp:264 +msgid "That public key is not meant for encryption" +msgstr "" + +#: kgpgme.cpp:307 +msgid "Unsupported algorithm" +msgstr "" + +#: kgpgme.cpp:410 +msgid "Wrong password." +msgstr "" + +#: kicondialog.cpp:84 kicondialog.cpp:94 +msgid "Select Icon" +msgstr "" + +#: kicondialog.cpp:121 +#, fuzzy +msgid "&Browse..." +msgstr "ç€è¦½(&B)..." + +#: kicondialog.cpp:133 +msgid "(All Icons)" +msgstr "" + +#: kicondialog.cpp:134 +msgid "(Recent)" +msgstr "" + +#: kicondialog.cpp:135 +#, fuzzy +msgid "Actions" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: kicondialog.cpp:136 +#, fuzzy +msgid "Applications" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: kicondialog.cpp:137 +msgid "Devices" +msgstr "" + +#: kicondialog.cpp:138 +#, fuzzy +msgid "Filesystem" +msgstr "檔案å稱(&F):" + +#: kicondialog.cpp:139 +msgid "File Types" +msgstr "" + +#: kicondialog.cpp:356 +msgid "*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)" +msgstr "" + +#: likeback.cpp:74 +msgid "Send application developers a comment about something you like" +msgstr "" + +#: likeback.cpp:81 +msgid "Send application developers a comment about something you dislike" +msgstr "" + +#: likeback.cpp:88 +msgid "" +"Send application developers a comment about an improper behavior of the " +"application" +msgstr "" + +#: likeback.cpp:95 +msgid "Send application developers a comment about a new feature you desire" +msgstr "" + +#: likeback.cpp:380 +msgid "&Send a Comment to Developers" +msgstr "" + +#: likeback.cpp:431 +#, c-format +msgid "Welcome to this testing version of %1." +msgstr "" + +#: likeback.cpp:432 +#, c-format +msgid "Welcome to %1." +msgstr "" + +#: likeback.cpp:434 +msgid "To help us improve it, your comments are important." +msgstr "" + +#: likeback.cpp:437 +msgid "" +"Each time you have a great or frustrating experience, please click the " +"appropriate face below the window title-bar, briefly describe what you like " +"or dislike and click Send." +msgstr "" + +#: likeback.cpp:441 +msgid "" +"Each time you have a great experience, please click the smiling face below " +"the window title-bar, briefly describe what you like and click Send." +msgstr "" + +#: likeback.cpp:445 +msgid "" +"Each time you have a frustrating experience, please click the frowning face " +"below the window title-bar, briefly describe what you dislike and click Send." +msgstr "" + +#: likeback.cpp:454 +msgid "" +"Follow the same principle to quickly report a bug: just click the broken-" +"object icon in the top-right corner of the window, describe it and click " +"Send." +msgstr "" + +#: likeback.cpp:457 +msgid "" +"Each time you discover a bug in the application, please click the broken-" +"object icon below the window title-bar, briefly describe the mis-behaviour " +"and click Send." +msgstr "" + +#: likeback.cpp:462 +msgid "" +"_n: Example:\n" +"Examples:" +msgstr "" + +#: likeback.cpp:465 +msgid "I like the new artwork. Very refreshing." +msgstr "" + +#: likeback.cpp:469 +msgid "" +"I dislike the welcome page of that assistant. Too time consuming." +msgstr "" + +#: likeback.cpp:473 +msgid "" +"The application has an improper behaviour when clicking the Add " +"button. Nothing happens." +msgstr "" + +#: likeback.cpp:477 +msgid "I desire a new feature allowing me to send my work by email." +msgstr "" + +#: likeback.cpp:480 +msgid "Help Improve the Application" +msgstr "" + +#: likeback.cpp:557 +msgid "Email Address" +msgstr "" + +#: likeback.cpp:558 +msgid "Please provide your email address." +msgstr "" + +#: likeback.cpp:559 +msgid "" +"It will only be used to contact you back if more information is needed about " +"your comments, ask you how to reproduce the bugs you report, send bug " +"corrections for you to test, etc." +msgstr "" + +#: likeback.cpp:560 +msgid "" +"The email address is optional. If you do not provide any, your comments will " +"be sent anonymously." +msgstr "" + +#: likeback.cpp:633 +msgid "Send a Comment to Developers" +msgstr "" + +#. i18n("Send Application Developers a Comment About:"), page); +#: likeback.cpp:663 +msgid "Send Application Developers a Comment About:" +msgstr "" + +#: likeback.cpp:674 +msgid "Something you &like" +msgstr "" + +#: likeback.cpp:684 +msgid "Something you &dislike" +msgstr "" + +#: likeback.cpp:694 +msgid "An improper &behavior of this application" +msgstr "" + +#: likeback.cpp:704 +msgid "A new &feature you desire" +msgstr "" + +#: likeback.cpp:717 +msgid "Show comment buttons below &window titlebars" +msgstr "" + +#: likeback.cpp:722 +msgid "&Send Comment" +msgstr "" + +#: likeback.cpp:726 +msgid "&Email Address..." +msgstr "" + +#: likeback.cpp:743 +#, c-format +msgid "Please provide a brief description of your opinion of %1." +msgstr "" + +#: likeback.cpp:756 +msgid "Please write in English." +msgstr "" + +#: likeback.cpp:762 +msgid "You may be able to use an online translation tool." +msgstr "" + +#: likeback.cpp:768 +msgid "" +"To make the comments you send more useful in improving this application, try " +"to send the same amount of positive and negative comments." +msgstr "" + +#: likeback.cpp:771 +msgid "Do not ask for new features: your requests will be ignored." +msgstr "" + +#: likeback.cpp:839 +msgid "

      Error while trying to send the report.

      Please retry later.

      " +msgstr "" + +#: likeback.cpp:839 +msgid "Transfer Error" +msgstr "" + +#: likeback.cpp:843 +msgid "" +"

      Your comment has been sent successfully. It will help improve the " +"application.

      Thanks for your time.

      " +msgstr "" + +#: likeback.cpp:844 +msgid "Comment Sent" +msgstr "" + +#: linklabel.cpp:564 +#, fuzzy +msgid "I&talic" +msgstr "斜體(&I)" + +#: linklabel.cpp:567 +msgid "&Bold" +msgstr "ç²—é«”(&B)" + +#: linklabel.cpp:574 +msgid "Always" +msgstr "" + +#: linklabel.cpp:575 +msgid "Never" +msgstr "" + +#: linklabel.cpp:576 +msgid "On mouse hovering" +msgstr "" + +#: linklabel.cpp:577 +msgid "When mouse is outside" +msgstr "" + +#: linklabel.cpp:578 +#, fuzzy +msgid "&Underline:" +msgstr "下劃線(&U)" + +#: linklabel.cpp:583 +#, fuzzy +msgid "Colo&r:" +msgstr "é¡è‰²" + +#: linklabel.cpp:588 +#, fuzzy +msgid "&Mouse hover color:" +msgstr "滑鼠移至時é¡è‰²(&c):" + +#: linklabel.cpp:595 +#, fuzzy +msgid "&Icon size:" +msgstr "圖示(&I):" + +#: linklabel.cpp:600 +msgid "None" +msgstr "" + +#: linklabel.cpp:601 +#, fuzzy +msgid "Icon size" +msgstr "在æ—é‚Š" + +#: linklabel.cpp:602 +msgid "Twice the icon size" +msgstr "" + +#: linklabel.cpp:603 +msgid "Three times the icon size" +msgstr "" + +#: linklabel.cpp:604 +#, fuzzy +msgid "&Preview:" +msgstr "Basketå好設定(&p)" + +#: linklabel.cpp:606 +msgid "You disabled preview but still see images?" +msgstr "" + +#: linklabel.cpp:607 +msgid "" +"

      This is normal because there are several type of notes.
      This setting " +"only applies to file and local link notes.
      The images you see are image " +"notes, not file notes.
      File notes are generic documents, whereas image " +"notes are pictures you can draw in.

      When dropping files to baskets, %1 " +"detects their type and shows you the content of the files.
      For instance, " +"when dropping image or text files, image and text notes are created for them." +"
      For type of files %2 does not understand, they are shown as generic file " +"notes with just an icon or file preview and a filename.

      If you do not " +"want the application to create notes depending on the content of the files " +"you drop, go to the \"General\" page and uncheck \"Image or animation\" in " +"the \"View Content of Added Files for the Following Types\" group.

      " +msgstr "" + +#: linklabel.cpp:623 +msgid "Example" +msgstr "" + +#: mainwindow.cpp:136 +msgid "Minimize" +msgstr "" + +#: mainwindow.cpp:301 +#, fuzzy +msgid "Basket" +msgstr "BasKet" + +#: mainwindow.cpp:310 +#, fuzzy +msgid "

      Do you really want to quit %1?

      " +msgstr "您真的確定è¦é€€å‡ºBasket?" + +#: mainwindow.cpp:312 +msgid "" +"

      Notice that you do not have to quit the application before ending your " +"KDE session. If you end your session while the application is still running, " +"the application will be reloaded the next time you log in.

      " +msgstr "" + +#: mainwindow.cpp:315 +#, fuzzy +msgid "Quit Confirm" +msgstr "確èªé€€å‡º" + +#: newbasketdialog.cpp:88 +#, fuzzy +msgid "New Basket" +msgstr "新建basket" + +#: newbasketdialog.cpp:113 +#, fuzzy +msgid "Background color" +msgstr "背景é¡è‰²(&B)" + +#: newbasketdialog.cpp:120 +msgid "&Manage Templates..." +msgstr "" + +#: newbasketdialog.cpp:155 newbasketdialog.cpp:302 +msgid "One column" +msgstr "" + +#: newbasketdialog.cpp:166 newbasketdialog.cpp:304 +msgid "Two columns" +msgstr "" + +#: newbasketdialog.cpp:178 newbasketdialog.cpp:306 +msgid "Three columns" +msgstr "" + +#: newbasketdialog.cpp:190 +msgid "Free" +msgstr "" + +#: newbasketdialog.cpp:205 +msgid "&Template:" +msgstr "" + +#: newbasketdialog.cpp:214 +#, fuzzy +msgid "(Baskets)" +msgstr "BasKet" + +#: newbasketdialog.cpp:215 +msgid "C&reate in:" +msgstr "" + +#: newbasketdialog.cpp:216 +msgid "How is it useful?" +msgstr "" + +#: newbasketdialog.cpp:217 +msgid "" +"

      Creating baskets inside of other baskets to form a hierarchy allows you " +"to be more organized by eg.:

      • Grouping baskets by themes or topics;" +"
      • Grouping baskets in folders for different projects;
      • Making " +"sections with sub-baskets representing chapters or pages;
      • Making a " +"group of baskets to export together (to eg. email them to people).
      " +msgstr "" + +#: newbasketdialog.cpp:308 +msgid "Free-form" +msgstr "" + +#: newbasketdialog.cpp:310 +msgid "Mind map" +msgstr "" + +#: note.cpp:2818 +#, fuzzy +msgid "(Image)" +msgstr "å½±åƒ" + +#: notecontent.cpp:173 +#, fuzzy +msgid "Plain Text" +msgstr "è±å¯Œæ–‡å­—(HTML)" + +#: notecontent.cpp:174 +msgid "Text" +msgstr "文字" + +#: notecontent.cpp:175 +msgid "Image" +msgstr "å½±åƒ" + +#: notecontent.cpp:176 +#, fuzzy +msgid "Animation" +msgstr "註解(&t):" + +#: notecontent.cpp:177 +msgid "Sound" +msgstr "" + +#: notecontent.cpp:179 +msgid "Link" +msgstr "連çµ" + +#: notecontent.cpp:180 +msgid "Launcher" +msgstr "" + +#: notecontent.cpp:181 noteedit.cpp:817 +msgid "Color" +msgstr "é¡è‰²" + +#: notecontent.cpp:182 +msgid "Unknown" +msgstr "" + +#: notecontent.cpp:323 +#, fuzzy +msgid "Edit this plain text" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: notecontent.cpp:324 +msgid "Edit this text" +msgstr "" + +#: notecontent.cpp:325 +msgid "Edit this image" +msgstr "" + +#: notecontent.cpp:326 +msgid "Edit this animation" +msgstr "" + +#: notecontent.cpp:327 +msgid "Edit the file name of this sound" +msgstr "" + +#: notecontent.cpp:328 +msgid "Edit the name of this file" +msgstr "" + +#: notecontent.cpp:329 +msgid "Edit this link" +msgstr "" + +#: notecontent.cpp:330 +#, fuzzy +msgid "Edit this launcher" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: notecontent.cpp:331 +msgid "Edit this color" +msgstr "" + +#: notecontent.cpp:332 +#, fuzzy +msgid "Edit this unknown object" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: notecontent.cpp:558 +#, fuzzy +msgid "Opening plain text..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:559 +#, fuzzy +msgid "Opening plain texts..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:560 +#, fuzzy +msgid "Opening plain text with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:561 +#, fuzzy +msgid "Opening plain texts with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:562 +#, fuzzy +msgid "Open plain text with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:563 +#, fuzzy +msgid "Open plain texts with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:649 +#, fuzzy +msgid "Opening text..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:650 +#, fuzzy +msgid "Opening texts..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:651 +#, fuzzy +msgid "Opening text with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:652 +#, fuzzy +msgid "Opening texts with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:653 +#, fuzzy +msgid "Open text with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:654 +#, fuzzy +msgid "Open texts with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:762 notecontent.cpp:973 +msgid "Size" +msgstr "" + +#: notecontent.cpp:763 variouswidgets.cpp:147 +msgid "%1 by %2 pixels" +msgstr "%1 高 %2 åƒç´ " + +#: notecontent.cpp:769 +#, fuzzy +msgid "Opening image..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:770 +#, fuzzy +msgid "Opening images..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:771 +#, fuzzy +msgid "Opening image with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:772 +#, fuzzy +msgid "Opening images with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:773 +#, fuzzy +msgid "Open image with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:774 +#, fuzzy +msgid "Open images with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:798 +msgid "Click for full size view" +msgstr "" + +#: notecontent.cpp:862 +#, fuzzy +msgid "Opening animation..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:863 +#, fuzzy +msgid "Opening animations..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:864 +#, fuzzy +msgid "Opening animation with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:865 +#, fuzzy +msgid "Opening animations with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:866 +msgid "Open animation with:" +msgstr "" + +#: notecontent.cpp:867 +msgid "Open animations with:" +msgstr "" + +#: notecontent.cpp:978 +msgid "Type" +msgstr "" + +#: notecontent.cpp:1016 +#, fuzzy +msgid "Open this file" +msgstr "切æ›è‡³ä¸‹ä¸€å€‹basket" + +#: notecontent.cpp:1035 +#, fuzzy +msgid "Opening file..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1036 +#, fuzzy +msgid "Opening files..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1037 +#, fuzzy +msgid "Opening file with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1038 +#, fuzzy +msgid "Opening files with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1039 +#, fuzzy +msgid "Open file with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1040 +#, fuzzy +msgid "Open files with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1111 +#, fuzzy +msgid "Open this sound" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1148 +#, fuzzy +msgid "Opening sound..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1149 +#, fuzzy +msgid "Opening sounds..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1150 +#, fuzzy +msgid "Opening sound with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1151 +#, fuzzy +msgid "Opening sounds with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1152 +#, fuzzy +msgid "Open sound with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1153 +#, fuzzy +msgid "Open sounds with:" +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1191 +#, fuzzy +msgid "Target" +msgstr "儲存目標" + +#: notecontent.cpp:1214 +#, fuzzy +msgid "Open this link" +msgstr "切æ›è‡³ä¸‹ä¸€å€‹basket" + +#: notecontent.cpp:1240 +msgid "Link have no URL to open." +msgstr "" + +#: notecontent.cpp:1243 +#, fuzzy +msgid "Opening link target..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1244 +#, fuzzy +msgid "Opening link targets..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1245 +#, fuzzy +msgid "Opening link target with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1246 +#, fuzzy +msgid "Opening link targets with..." +msgstr "開啟自(&w),,,%1" + +#: notecontent.cpp:1247 +msgid "Open link target with:" +msgstr "" + +#: notecontent.cpp:1248 +msgid "Open link targets with:" +msgstr "" + +#: notecontent.cpp:1379 +msgid "%1 (run in terminal)" +msgstr "" + +#: notecontent.cpp:1382 +msgid "Comment" +msgstr "" + +#: notecontent.cpp:1386 +msgid "Command" +msgstr "" + +#: notecontent.cpp:1409 +msgid "Launch this application" +msgstr "" + +#: notecontent.cpp:1430 +msgid "The launcher have no command to run." +msgstr "" + +#: notecontent.cpp:1433 +msgid "Launching application..." +msgstr "" + +#: notecontent.cpp:1434 +msgid "Launching applications..." +msgstr "" + +#: notecontent.cpp:1521 +msgid "" +"_: RGB Colorspace: Red/Green/Blue\n" +"RGB" +msgstr "" + +#: notecontent.cpp:1522 +msgid "Red: %1, Green: %2, Blue: %3," +msgstr "" + +#: notecontent.cpp:1524 +msgid "" +"_: HSV Colorspace: Hue/Saturation/Value\n" +"HSV" +msgstr "" + +#: notecontent.cpp:1525 +msgid "Hue: %1, Saturation: %2, Value: %3," +msgstr "" + +#: notecontent.cpp:1678 +msgid "CSS Color Name" +msgstr "" + +#: notecontent.cpp:1688 +msgid "CSS Extended Color Name" +msgstr "" + +#: notecontent.cpp:1694 +msgid "Is Web Color" +msgstr "" + +#: noteedit.cpp:381 +msgid "" +"Images can not be edited here at the moment (the next version of BasKet Note " +"Pads will include an image editor).\n" +"Do you want to open it with an application that understand it?" +msgstr "" + +#: noteedit.cpp:383 +#, fuzzy +msgid "Edit Image Note" +msgstr "編輯物件åŠå好設定" + +#: noteedit.cpp:397 +msgid "" +"This animated image can not be edited here.\n" +"Do you want to open it with an application that understands it?" +msgstr "" + +#: noteedit.cpp:399 +#, fuzzy +msgid "Edit Animation Note" +msgstr "註解(&t):" + +#: noteedit.cpp:476 +msgid "Edit Color Note" +msgstr "" + +#: noteedit.cpp:499 +msgid "" +"The type of this note is unknown and can not be edited here.\n" +"You however can drag or copy the note into an application that understands " +"it." +msgstr "" + +#: noteedit.cpp:501 +#, fuzzy +msgid "Edit Unknown Note" +msgstr "註解(&t):" + +#: noteedit.cpp:530 +#, fuzzy +msgid "Edit Link Note" +msgstr "註解(&t):" + +#: noteedit.cpp:542 noteedit.cpp:555 +msgid "Auto" +msgstr "自動" + +#: noteedit.cpp:551 noteedit.cpp:704 +#, fuzzy +msgid "&Icon:" +msgstr "圖示(&I):" + +#: noteedit.cpp:575 +#, fuzzy +msgid "Ta&rget:" +msgstr "儲存目標" + +#: noteedit.cpp:576 +#, fuzzy +msgid "&Title:" +msgstr "標題(&T):" + +#: noteedit.cpp:689 +#, fuzzy +msgid "Edit Launcher Note" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: noteedit.cpp:698 +msgid "Choose a command to run:" +msgstr "" + +#: noteedit.cpp:707 +msgid "&Guess" +msgstr "" + +#: noteedit.cpp:723 +msgid "Comman&d:" +msgstr "" + +#: noteedit.cpp:724 tagsedit.cpp:379 +#, fuzzy +msgid "&Name:" +msgstr "å稱(&N):" + +#: noteedit.cpp:819 tagsedit.cpp:437 +msgid "Bold" +msgstr "ç²—é«”" + +#: noteedit.cpp:821 tagsedit.cpp:443 +msgid "Underline" +msgstr "下劃線" + +#: noteedit.cpp:826 +msgid "Align Left" +msgstr "" + +#: noteedit.cpp:827 +msgid "Centered" +msgstr "置中" + +#: noteedit.cpp:828 +#, fuzzy +msgid "Align Right" +msgstr "é å³" + +#: noteedit.cpp:829 +#, fuzzy +msgid "Justified" +msgstr "兩端å°é½Š" + +#: notefactory.cpp:445 +msgid "" +"

      %1 doesn't support the data you've dropped.
      It however created a " +"generic note, allowing you to drag or copy it to an application that " +"understand it.

      If you want the support of these data, please contact " +"developer or visit the BasKet " +"Drop Database.

      " +msgstr "" + +#: notefactory.cpp:449 +msgid "Unsupported MIME Type(s)" +msgstr "" + +#: notefactory.cpp:503 +msgid "&Move Here\tShift" +msgstr "" + +#: notefactory.cpp:504 +msgid "&Copy Here\tCtrl" +msgstr "" + +#: notefactory.cpp:505 +msgid "&Link Here\tCtrl+Shift" +msgstr "" + +#: notefactory.cpp:507 +msgid "C&ancel\tEscape" +msgstr "" + +#: notefactory.cpp:991 +msgid "Import Icon as Image" +msgstr "" + +#: notefactory.cpp:991 +msgid "Choose the size of the icon to import as an image:" +msgstr "" + +#: notefactory.cpp:1004 +msgid "Load File Content into a Note" +msgstr "" + +#. i18n: file passwordlayout.ui line 16 +#: password.cpp:36 rc.cpp:105 settings.cpp:593 +#, no-c-format +msgid "Password Protection" +msgstr "" + +#: password.cpp:53 +msgid "No private key selected." +msgstr "" + +#. i18n: file basket_part.rc line 5 +#: rc.cpp:3 rc.cpp:48 +#, fuzzy, no-c-format +msgid "&Basket" +msgstr "BasKet" + +#. i18n: file basket_part.rc line 10 +#: rc.cpp:6 rc.cpp:39 rc.cpp:51 rc.cpp:84 +#, no-c-format +msgid "&Export" +msgstr "" + +#. i18n: file basket_part.rc line 20 +#: rc.cpp:9 rc.cpp:42 rc.cpp:45 rc.cpp:54 rc.cpp:87 rc.cpp:90 +#, no-c-format +msgid "&Import" +msgstr "" + +#. i18n: file basket_part.rc line 51 +#: rc.cpp:15 rc.cpp:60 +#, no-c-format +msgid "&Go" +msgstr "" + +#. i18n: file basket_part.rc line 58 +#: rc.cpp:18 rc.cpp:63 +#, fuzzy, no-c-format +msgid "&Note" +msgstr "加入物件" + +#. i18n: file basket_part.rc line 73 +#: rc.cpp:21 rc.cpp:66 +#, fuzzy, no-c-format +msgid "&Tags" +msgstr "儲存目標" + +#. i18n: file basket_part.rc line 127 +#: rc.cpp:36 rc.cpp:81 +#, no-c-format +msgid "Text Formating Toolbar" +msgstr "" + +#. i18n: file kicondialogui.ui line 31 +#: rc.cpp:93 +#, no-c-format +msgid "KIconDialogUI" +msgstr "" + +#. i18n: file kicondialogui.ui line 105 +#: rc.cpp:96 +#, fuzzy, no-c-format +msgid "Fi<er:" +msgstr "檔案å稱(&F):" + +#. i18n: file kicondialogui.ui line 160 +#: rc.cpp:102 +#, no-c-format +msgid "Alt+O" +msgstr "" + +#. i18n: file passwordlayout.ui line 44 +#: rc.cpp:109 +#, no-c-format +msgid "&No protection" +msgstr "" + +#. i18n: file passwordlayout.ui line 47 +#: rc.cpp:112 +#, no-c-format +msgid "Alt+N" +msgstr "" + +#. i18n: file passwordlayout.ui line 55 +#: rc.cpp:115 +#, no-c-format +msgid "Protect basket with a &password" +msgstr "" + +#. i18n: file passwordlayout.ui line 58 +#: rc.cpp:118 +#, no-c-format +msgid "Alt+P" +msgstr "" + +#. i18n: file passwordlayout.ui line 82 +#: rc.cpp:121 +#, no-c-format +msgid "Protect basket with private &key:" +msgstr "" + +#. i18n: file passwordlayout.ui line 85 +#: rc.cpp:124 +#, no-c-format +msgid "Alt+K" +msgstr "" + +#: settings.cpp:367 +#, fuzzy +msgid "On left" +msgstr "在頂端" + +#: settings.cpp:368 +msgid "On right" +msgstr "" + +#: settings.cpp:369 +#, fuzzy +msgid "&Basket tree position:" +msgstr "於滑鼠指標ä½ç½®æ”¾ç½®ç‰©ä»¶(&D)" + +#: settings.cpp:376 settings.cpp:691 +#, fuzzy +msgid "On top" +msgstr "在頂端" + +#: settings.cpp:377 settings.cpp:692 +#, fuzzy +msgid "On bottom" +msgstr "在底部" + +#: settings.cpp:378 +#, fuzzy +msgid "&Filter bar position:" +msgstr "於滑鼠指標ä½ç½®æ”¾ç½®ç‰©ä»¶(&D)" + +#: settings.cpp:385 +msgid "&Use balloons to report results of global actions" +msgstr "" + +#: settings.cpp:388 +msgid "What are global actions?" +msgstr "" + +#: settings.cpp:389 +msgid "" +"You can configure global shortcuts to do some actions without having to show " +"the main window. For instance, you can paste the clipboard content, take a " +"color from a point of the screen, etc. You can also use the mouse scroll " +"wheel over the system tray icon to change the current basket. Or use the " +"middle mouse button on that icon to paste the current selection." +msgstr "" + +#: settings.cpp:392 +msgid "" +"When doing so, %1 pops up a little balloon message to inform you the action " +"has been successfully done. You can disable that balloon." +msgstr "" + +#: settings.cpp:393 +msgid "" +"Note that those messages are smart enough to not appear if the main window " +"is visible. This is because you already see the result of your actions in " +"the main window." +msgstr "" + +#: settings.cpp:402 +#, fuzzy +msgid "System Tray Icon" +msgstr "系統列圖示" + +#: settings.cpp:407 +#, fuzzy +msgid "&Dock in system tray" +msgstr "置於系統列" + +#: settings.cpp:416 +msgid "&Show current basket icon in system tray icon" +msgstr "" + +#: settings.cpp:426 +#, fuzzy +msgid "&Hide main window when mouse leaves it for" +msgstr "按下關閉鈕時隱è—主視窗(而éžé€€å‡ºç¨‹å¼)(&H)" + +#: settings.cpp:428 settings.cpp:439 +msgid " tenths of seconds" +msgstr "/10 秒é˜å¾Œ" + +#: settings.cpp:437 +#, fuzzy +msgid "Show &main window when mouse hovers over the system tray icon for" +msgstr "按下關閉鈕時隱è—主視窗(而éžé€€å‡ºç¨‹å¼)(&H)" + +#: settings.cpp:511 +#, fuzzy +msgid "Ani&mate changes in baskets" +msgstr "新建一個basket" + +#: settings.cpp:514 +#, fuzzy +msgid "&Show tooltips in baskets" +msgstr "å³åˆ»é¡¯ç¤ºå·¥å…·æ示(包括了物件註釋...)(&i)" + +#: settings.cpp:517 +#, fuzzy +msgid "&Big notes" +msgstr "加入物件" + +#: settings.cpp:522 +msgid "Behavior" +msgstr "" + +#: settings.cpp:525 +msgid "&Transform lines starting with * or - to lists in text editors" +msgstr "" + +#: settings.cpp:528 +msgid "Ask confirmation before &deleting notes" +msgstr "" + +#: settings.cpp:533 +#, fuzzy +msgid "&Export tags in texts" +msgstr "應用程å¼å¿«æ·åˆ—" + +#: settings.cpp:539 tagsedit.cpp:485 +msgid "When does this apply?" +msgstr "" + +#: settings.cpp:540 tagsedit.cpp:486 +msgid "" +"It does apply when you copy and paste, or drag and drop notes to a text " +"editor." +msgstr "" + +#: settings.cpp:541 +msgid "" +"If enabled, this property lets you paste the tags as textual equivalents." +msgstr "" + +#: settings.cpp:542 tagsedit.cpp:488 +msgid "" +"For instance, a list of notes with the To Do and Done tags are " +"exported as lines preceded by [ ] or [x], representing an " +"empty checkbox and a checked box." +msgstr "" + +#: settings.cpp:552 +msgid "&Group a new note when clicking on the right of the insertion line" +msgstr "" + +#: settings.cpp:556 +msgid "How to group a new note?" +msgstr "" + +#: settings.cpp:557 +msgid "" +"

      When this option is enabled, the insertion-line not only allows you to " +"insert notes at the cursor position, but also allows you to group a new note " +"with the one under the cursor:

      " +msgstr "" + +#: settings.cpp:559 +msgid "" +"

      Place your mouse between notes, where you want to add a new one.
      Click " +"on the left of the insertion-line middle-mark to insert a note." +"
      Click on the right to group a note, with the one below " +"or above, depending on where your mouse is.

      " +msgstr "" + +#: settings.cpp:574 +msgid "Do nothing" +msgstr "" + +#: settings.cpp:575 +#, fuzzy +msgid "Paste clipboard" +msgstr "複製至剪貼簿" + +#: settings.cpp:578 +msgid "Insert launcher note" +msgstr "" + +#: settings.cpp:581 +msgid "Insert color from screen" +msgstr "" + +#: settings.cpp:582 +#, fuzzy +msgid "Load note from file" +msgstr "載入自檔案(&d)" + +#: settings.cpp:583 +msgid "Import Launcher from KDE Menu" +msgstr "" + +#: settings.cpp:584 +#, fuzzy +msgid "Import icon" +msgstr "匯入一個圖示(&p)" + +#: settings.cpp:585 +msgid "&Shift+middle-click anywhere:" +msgstr "" + +#: settings.cpp:588 +#, fuzzy +msgid "at cursor position" +msgstr "於滑鼠指標ä½ç½®æ”¾ç½®ç‰©ä»¶(&D)" + +#: settings.cpp:599 +msgid "A&utomatically lock protected baskets when closed for" +msgstr "" + +#: settings.cpp:603 +#, fuzzy +msgid " minutes" +msgstr "加入物件" + +#: settings.cpp:614 +msgid "Use GnuPG agent for &private/public key protected baskets" +msgstr "" + +#: settings.cpp:690 +msgid "&Place of new notes:" +msgstr "" + +#: settings.cpp:693 +msgid "At current note" +msgstr "" + +#: settings.cpp:710 +msgid "&New images size:" +msgstr "" + +#: settings.cpp:718 +#, fuzzy +msgid "&by" +msgstr "高" + +#: settings.cpp:721 +msgid "pixels" +msgstr "åƒç´ " + +#: settings.cpp:723 +msgid "&Visualize..." +msgstr "é è¦½(&V)" + +#: settings.cpp:731 +msgid "View Content of Added Files for the Following Types" +msgstr "" + +#: settings.cpp:732 +#, fuzzy +msgid "&Plain text" +msgstr "è±å¯Œæ–‡å­—(HTML)" + +#: settings.cpp:733 +msgid "&HTML page" +msgstr "" + +#: settings.cpp:734 +msgid "&Image or animation" +msgstr "" + +#: settings.cpp:735 +msgid "&Sound" +msgstr "" + +#: settings.cpp:794 +msgid "Conference audio record" +msgstr "" + +#: settings.cpp:795 +msgid "Annual report" +msgstr "" + +#: settings.cpp:796 +msgid "Home folder" +msgstr "" + +#: settings.cpp:798 +#, fuzzy, c-format +msgid "Launch %1" +msgstr "BasKet" + +#: settings.cpp:799 +msgid "&Sounds" +msgstr "" + +#: settings.cpp:800 +msgid "&Files" +msgstr "" + +#: settings.cpp:801 +msgid "&Local Links" +msgstr "" + +#: settings.cpp:802 +#, fuzzy +msgid "&Network Links" +msgstr "尋找網路上的連çµ(&n)" + +#: settings.cpp:803 +msgid "Launc&hers" +msgstr "" + +#: settings.cpp:840 +msgid "Open &text notes with a custom application:" +msgstr "" + +#: settings.cpp:841 +#, fuzzy +msgid "Open text notes with:" +msgstr "開啟自(&w),,,%1" + +#: settings.cpp:848 +msgid "Open &image notes with a custom application:" +msgstr "" + +#: settings.cpp:849 +#, fuzzy +msgid "Open image notes with:" +msgstr "開啟自(&w),,,%1" + +#: settings.cpp:856 +msgid "Open a&nimation notes with a custom application:" +msgstr "" + +#: settings.cpp:857 +#, fuzzy +msgid "Open animation notes with:" +msgstr "開啟自(&w),,,%1" + +#: settings.cpp:864 +msgid "Open so&und notes with a custom application:" +msgstr "" + +#: settings.cpp:865 +#, fuzzy +msgid "Open sound notes with:" +msgstr "開啟自(&w),,,%1" + +#: settings.cpp:873 +msgid "" +"

      If checked, the application defined below will be used when opening that " +"type of note.

      Otherwise, the application you've configured in " +"Konqueror will be used.

      " +msgstr "" + +#: settings.cpp:882 +msgid "" +"

      Define the application to use for opening that type of note instead of " +"the application configured in Konqueror.

      " +msgstr "" + +#: settings.cpp:903 +msgid "How to change the application used to open Web links?" +msgstr "" + +#: settings.cpp:904 +msgid "" +"

      When opening Web links, they are opened in different applications, " +"depending on the content of the link (a Web page, an image, a PDF " +"document...), such as if they were files on your computer.

      Here is how " +"to do if you want every Web addresses to be opened in your Web browser. It " +"is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      • Open the KDE Control Center (if it is not available, try to type " +"\"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components" +"\" and then \"Components Selector\" section;
      • Choose \"Web Browser\", " +"check \"In the following browser:\" and enter the name of your Web browser " +"(like \"firefox\" or \"epiphany\").

      Now, when you click any link that start with \"http://...\", it will be opened in your Web " +"browser (eg. Mozilla Firefox or Epiphany or...).

      For more fine-grained " +"configuration (like opening only Web pages in your Web browser), read the " +"second help link.

      " +msgstr "" + +#: settings.cpp:922 +msgid "How to change the applications used to open files and links?" +msgstr "" + +#: settings.cpp:923 +msgid "" +"

      Here is how to set the application to be used for each type of file. This " +"also applies to Web links if you choose not to open them systematically in a " +"Web browser (see the first help link). The default settings should be good " +"enough for you, but this tip is useful if you are using GNOME, XFCE, or " +"another environment than KDE.

      This is an example of how to open HTML " +"pages in your Web browser (and keep using the other applications for other " +"addresses or files). Repeat these steps for each type of file you want to " +"open in a specific application.

      • Open the KDE Control Center (if " +"it is not available, try to type \"kcontrol\" in a command line terminal);
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • In the tree, expand \"text\" and click \"html\";
      • In the " +"applications list, add your Web browser as the first entry;
      • Do the " +"same for the type \"application -> xhtml+xml\".
      " +msgstr "" + +#: softwareimporters.cpp:45 +msgid "Import Hierarchy" +msgstr "" + +#: softwareimporters.cpp:51 +msgid "How to Import the Notes?" +msgstr "" + +#: softwareimporters.cpp:52 +msgid "&Keep original hierarchy (all notes in separate baskets)" +msgstr "" + +#: softwareimporters.cpp:53 +msgid "&First level notes in separate baskets" +msgstr "" + +#: softwareimporters.cpp:54 +#, fuzzy +msgid "&All notes in one basket" +msgstr "å³åˆ»é¡¯ç¤ºå·¥å…·æ示(包括了物件註釋...)(&i)" + +#: softwareimporters.cpp:74 +msgid "Import Text File" +msgstr "" + +#: softwareimporters.cpp:80 +msgid "Format of the Text File" +msgstr "" + +#: softwareimporters.cpp:81 +msgid "Notes separated by an &empty line" +msgstr "" + +#: softwareimporters.cpp:82 +msgid "One ¬e per line" +msgstr "" + +#: softwareimporters.cpp:83 +msgid "Notes begin with a &dash (-)" +msgstr "" + +#: softwareimporters.cpp:84 +msgid "Notes begin with a &star (*)" +msgstr "" + +#: softwareimporters.cpp:85 +msgid "&Use another separator:" +msgstr "" + +#: softwareimporters.cpp:95 +#, fuzzy +msgid "&All in one note" +msgstr "å³åˆ»é¡¯ç¤ºå·¥å…·æ示(包括了物件註釋...)(&i)" + +#: softwareimporters.cpp:237 +msgid "From KJots" +msgstr "" + +#: softwareimporters.cpp:325 +msgid "From KNotes" +msgstr "" + +#: softwareimporters.cpp:396 +msgid "From Sticky Notes" +msgstr "" + +#: softwareimporters.cpp:446 +msgid "From Tomboy" +msgstr "" + +#: softwareimporters.cpp:494 +#, c-format +msgid "" +"_: From TextFile.txt\n" +"From %1" +msgstr "" + +#: softwareimporters.cpp:643 +msgid "" +"Can not import that file. It is either corrupted or not a TuxCards file." +msgstr "" + +#: softwareimporters.cpp:643 +msgid "Bad File Format" +msgstr "" + +#: softwareimporters.cpp:671 +msgid "" +"A note is encrypted. The importer does not yet support encrypted notes. " +"Please remove the encryption with TuxCards and re-import the file." +msgstr "" + +#: softwareimporters.cpp:671 +msgid "Encrypted Notes not Supported Yet" +msgstr "" + +#: softwareimporters.cpp:673 +msgid "" +"Encrypted note.
      The importer do not support " +"encrypted notes yet. Please remove the encryption with TuxCards and re-" +"import the file.
      " +msgstr "" + +#: systemtray.cpp:140 +msgid "" +"

      Closing the main window will keep %1 running in the system tray. Use " +"Quit from the Basket menu to quit the application.

      " +msgstr "" + +#: systemtray.cpp:186 systemtray.cpp:191 +msgid "Docking in System Tray" +msgstr "置於系統列" + +#: systemtray.cpp:237 +#, fuzzy +msgid "Pasted selection to basket %1" +msgstr "貼上所é¸æ“‡(%1)至basket %2" + +#: systemtray.cpp:272 +msgid "&Minimize" +msgstr "" + +#: systemtray.cpp:274 +msgid "&Restore" +msgstr "" + +#: systemtray.cpp:434 +msgid "%1 (Locked)" +msgstr "" + +#: tag.cpp:80 +msgid "%1: %2" +msgstr "" + +#: tag.cpp:544 +msgid "To Do" +msgstr "" + +#: tag.cpp:544 +#, fuzzy +msgid "Unchecked" +msgstr "檢查物件(&k)" + +#: tag.cpp:544 +msgid "Done" +msgstr "" + +#: tag.cpp:545 +#, fuzzy +msgid "Progress" +msgstr "Basketå好設定(&p)" + +#: tag.cpp:545 +#, c-format +msgid "0 %" +msgstr "" + +#: tag.cpp:545 +#, c-format +msgid "25 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "50 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "75 %" +msgstr "" + +#: tag.cpp:546 +#, c-format +msgid "100 %" +msgstr "" + +#: tag.cpp:599 +msgid "Priority" +msgstr "" + +#: tag.cpp:599 +msgid "Low" +msgstr "" + +#: tag.cpp:599 +msgid "Medium" +msgstr "" + +#: tag.cpp:600 +msgid "High" +msgstr "" + +#: tag.cpp:600 +msgid "Preference" +msgstr "" + +#: tag.cpp:600 +msgid "Bad" +msgstr "" + +#: tag.cpp:601 +msgid "Good" +msgstr "" + +#: tag.cpp:601 +msgid "Excellent" +msgstr "" + +#: tag.cpp:601 +#, fuzzy +msgid "Highlight" +msgstr "é å³" + +#: tag.cpp:667 +msgid "Important" +msgstr "" + +#: tag.cpp:667 +msgid "Very Important" +msgstr "" + +#: tag.cpp:668 +msgid "Idea" +msgstr "" + +#: tag.cpp:668 +msgid "" +"_: The initial of 'Idea'\n" +"I." +msgstr "" + +#: tag.cpp:668 +#, fuzzy +msgid "Title" +msgstr "標題(&T):" + +#: tag.cpp:669 +msgid "Code" +msgstr "" + +#: tag.cpp:669 +msgid "Work" +msgstr "" + +#: tag.cpp:669 +msgid "" +"_: The initial of 'Work'\n" +"W." +msgstr "" + +#: tag.cpp:687 +msgid "Personal" +msgstr "" + +#: tag.cpp:687 +msgid "" +"_: The initial of 'Personal'\n" +"P." +msgstr "" + +#: tag.cpp:687 +msgid "Funny" +msgstr "" + +#: tagsedit.cpp:207 tagsedit.cpp:227 +msgid "" +"_: Tag name (shortcut)\n" +"%1 (%2)" +msgstr "" + +#: tagsedit.cpp:325 +msgid "Customize Tags" +msgstr "" + +#: tagsedit.cpp:333 +msgid "Ne&w Tag" +msgstr "" + +#: tagsedit.cpp:334 +#, fuzzy +msgid "New St&ate" +msgstr "新建basket" + +#: tagsedit.cpp:350 +msgid "Move Up (Ctrl+Shift+Up)" +msgstr "" + +#: tagsedit.cpp:351 +msgid "Move Down (Ctrl+Shift+Down)" +msgstr "" + +#: tagsedit.cpp:375 +#, fuzzy +msgid "Tag" +msgstr "儲存目標" + +#: tagsedit.cpp:382 +#, fuzzy +msgid "" +"_: Remove tag shortcut\n" +"&Remove" +msgstr "新建basket" + +#: tagsedit.cpp:383 +msgid "S&hortcut:" +msgstr "" + +#: tagsedit.cpp:387 +msgid "&Inherited by new sibling notes" +msgstr "" + +#: tagsedit.cpp:398 tagsedit.cpp:1026 tagsedit.cpp:1042 +msgid "State" +msgstr "" + +#: tagsedit.cpp:402 +#, fuzzy +msgid "Na&me:" +msgstr "å稱(&N):" + +#: tagsedit.cpp:409 +#, fuzzy +msgid "" +"_: Remove tag emblem\n" +"Remo&ve" +msgstr "新建basket" + +#: tagsedit.cpp:410 +msgid "&Emblem:" +msgstr "" + +#: tagsedit.cpp:426 +#, fuzzy +msgid "&Background:" +msgstr "背景é¡è‰²(&B)" + +#: tagsedit.cpp:455 +msgid "Strike Through" +msgstr "" + +#: tagsedit.cpp:457 +#, fuzzy +msgid "&Text:" +msgstr "文字(&T)" + +#: tagsedit.cpp:467 +#, fuzzy +msgid "Co&lor:" +msgstr "é¡è‰²" + +#: tagsedit.cpp:471 +#, fuzzy +msgid "&Font:" +msgstr "圖示(&I):" + +#: tagsedit.cpp:474 +#, fuzzy +msgid "&Size:" +msgstr "標題(&T):" + +#: tagsedit.cpp:477 +msgid "Te&xt equivalent:" +msgstr "" + +#: tagsedit.cpp:487 +msgid "" +"If filled, this property lets you paste this tag or this state as textual " +"equivalent." +msgstr "" + +#: tagsedit.cpp:496 +#, fuzzy +msgid "On ever&y line" +msgstr "下劃線" + +#: tagsedit.cpp:501 +#, fuzzy +msgid "What does it mean?" +msgstr "貼上至所é¸æ“‡" + +#: tagsedit.cpp:502 +msgid "" +"When a note has several lines, you can choose to export the tag or the state " +"on the first line or on every line of the note." +msgstr "" + +#: tagsedit.cpp:504 +msgid "" +"In the example above, the tag of the top note is only exported on the first " +"line, while the tag of the bottom note is exported on every line of the note." +msgstr "" + +#: tagsedit.cpp:901 +msgid "" +"Deleting the tag will remove it from every note it is currently assigned to." +msgstr "" + +#: tagsedit.cpp:902 +#, fuzzy +msgid "Confirm Delete Tag" +msgstr "貼上至所é¸æ“‡" + +#: tagsedit.cpp:903 +#, fuzzy +msgid "Delete Tag" +msgstr "新建basket" + +#: tagsedit.cpp:908 +msgid "" +"Deleting the state will remove the tag from every note the state is " +"currently assigned to." +msgstr "" + +#: tagsedit.cpp:909 +#, fuzzy +msgid "Confirm Delete State" +msgstr "貼上至所é¸æ“‡" + +#: tagsedit.cpp:910 +#, fuzzy +msgid "Delete State" +msgstr "新建basket" + +#: variouswidgets.cpp:47 +#, fuzzy +msgid "..." +msgstr "新建basket(&N)..." + +#: variouswidgets.cpp:84 variouswidgets.cpp:199 +#, fuzzy +msgid "16 by 16 pixels" +msgstr "åƒç´ " + +#: variouswidgets.cpp:85 variouswidgets.cpp:200 +#, fuzzy +msgid "22 by 22 pixels" +msgstr "åƒç´ " + +#: variouswidgets.cpp:86 variouswidgets.cpp:201 +#, fuzzy +msgid "32 by 32 pixels" +msgstr "åƒç´ " + +#: variouswidgets.cpp:87 variouswidgets.cpp:202 +#, fuzzy +msgid "48 by 48 pixels" +msgstr "åƒç´ " + +#: variouswidgets.cpp:88 variouswidgets.cpp:203 +#, fuzzy +msgid "64 by 64 pixels" +msgstr "åƒç´ " + +#: variouswidgets.cpp:89 variouswidgets.cpp:204 +#, fuzzy +msgid "128 by 128 pixels" +msgstr "%1 高 %2 åƒç´ " + +#: variouswidgets.cpp:129 +msgid "" +"Resize the window to select the image size\n" +"and close it or press Escape to accept changes." +msgstr "" + +#, fuzzy +#~ msgid "I dislike..." +#~ msgstr "é è¦½(&V)" + +#, fuzzy +#~ msgid "I Do not Like..." +#~ msgstr "é è¦½(&V)" + +#, fuzzy +#~ msgid "Remo&ve" +#~ msgstr "新建basket" + +#, fuzzy +#~ msgid "" +#~ "Add a rich text note to the current basket without having to open main " +#~ "window." +#~ msgstr "å…許您建立一個新物件至目å‰çš„basket而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#, fuzzy +#~ msgid "&Rich Text" +#~ msgstr "è±å¯Œæ–‡å­—(HTML)" + +#, fuzzy +#~ msgid "Only in the Current Basket" +#~ msgstr "新建basket" + +#, fuzzy +#~ msgid "In Every Baskets" +#~ msgstr "新建basket" + +#, fuzzy +#~ msgid "Opening rich text..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Opening rich texts..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Opening rich text with..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Opening rich texts with..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Open rich text notes with:" +#~ msgstr "開啟自(&w),,,%1" + +#~ msgid "Show the debug window" +#~ msgstr "顯示除錯視窗" + +#, fuzzy +#~ msgid "Hide the main window in the system tray icon on startup" +#~ msgstr "按下關閉鈕時隱è—主視窗(而éžé€€å‡ºç¨‹å¼)(&H)" + +#, fuzzy +#~ msgid "C&hange..." +#~ msgstr "ç€è¦½(&B)..." + +#, fuzzy +#~ msgid "Change..." +#~ msgstr "ç€è¦½(&B)..." + +#, fuzzy +#~ msgid "Filter &all Baskets" +#~ msgstr "新建basket" + +#, fuzzy +#~ msgid "Do you really want to delete %1 and its contents?" +#~ msgstr "您真的確定è¦åˆªé™¤%1 ?" + +#~ msgid "Basket %1" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Checklist" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "Right Align" +#~ msgstr "é å³" + +#, fuzzy +#~ msgid "Do you really want to delete this item?" +#~ msgstr "您真的確定è¦åˆªé™¤%1 ?" + +#, fuzzy +#~ msgid "Copied item to clipboard." +#~ msgstr "複製至剪貼簿" + +#, fuzzy +#~ msgid "Cutted item to clipboard." +#~ msgstr "複製至剪貼簿" + +#, fuzzy +#~ msgid "Opening item file..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Opening item file with..." +#~ msgstr "開啟自(&w),,,%1" + +#, fuzzy +#~ msgid "Save Target" +#~ msgstr "儲存目標" + +#, fuzzy +#~ msgid "Save a Copy" +#~ msgstr "儲存複製" + +#, fuzzy +#~ msgid "&URL:" +#~ msgstr "網å€(&U):" + +#, fuzzy +#~ msgid "O&pen" +#~ msgstr "é–‹å•Ÿ(&O)%1" + +#, fuzzy +#~ msgid "Anno&tations:" +#~ msgstr "註解(&t):" + +#, fuzzy +#~ msgid "&File name:" +#~ msgstr "檔案å稱(&F):" + +#, fuzzy +#~ msgid "Co&ntent: %1" +#~ msgstr "內容(&n): %1" + +#~ msgid "&Meta-data" +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "New Basket Wizard" +#~ msgstr "新建basket" + +#, fuzzy +#~ msgid "Chec&k list" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "&Stack" +#~ msgstr "斜體(&I)" + +#, fuzzy +#~ msgid "&Mirror a folder" +#~ msgstr "é¡å°„一個檔案(&f)" + +#, fuzzy +#~ msgid "&Application launchers" +#~ msgstr "應用程å¼å¿«æ·åˆ—" + +#, fuzzy +#~ msgid "Basket Type" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Open the existing basket" +#~ msgstr "切æ›è‡³ä¸‹ä¸€å€‹basket" + +#, fuzzy +#~ msgid "Mirror only new files" +#~ msgstr "é¡å°„一個檔案(&f)" + +#, fuzzy +#~ msgid "Basket Name" +#~ msgstr "Basket %1" + +#, fuzzy +#~ msgid "Alte&rnate background color:" +#~ msgstr "交替背景é¡è‰²(&r) :" + +#, fuzzy +#~ msgid "Items ali&gnment:" +#~ msgstr "排列物件(&g) :" + +#~ msgid "Middle" +#~ msgstr "中部" + +#~ msgid "Show items chec&k boxes" +#~ msgstr "顯示物件é¸å–框(&k)" + +#, fuzzy +#~ msgid "Allow ins&ert items at cursor position" +#~ msgstr "於滑鼠指標ä½ç½®æ”¾ç½®ç‰©ä»¶(&D)" + +#~ msgid "on top" +#~ msgstr "在頂端" + +#~ msgid "on bottom" +#~ msgstr "在底部" + +#, fuzzy +#~ msgid "The cl&ipboard" +#~ msgstr "複製至剪貼簿" + +#, fuzzy +#~ msgid "The s&election" +#~ msgstr "貼上至所é¸æ“‡" + +#, fuzzy +#~ msgid "Mi&rror only new files" +#~ msgstr "é¡å°„一個檔案(&f)" + +#, fuzzy +#~ msgid "For &Text, Rich Text, Image, Animation, Color and Unknow Items" +#~ msgstr "主題類的物件(文字,è±å¯Œæ–‡å­—,å½±åƒåŠé¡è‰²)(&t) :" + +#, fuzzy +#~ msgid "Click: copy, Ctrl+click: edit, Alt+click: open" +#~ msgstr "點擊以複製, Ctrl+點擊以編輯, Alt+點擊以開啟 (設定值 1)" + +#, fuzzy +#~ msgid "Click: edit, Ctrl+click: copy, Alt+click: open" +#~ msgstr "點擊以編輯, Ctrl+點擊以複製, Alt+點擊以開啟 (設定值 2)" + +#, fuzzy +#~ msgid "Click: open, Ctrl+click: edit, Alt+click: copy" +#~ msgstr "點擊以開啟, Ctrl+點擊以編輯, Alt+點擊以複製 (設定值 3)" + +#, fuzzy +#~ msgid "Double-click: copy, Ctrl+double-click: edit, Alt+double-click: open" +#~ msgstr "點擊以複製, Ctrl+點擊以編輯, Alt+點擊以開啟 (設定值 1)" + +#, fuzzy +#~ msgid "Double-click: edit, Ctrl+double-click: copy, Alt+double-click: open" +#~ msgstr "點擊以編輯, Ctrl+點擊以複製, Alt+點擊以開啟 (設定值 2)" + +#, fuzzy +#~ msgid "Double-click: open, Ctrl+double-click: edit, Alt+double-click: copy" +#~ msgstr "點擊以開啟, Ctrl+點擊以編輯, Alt+點擊以複製 (設定值 3)" + +#, fuzzy +#~ msgid "Add Item Polic&y" +#~ msgstr "加入物件方案(&y)" + +#, fuzzy +#~ msgid "C&lick Actions" +#~ msgstr "點擊時動作(&l)" + +#, fuzzy +#~ msgid "Clip&board" +#~ msgstr "複製至剪貼簿" + +#, fuzzy +#~ msgid "&Mirror" +#~ msgstr "é¡å°„一個檔案(&f)" + +#, fuzzy +#~ msgid "%1 item to drag (%2):" +#~ msgstr "%1個物件被拖曳(%2)" + +#~ msgid "Last" +#~ msgstr "最後" + +#~ msgid "First" +#~ msgstr "最先" + +#~ msgid "(Empty)" +#~ msgstr "(空的)" + +#, fuzzy +#~ msgid "Select Chec&ked Items" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "Pre&vious Checked Item" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "Ne&xt Checked Item" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "Edit &Meta-data..." +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "Chec&k" +#~ msgstr "檢查物件(&k)" + +#, fuzzy +#~ msgid "Checklist basket." +#~ msgstr "新建basket..." + +#, fuzzy +#~ msgid "Clips basket." +#~ msgstr "新建basket..." + +#, fuzzy +#~ msgid "A&ppearance:" +#~ msgstr "註解(&p):" + +#, fuzzy +#~ msgid "Icon name: %1" +#~ msgstr "圖示(&I):" + +#, fuzzy +#~ msgid "" +#~ "_: No icon\n" +#~ "None" +#~ msgstr "顯示圖示(&S):" + +#~ msgid "BasKet" +#~ msgstr "BasKet" + +#, fuzzy +#~ msgid "" +#~ "Allow you to paste the current stack item into the active window without " +#~ "have to take the mouse and drag it." +#~ msgstr "å…許您切æ›ç›®å‰çš„basket至下一個而ä¸ç”¨å¦é–‹æ–°è¦–窗。" + +#, fuzzy +#~ msgid "Rotate items in current stack" +#~ msgstr "建立一個新物件至目å‰çš„basket" + +#, fuzzy +#~ msgid "Clear all items in the current stack" +#~ msgstr "建立一個新物件至目å‰çš„basket" + +#, fuzzy +#~ msgid "Remove all items of the current stack basket." +#~ msgstr "建立一個新物件至目å‰çš„basket" + +#, fuzzy +#~ msgid "copy to selection" +#~ msgstr "貼上至所é¸æ“‡" + +#, fuzzy +#~ msgid "edit meta-data" +#~ msgstr "&Meta-data" + +#, fuzzy +#~ msgid "" +#~ "_: %x=copy|edit|open\n" +#~ "Shift+double-click: %1, Shift+Ctrl+double-click: %2, Shift+Alt+double-" +#~ "click: %3." +#~ msgstr "點擊以複製, Ctrl+點擊以編輯, Alt+點擊以開啟 (設定值 1)" + +#, fuzzy +#~ msgid "" +#~ "_: %x=copy|edit|open\n" +#~ "Double-click: %1, Ctrl+double-click: %2, Alt+double-click: %3. Press " +#~ "Shift for more." +#~ msgstr "點擊以編輯, Ctrl+點擊以複製, Alt+點擊以開啟 (設定值 2)" + +#, fuzzy +#~ msgid "Show ite&ms tooltips" +#~ msgstr "顯示物件工具æ示(註解...)(&t)" + +#, fuzzy +#~ msgid "Import an icon:" +#~ msgstr "匯入一個圖示(&p)" diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..a392f0e --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,106 @@ +# set the include path for X, qt and KDE +INCLUDES = $(all_includes) + +# let automoc handle all of the meta source files (moc) +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/basket.pot + +KDE_ICON = AUTO + +# these are the headers for your project + +noinst_HEADERS = basket.h basketproperties.h mainwindow.h basket_part.h \ + debugwindow.h linklabel.h variouswidgets.h xmlwork.h keyboard.h global.h settings.h \ + focusedwidgets.h popupmenu.h basketfactory.h exporterdialog.h tag.h kcolorcombo2.h \ + newbasketdialog.h tagsedit.h note.h notecontent.h notedrag.h noteedit.h notefactory.h \ + filter.h tools.h backgroundmanager.h regiongrabber.h softwareimporters.h \ + kicondialog.h kiconcanvas.h kgpgme.h crashhandler.h password.h bnpview.h \ + systemtray.h clickablelabel.h colorpicker.h basketlistview.h qeffects.h likeback.h \ + formatimporter.h aboutdata.h basketstatusbar.h basketdcopiface.h basket_options.h \ + likeback_private.h application.h archive.h htmlexporter.h backup.h + +######################################################################### +# COMMON FILES SECTION +######################################################################### + +lib_LTLIBRARIES = libbasketcommon.la + +AM_CPPFLAGS = $(GPGME_CFLAGS) + +libbasketcommon_la_LDFLAGS = -avoid-version -no-undefined $(all_libraries) + +libbasketcommon_la_LIBADD = $(LIB_ARTSKDE) -lkio $(LIB_KDEUI) $(LIB_KDECORE) \ + $(LIB_QT) $(LIBSOCKET) $(GPGME_LIBS) $(LIB_KPARTS) -lDCOP -lkdefx -lkdeui + +libbasketcommon_la_SOURCES = \ + archive.cpp bnpview.cpp settings.cpp basket.cpp basketproperties.cpp \ + linklabel.cpp variouswidgets.cpp xmlwork.cpp keyboard.cpp \ + global.cpp exporterdialog.cpp htmlexporter.cpp notefactory.cpp softwareimporters.cpp \ + focusedwidgets.cpp popupmenu.cpp basketfactory.cpp \ + tag.cpp qeffects.cpp kcolorcombo2.cpp newbasketdialog.cpp tagsedit.cpp \ + formatimporter.cpp note.cpp notecontent.cpp notedrag.cpp noteedit.cpp \ + filter.cpp tools.cpp backgroundmanager.cpp regiongrabber.cpp \ + kicondialogui.ui kicondialog.cpp kiconcanvas.cpp kgpgme.cpp likeback.cpp \ + crashhandler.cpp passwordlayout.ui password.cpp colorpicker.cpp \ + basketlistview.cpp debugwindow.cpp systemtray.cpp aboutdata.cpp \ + basketstatusbar.cpp clickablelabel.cpp basketdcopiface.skel backup.cpp + +######################################################################### +# APPLICATION SECTION +######################################################################### +# this is the program that gets installed. it's name is used for all +# of the other Makefile.am variables +bin_PROGRAMS = basket + +# the application source, library search path, and link libraries +basket_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_KUTILS) +basket_LDADD = libbasketcommon.la + +# this is where the desktop file will go +shelldesktopdir = $(xdg_appsdir) +shelldesktop_DATA = basket.desktop + +# this is where the shell's XML-GUI resource file goes +rcdir = $(kde_datadir)/basket +rc_DATA = basketui.rc + +basket_SOURCES = main.cpp mainwindow.cpp application.cpp + +kde_icon_KDEICON = cr128-app-basket.png cr16-app-basket.png cr22-app-basket.png \ + cr32-app-basket.png cr48-app-basket.png cr64-app-basket.png hi16-app-basket_old.png \ + hi32-app-basket_old.png crsc-app-basket.svg \ + cr16-action-likeback_like.png cr16-action-likeback_dislike.png \ + cr16-action-likeback_bug.png cr16-action-likeback_feature.png + +################## +# KPART SECTION +################## + +kde_module_LTLIBRARIES = kcm_basket.la libbasketpart.la + +libbasketpart_la_SOURCES = basket_part.cpp +libbasketpart_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined +libbasketpart_la_LIBADD = libbasketcommon.la -lkparts -lkdeui $(LIB_KDECORE) $(LIB_QT) -lDCOP + +kcm_basket_la_SOURCES = kcm_basket.cpp +kcm_basket_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_basket_la_LIBADD = libbasketcommon.la $(LIB_KDECORE) $(LIB_QT) -lkdeui + +# this is where the desktop file will go +partdesktopdir = $(kde_servicesdir) +partdesktop_DATA = basket_part.desktop + +# this is where the part's XML-GUI resource file goes +partdir = $(kde_datadir)/basket +part_DATA = basket_part.rc + +kde_services_DATA = \ + basket_config_general.desktop \ + basket_config_baskets.desktop \ + basket_config_new_notes.desktop \ + basket_config_notes_appearance.desktop \ + basket_config_apps.desktop \ + basket_config_features.desktop \ + basket_config_notes.desktop diff --git a/src/aboutdata.cpp b/src/aboutdata.cpp new file mode 100644 index 0000000..fa70b6f --- /dev/null +++ b/src/aboutdata.cpp @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "aboutdata.h" +#ifdef HAVE_CONFIG_H +#include +#endif + +static const char description[] = I18N_NOOP( + "

      Taking care of your ideas.

      " + "

      A note-taking application that makes it easy to record ideas as you think, and quickly find them later. " + "Organizing your notes has never been so easy.

      "); + + // Or how to make order of disorganized toughts. + +AboutData::AboutData() + : KAboutData( "basket", I18N_NOOP("BasKet Note Pads"), + VERSION, description, KAboutData::License_GPL_V2, + "(c) 2003-2007, S\303\251bastien Lao\303\273t", 0, + "http://basket.kde.org/", + "basket-devel@lists.sourceforge.net" ) +{ + addAuthor( "Kelvie Wong", + I18N_NOOP("Maintainer"), + "kelvie@ieee.org" ); + + addAuthor( "S\303\251bastien Lao\303\273t", + I18N_NOOP("Original Author"), + "slaout@linux62.org" ); + + addAuthor( "Petri Damst\303\251n", + I18N_NOOP("Basket encryption, Kontact integration, KnowIt importer"), + "damu@iki.fi" ); + + addAuthor( "Alex Gontmakher", + I18N_NOOP("Baskets auto lock, save-status icon, HTML copy/paste, basket name tooltip, drop to basket name"), + "gsasha@cs.technion.ac.il" ); + + addAuthor( "Marco Martin", + I18N_NOOP("Icon"), + "m4rt@libero.it" ); +} diff --git a/src/aboutdata.h b/src/aboutdata.h new file mode 100644 index 0000000..f8cfea4 --- /dev/null +++ b/src/aboutdata.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef ABOUTDATA_H +#define ABOUTDATA_H + +#include + +/** + @author Sébastien Laoût +*/ + +class AboutData : public KAboutData +{ + public: + AboutData(); +}; + +#endif diff --git a/src/application.cpp b/src/application.cpp new file mode 100644 index 0000000..f15cdf4 --- /dev/null +++ b/src/application.cpp @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include + +#include "application.h" +#include "global.h" +#include "bnpview.h" + +Application::Application() + : KUniqueApplication() +{ +} + +Application::~Application() +{ +} + +int Application::newInstance() +{ + KUniqueApplication::newInstance(); + + // Open the basket archive or template file supplied as argument: + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (args && args->count() >= 1) { + QString fileName = QFile::decodeName(args->arg(args->count() - 1)); + if (QFile::exists(fileName)) { + QFileInfo fileInfo(fileName); + if (!fileInfo.isDir()) { // Do not mis-interpret data-folder param! + // Tags are not loaded until Global::bnpView::lateInit() is called. + // It is called 0ms after the application start. + BNPView::s_fileToOpen = fileName; + QTimer::singleShot( 100, Global::bnpView, SLOT(delayedOpenArchive()) ); +// Global::bnpView->openArchive(fileName); + args->clear(); + } + } + } + return 0; +} diff --git a/src/application.h b/src/application.h new file mode 100644 index 0000000..fd8d5ea --- /dev/null +++ b/src/application.h @@ -0,0 +1,38 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef APPLICATION_H +#define APPLICATION_H + +#include +#include + +/** + * @author Sébastien Laoût + */ +class Application : public KUniqueApplication +{ + public: + Application(); + ~Application(); + int newInstance(); +}; + +#endif // APPLICATION_H diff --git a/src/archive.cpp b/src/archive.cpp new file mode 100644 index 0000000..7365501 --- /dev/null +++ b/src/archive.cpp @@ -0,0 +1,637 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "archive.h" +#include "global.h" +#include "bnpview.h" +#include "basket.h" +#include "basketlistview.h" +#include "basketfactory.h" +#include "tag.h" +#include "xmlwork.h" +#include "tools.h" +#include "backgroundmanager.h" +#include "formatimporter.h" + +#include + +void Archive::save(Basket *basket, bool withSubBaskets, const QString &destination) +{ + QDir dir; + + KProgressDialog dialog(0, 0, i18n("Save as Basket Archive"), i18n("Saving as basket archive. Please wait..."), /*Not modal, for password dialogs!*/false); + dialog.showCancelButton(false); + dialog.setAutoClose(true); + dialog.show(); + KProgress *progress = dialog.progressBar(); + progress->setTotalSteps(/*Preparation:*/1 + /*Finishing:*/1 + /*Basket:*/1 + /*SubBaskets:*/(withSubBaskets ? Global::bnpView->basketCount(Global::bnpView->listViewItemForBasket(basket)) : 0)); + progress->setValue(0); + + // Create the temporar folder: + QString tempFolder = Global::savesFolder() + "temp-archive/"; + dir.mkdir(tempFolder); + + // Create the temporar archive file: + QString tempDestination = tempFolder + "temp-archive.tar.gz"; + KTar tar(tempDestination, "application/x-gzip"); + tar.open(IO_WriteOnly); + tar.writeDir("baskets", "", ""); + + progress->advance(1); // Preparation finished + std::cout << "Preparation finished out of " << progress->totalSteps() << std::endl; + + // Copy the baskets data into the archive: + QStringList backgrounds; + saveBasketToArchive(basket, withSubBaskets, &tar, backgrounds, tempFolder, progress); + + // Create a Small baskets.xml Document: + QDomDocument document("basketTree"); + QDomElement root = document.createElement("basketTree"); + document.appendChild(root); + Global::bnpView->saveSubHierarchy(Global::bnpView->listViewItemForBasket(basket), document, root, withSubBaskets); + Basket::safelySaveToFile(tempFolder + "baskets.xml", "\n" + document.toString()); + tar.addLocalFile(tempFolder + "baskets.xml", "baskets/baskets.xml"); + dir.remove(tempFolder + "baskets.xml"); + + // Save a Small tags.xml Document: + QValueList tags; + listUsedTags(basket, withSubBaskets, tags); + Tag::saveTagsTo(tags, tempFolder + "tags.xml"); + tar.addLocalFile(tempFolder + "tags.xml", "tags.xml"); + dir.remove(tempFolder + "tags.xml"); + + // Save Tag Emblems (in case they are loaded on a computer that do not have those icons): + QString tempIconFile = tempFolder + "icon.png"; + for (Tag::List::iterator it = tags.begin(); it != tags.end(); ++it) { + State::List states = (*it)->states(); + for (State::List::iterator it2 = states.begin(); it2 != states.end(); ++it2) { + State *state = (*it2); + QPixmap icon = kapp->iconLoader()->loadIcon(state->emblem(), KIcon::Small, 16, KIcon::DefaultState, /*path_store=*/0L, /*canReturnNull=*/true); + if (!icon.isNull()) { + icon.save(tempIconFile, "PNG"); + QString iconFileName = state->emblem().replace('/', '_'); + tar.addLocalFile(tempIconFile, "tag-emblems/" + iconFileName); + } + } + } + dir.remove(tempIconFile); + + // Finish Tar.Gz Exportation: + tar.close(); + + // Computing the File Preview: + Basket *previewBasket = basket; // FIXME: Use the first non-empty basket! + QPixmap previewPixmap(previewBasket->visibleWidth(), previewBasket->visibleHeight()); + QPainter painter(&previewPixmap); + // Save old state, and make the look clean ("smile, you are filmed!"): + NoteSelection *selection = previewBasket->selectedNotes(); + previewBasket->unselectAll(); + Note *focusedNote = previewBasket->focusedNote(); + previewBasket->setFocusedNote(0); + previewBasket->doHoverEffects(0, Note::None); + // Take the screenshot: + previewBasket->drawContents(&painter, 0, 0, previewPixmap.width(), previewPixmap.height()); + // Go back to the old look: + previewBasket->selectSelection(selection); + previewBasket->setFocusedNote(focusedNote); + previewBasket->doHoverEffects(); + // End and save our splandid painting: + painter.end(); + QImage previewImage = previewPixmap.convertToImage(); + const int PREVIEW_SIZE = 256; + previewImage = previewImage.scale(PREVIEW_SIZE, PREVIEW_SIZE, QImage::ScaleMin); + previewImage.save(tempFolder + "preview.png", "PNG"); + + // Finaly Save to the Real Destination file: + QFile file(destination); + if (file.open(IO_WriteOnly)) { + ulong previewSize = QFile(tempFolder + "preview.png").size(); + ulong archiveSize = QFile(tempDestination).size(); + QTextStream stream(&file); + stream.setEncoding(QTextStream::Latin1); + stream << "BasKetNP:archive\n" + << "version:0.6.1\n" +// << "read-compatible:0.6.1\n" +// << "write-compatible:0.6.1\n" + << "preview*:" << previewSize << "\n"; + // Copy the Preview File: + const Q_ULONG BUFFER_SIZE = 1024; + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + QFile previewFile(tempFolder + "preview.png"); + if (previewFile.open(IO_ReadOnly)) { + while ((sizeRead = previewFile.readBlock(buffer, BUFFER_SIZE)) > 0) + file.writeBlock(buffer, sizeRead); + } + stream << "archive*:" << archiveSize << "\n"; + // Copy the Archive File: + QFile archiveFile(tempDestination); + if (archiveFile.open(IO_ReadOnly)) { + while ((sizeRead = archiveFile.readBlock(buffer, BUFFER_SIZE)) > 0) + file.writeBlock(buffer, sizeRead); + } + // Clean Up: + delete buffer; + buffer = 0; + file.close(); + } + + progress->advance(1); // Finishing finished + std::cout << "Finishing finished" << std::endl; + + // Clean Up Everything: + dir.remove(tempFolder + "preview.png"); + dir.remove(tempDestination); + dir.rmdir(tempFolder); +} + +void Archive::saveBasketToArchive(Basket *basket, bool recursive, KTar *tar, QStringList &backgrounds, const QString &tempFolder, KProgress *progress) +{ + // Basket need to be loaded for tags exportation. + // We load it NOW so that the progress bar really reflect the state of the exportation: + if (!basket->isLoaded()) { + basket->load(); + } + + QDir dir; + // Save basket data: + tar->addLocalDirectory(basket->fullPath(), "baskets/" + basket->folderName()); + tar->addLocalFile(basket->fullPath() + ".basket", "baskets/" + basket->folderName() + ".basket"); // The hidden files were not added + // Save basket icon: + QString tempIconFile = tempFolder + "icon.png"; + if (!basket->icon().isEmpty() && basket->icon() != "basket") { + QPixmap icon = kapp->iconLoader()->loadIcon(basket->icon(), KIcon::Small, 16, KIcon::DefaultState, /*path_store=*/0L, /*canReturnNull=*/true); + if (!icon.isNull()) { + icon.save(tempIconFile, "PNG"); + QString iconFileName = basket->icon().replace('/', '_'); + tar->addLocalFile(tempIconFile, "basket-icons/" + iconFileName); + } + } + // Save basket backgorund image: + QString imageName = basket->backgroundImageName(); + if (!basket->backgroundImageName().isEmpty() && !backgrounds.contains(imageName)) { + QString backgroundPath = Global::backgroundManager->pathForImageName(imageName); + if (!backgroundPath.isEmpty()) { + // Save the background image: + tar->addLocalFile(backgroundPath, "backgrounds/" + imageName); + // Save the preview image: + QString previewPath = Global::backgroundManager->previewPathForImageName(imageName); + if (!previewPath.isEmpty()) + tar->addLocalFile(previewPath, "backgrounds/previews/" + imageName); + // Save the configuration file: + QString configPath = backgroundPath + ".config"; + if (dir.exists(configPath)) + tar->addLocalFile(configPath, "backgrounds/" + imageName + ".config"); + } + backgrounds.append(imageName); + } + + progress->advance(1); // Basket exportation finished + std::cout << basket->basketName() << " finished" << std::endl; + + // Recursively save child baskets: + BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket); + if (recursive && item->firstChild()) { + for (BasketListViewItem *child = (BasketListViewItem*) item->firstChild(); child; child = (BasketListViewItem*) child->nextSibling()) { + saveBasketToArchive(child->basket(), recursive, tar, backgrounds, tempFolder, progress); + } + } +} + +void Archive::listUsedTags(Basket *basket, bool recursive, QValueList &list) +{ + basket->listUsedTags(list); + BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket); + if (recursive && item->firstChild()) { + for (BasketListViewItem *child = (BasketListViewItem*) item->firstChild(); child; child = (BasketListViewItem*) child->nextSibling()) { + listUsedTags(child->basket(), recursive, list); + } + } +} + +void Archive::open(const QString &path) +{ + // Create the temporar folder: + QString tempFolder = Global::savesFolder() + "temp-archive/"; + QDir dir; + dir.mkdir(tempFolder); + const Q_ULONG BUFFER_SIZE = 1024; + + QFile file(path); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::Latin1); + QString line = stream.readLine(); + if (line != "BasKetNP:archive") { + KMessageBox::error(0, i18n("This file is not a basket archive."), i18n("Basket Archive Error")); + file.close(); + Tools::deleteRecursively(tempFolder); + return; + } + QString version; + QStringList readCompatibleVersions; + QStringList writeCompatibleVersions; + while (!stream.atEnd()) { + // Get Key/Value Pair From the Line to Read: + line = stream.readLine(); + int index = line.find(':'); + QString key; + QString value; + if (index >= 0) { + key = line.left(index); + value = line.right(line.length() - index - 1); + } else { + key = line; + value = ""; + } + if (key == "version") { + version = value; + } else if (key == "read-compatible") { + readCompatibleVersions = QStringList::split(value, ";"); + } else if (key == "write-compatible") { + writeCompatibleVersions = QStringList::split(value, ";"); + } else if (key == "preview*") { + bool ok; + ulong size = value.toULong(&ok); + if (!ok) { + KMessageBox::error(0, i18n("This file is corrupted. It can not be opened."), i18n("Basket Archive Error")); + file.close(); + Tools::deleteRecursively(tempFolder); + return; + } + // Get the preview file: +//FIXME: We do not need the preview for now +// QFile previewFile(tempFolder + "preview.png"); +// if (previewFile.open(IO_WriteOnly)) { + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + while ((sizeRead = file.readBlock(buffer, QMIN(BUFFER_SIZE, size))) > 0) { +// previewFile.writeBlock(buffer, sizeRead); + size -= sizeRead; + } +// previewFile.close(); + delete buffer; +// } + } else if (key == "archive*") { + if (version != "0.6.1" && readCompatibleVersions.contains("0.6.1") && !writeCompatibleVersions.contains("0.6.1")) { + KMessageBox::information( + 0, + i18n("This file was created with a recent version of %1. " + "It can be opened but not every information will be available to you. " + "For instance, some notes may be missing because they are of a type only available in new versions. " + "When saving the file back, consider to save it to another file, to preserve the original one.") + .arg(kapp->aboutData()->programName()), + i18n("Basket Archive Error") + ); + } + if (version != "0.6.1" && !readCompatibleVersions.contains("0.6.1") && !writeCompatibleVersions.contains("0.6.1")) { + KMessageBox::error( + 0, + i18n("This file was created with a recent version of %1. Please upgrade to a newer version to be able to open that file.") + .arg(kapp->aboutData()->programName()), + i18n("Basket Archive Error") + ); + file.close(); + Tools::deleteRecursively(tempFolder); + return; + } + + bool ok; + ulong size = value.toULong(&ok); + if (!ok) { + KMessageBox::error(0, i18n("This file is corrupted. It can not be opened."), i18n("Basket Archive Error")); + file.close(); + Tools::deleteRecursively(tempFolder); + return; + } + + Global::mainWindow()->raise(); + + // Get the archive file: + QString tempArchive = tempFolder + "temp-archive.tar.gz"; + QFile archiveFile(tempArchive); + if (archiveFile.open(IO_WriteOnly)) { + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + while ((sizeRead = file.readBlock(buffer, QMIN(BUFFER_SIZE, size))) > 0) { + archiveFile.writeBlock(buffer, sizeRead); + size -= sizeRead; + } + archiveFile.close(); + delete buffer; + + // Extract the Archive: + QString extractionFolder = tempFolder + "extraction/"; + QDir dir; + dir.mkdir(extractionFolder); + KTar tar(tempArchive, "application/x-gzip"); + tar.open(IO_ReadOnly); + tar.directory()->copyTo(extractionFolder); + tar.close(); + + // Import the Tags: + importTagEmblems(extractionFolder); // Import and rename tag emblems BEFORE loading them! + QMap mergedStates = Tag::loadTags(extractionFolder + "tags.xml"); + QMap::Iterator it; + if (mergedStates.count() > 0) { + Tag::saveTags(); + } + + // Import the Background Images: + importArchivedBackgroundImages(extractionFolder); + + // Import the Baskets: + renameBasketFolders(extractionFolder, mergedStates); + + } + } else if (key.endsWith("*")) { + // We do not know what it is, but we should read the embedded-file in order to discard it: + bool ok; + ulong size = value.toULong(&ok); + if (!ok) { + KMessageBox::error(0, i18n("This file is corrupted. It can not be opened."), i18n("Basket Archive Error")); + file.close(); + Tools::deleteRecursively(tempFolder); + return; + } + // Get the archive file: + char *buffer = new char[BUFFER_SIZE]; + Q_LONG sizeRead; + while ((sizeRead = file.readBlock(buffer, QMIN(BUFFER_SIZE, size))) > 0) { + size -= sizeRead; + } + delete buffer; + } else { + // We do not know what it is, and we do not care. + } + // Analyse the Value, if Understood: + } + file.close(); + } + Tools::deleteRecursively(tempFolder); +} + +/** + * When opening a basket archive that come from another computer, + * it can contains tags that use icons (emblems) that are not present on that computer. + * Fortunately, basket archives contains a copy of every used icons. + * This method check for every emblems and import the missing ones. + * It also modify the tags.xml copy for the emblems to point to the absolute path of the impported icons. + */ +void Archive::importTagEmblems(const QString &extractionFolder) +{ + QDomDocument *document = XMLWork::openFile("basketTags", extractionFolder + "tags.xml"); + if (document == 0) + return; + QDomElement docElem = document->documentElement(); + + QDir dir; + dir.mkdir(Global::savesFolder() + "tag-emblems/"); + FormatImporter copier; // Only used to copy files synchronously + + QDomNode node = docElem.firstChild(); + while (!node.isNull()) { + QDomElement element = node.toElement(); + if ( (!element.isNull()) && element.tagName() == "tag" ) { + QDomNode subNode = element.firstChild(); + while (!subNode.isNull()) { + QDomElement subElement = subNode.toElement(); + if ( (!subElement.isNull()) && subElement.tagName() == "state" ) { + QString emblemName = XMLWork::getElementText(subElement, "emblem"); + if (!emblemName.isEmpty()) { + QPixmap emblem = kapp->iconLoader()->loadIcon(emblemName, KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/true); + // The icon does not exists on that computer, import it: + if (emblem.isNull()) { + // Of the emblem path was eg. "/home/seb/emblem.png", it was exported as "tag-emblems/_home_seb_emblem.png". + // So we need to copy that image to "~/.kde/share/apps/basket/tag-emblems/emblem.png": + int slashIndex = emblemName.findRev("/"); + QString emblemFileName = (slashIndex < 0 ? emblemName : emblemName.right(slashIndex - 2)); + QString source = extractionFolder + "tag-emblems/" + emblemName.replace('/', '_'); + QString destination = Global::savesFolder() + "tag-emblems/" + emblemFileName; + if (!dir.exists(destination)) + copier.copyFolder(source, destination); + // Replace the emblem path in the tags.xml copy: + QDomElement emblemElement = XMLWork::getElement(subElement, "emblem"); + subElement.removeChild(emblemElement); + XMLWork::addElement(*document, subElement, "emblem", destination); + } + } + } + subNode = subNode.nextSibling(); + } + } + node = node.nextSibling(); + } + Basket::safelySaveToFile(extractionFolder + "tags.xml", document->toString()); +} + +void Archive::importArchivedBackgroundImages(const QString &extractionFolder) +{ + FormatImporter copier; // Only used to copy files synchronously + QString destFolder = KGlobal::dirs()->saveLocation("data", "basket/backgrounds/"); + + QDir dir(extractionFolder + "backgrounds/", /*nameFilder=*/"*.png", /*sortSpec=*/QDir::Name | QDir::IgnoreCase, /*filterSpec=*/QDir::Files | QDir::NoSymLinks); + QStringList files = dir.entryList(); + for (QStringList::Iterator it = files.begin(); it != files.end(); ++it) { + QString image = *it; + if (!Global::backgroundManager->exists(image)) { + // Copy images: + QString imageSource = extractionFolder + "backgrounds/" + image; + QString imageDest = destFolder + image; + copier.copyFolder(imageSource, imageDest); + // Copy configuration file: + QString configSource = extractionFolder + "backgrounds/" + image + ".config"; + QString configDest = destFolder + image; + if (dir.exists(configSource)) + copier.copyFolder(configSource, configDest); + // Copy preview: + QString previewSource = extractionFolder + "backgrounds/previews/" + image; + QString previewDest = destFolder + "previews/" + image; + if (dir.exists(previewSource)) { + dir.mkdir(destFolder + "previews/"); // Make sure the folder exists! + copier.copyFolder(previewSource, previewDest); + } + // Append image to database: + Global::backgroundManager->addImage(imageDest); + } + } +} + +void Archive::renameBasketFolders(const QString &extractionFolder, QMap &mergedStates) +{ + QDomDocument *doc = XMLWork::openFile("basketTree", extractionFolder + "baskets/baskets.xml"); + if (doc != 0) { + QMap folderMap; + QDomElement docElem = doc->documentElement(); + QDomNode node = docElem.firstChild(); + renameBasketFolder(extractionFolder, node, folderMap, mergedStates); + loadExtractedBaskets(extractionFolder, node, folderMap, 0); + } +} + +void Archive::renameBasketFolder(const QString &extractionFolder, QDomNode &basketNode, QMap &folderMap, QMap &mergedStates) +{ + QDomNode n = basketNode; + while ( ! n.isNull() ) { + QDomElement element = n.toElement(); + if ( (!element.isNull()) && element.tagName() == "basket" ) { + QString folderName = element.attribute("folderName"); + if (!folderName.isEmpty()) { + // Find a folder name: + QString newFolderName = BasketFactory::newFolderName(); + folderMap[folderName] = newFolderName; + // Reserve the folder name: + QDir dir; + dir.mkdir(Global::basketsFolder() + newFolderName); + // Rename the merged tag ids: +// if (mergedStates.count() > 0) { + renameMergedStatesAndBasketIcon(extractionFolder + "baskets/" + folderName + ".basket", mergedStates, extractionFolder); +// } + // Child baskets: + QDomNode node = element.firstChild(); + renameBasketFolder(extractionFolder, node, folderMap, mergedStates); + } + } + n = n.nextSibling(); + } +} + +void Archive::renameMergedStatesAndBasketIcon(const QString &fullPath, QMap &mergedStates, const QString &extractionFolder) +{ + QDomDocument *doc = XMLWork::openFile("basket", fullPath); + if (doc == 0) + return; + QDomElement docElem = doc->documentElement(); + QDomElement properties = XMLWork::getElement(docElem, "properties"); + importBasketIcon(properties, extractionFolder); + QDomElement notes = XMLWork::getElement(docElem, "notes"); + if (mergedStates.count() > 0) + renameMergedStates(notes, mergedStates); + Basket::safelySaveToFile(fullPath, /*"\n" + */doc->toString()); +} + +void Archive::importBasketIcon(QDomElement properties, const QString &extractionFolder) +{ + QString iconName = XMLWork::getElementText(properties, "icon"); + if (!iconName.isEmpty() && iconName != "basket") { + QPixmap icon = kapp->iconLoader()->loadIcon(iconName, KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/true); + // The icon does not exists on that computer, import it: + if (icon.isNull()) { + QDir dir; + dir.mkdir(Global::savesFolder() + "basket-icons/"); + FormatImporter copier; // Only used to copy files synchronously + // Of the icon path was eg. "/home/seb/icon.png", it was exported as "basket-icons/_home_seb_icon.png". + // So we need to copy that image to "~/.kde/share/apps/basket/basket-icons/icon.png": + int slashIndex = iconName.findRev("/"); + QString iconFileName = (slashIndex < 0 ? iconName : iconName.right(slashIndex - 2)); + QString source = extractionFolder + "basket-icons/" + iconName.replace('/', '_'); + QString destination = Global::savesFolder() + "basket-icons/" + iconFileName; + if (!dir.exists(destination)) + copier.copyFolder(source, destination); + // Replace the emblem path in the tags.xml copy: + QDomElement iconElement = XMLWork::getElement(properties, "icon"); + properties.removeChild(iconElement); + QDomDocument document = properties.ownerDocument(); + XMLWork::addElement(document, properties, "icon", destination); + } + } +} + +void Archive::renameMergedStates(QDomNode notes, QMap &mergedStates) +{ + QDomNode n = notes.firstChild(); + while ( ! n.isNull() ) { + QDomElement element = n.toElement(); + if (!element.isNull()) { + if (element.tagName() == "group" ) { + renameMergedStates(n, mergedStates); + } else if (element.tagName() == "note") { + QString tags = XMLWork::getElementText(element, "tags"); + if (!tags.isEmpty()) { + QStringList tagNames = QStringList::split(";", tags); + for (QStringList::Iterator it = tagNames.begin(); it != tagNames.end(); ++it) { + QString &tag = *it; + if (mergedStates.contains(tag)) { + tag = mergedStates[tag]; + } + } + QString newTags = tagNames.join(";"); + QDomElement tagsElement = XMLWork::getElement(element, "tags"); + element.removeChild(tagsElement); + QDomDocument document = element.ownerDocument(); + XMLWork::addElement(document, element, "tags", newTags); + } + } + } + n = n.nextSibling(); + } +} + +void Archive::loadExtractedBaskets(const QString &extractionFolder, QDomNode &basketNode, QMap &folderMap, Basket *parent) +{ + bool basketSetAsCurrent = (parent != 0); + QDomNode n = basketNode; + while ( ! n.isNull() ) { + QDomElement element = n.toElement(); + if ( (!element.isNull()) && element.tagName() == "basket" ) { + QString folderName = element.attribute("folderName"); + if (!folderName.isEmpty()) { + // Move the basket folder to its destination, while renaming it uniquely: + QString newFolderName = folderMap[folderName]; + FormatImporter copier; + // The folder has been "reserved" by creating it. Avoid asking the user to override: + QDir dir; + dir.rmdir(Global::basketsFolder() + newFolderName); + copier.moveFolder(extractionFolder + "baskets/" + folderName, Global::basketsFolder() + newFolderName); + // Append and load the basket in the tree: + Basket *basket = Global::bnpView->loadBasket(newFolderName); + BasketListViewItem *basketItem = Global::bnpView->appendBasket(basket, (basket && parent ? Global::bnpView->listViewItemForBasket(parent) : 0)); + basketItem->setOpen(!XMLWork::trueOrFalse(element.attribute("folded", "false"), false)); + QDomElement properties = XMLWork::getElement(element, "properties"); + importBasketIcon(properties, extractionFolder); // Rename the icon fileName if necessary + basket->loadProperties(properties); + // Open the first basket of the archive: + if (!basketSetAsCurrent) { + Global::bnpView->setCurrentBasket(basket); + basketSetAsCurrent = true; + } + QDomNode node = element.firstChild(); + loadExtractedBaskets(extractionFolder, node, folderMap, basket); + } + } + n = n.nextSibling(); + } +} diff --git a/src/archive.h b/src/archive.h new file mode 100644 index 0000000..5389015 --- /dev/null +++ b/src/archive.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef ARCHIVE_H +#define ARCHIVE_H + +#include +#include + +class Basket; +class Tag; + +class QString; +class QStringList; +class QDomNode; +class KTar; +class KProgress; + +/** + * @author Sébastien Laoût + */ +class Archive +{ + public: + static void save(Basket *basket, bool withSubBaskets, const QString &destination); + static void open(const QString &path); + private: + // Convenient Methods for Saving: + static void saveBasketToArchive(Basket *basket, bool recursive, KTar *tar, QStringList &backgrounds, const QString &tempFolder, KProgress *progress); + static void listUsedTags(Basket *basket, bool recursive, QValueList &list); + // Convenient Methods for Loading: + static void renameBasketFolders(const QString &extractionFolder, QMap &mergedStates); + static void renameBasketFolder(const QString &extractionFolder, QDomNode &basketNode, QMap &folderMap, QMap &mergedStates); + static void renameMergedStatesAndBasketIcon(const QString &fullPath, QMap &mergedStates, const QString &extractionFolder); + static void renameMergedStates(QDomNode notes, QMap &mergedStates); + static void importBasketIcon(QDomElement properties, const QString &extractionFolder); + static void loadExtractedBaskets(const QString &extractionFolder, QDomNode &basketNode, QMap &folderMap, Basket *parent); + static void importTagEmblems(const QString &extractionFolder); + static void importArchivedBackgroundImages(const QString &extractionFolder); +}; + +#endif diff --git a/src/backgroundmanager.cpp b/src/backgroundmanager.cpp new file mode 100644 index 0000000..c289eca --- /dev/null +++ b/src/backgroundmanager.cpp @@ -0,0 +1,394 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "backgroundmanager.h" + +/** class BackgroundEntry: */ + +BackgroundEntry::BackgroundEntry(const QString &location) +{ + this->location = location; + name = KURL(location).fileName(); + tiled = false; + pixmap = 0; + preview = 0; + customersCount = 0; +} + +BackgroundEntry::~BackgroundEntry() +{ + delete pixmap; + delete preview; +} + +/** class OpaqueBackgroundEntry: */ + +OpaqueBackgroundEntry::OpaqueBackgroundEntry(const QString &name, const QColor &color) +{ + this->name = name; + this->color = color; + pixmap = 0; + customersCount = 0; +} + +OpaqueBackgroundEntry::~OpaqueBackgroundEntry() +{ + delete pixmap; +} + +/** class BackgroundManager: */ + +BackgroundManager::BackgroundManager() +{ +/// std::cout << "BackgroundManager: Found the following background images in "; + QStringList directories = KGlobal::dirs()->resourceDirs("data"); // eg. { "/home/seb/.kde/share/apps/", "/usr/share/apps/" } + // For each folder: + for (QStringList::Iterator it = directories.begin(); it != directories.end(); ++it) { + // For each file in those directories: + QDir dir(*it + "basket/backgrounds/", /*nameFilder=*/"*.png", /*sortSpec=*/QDir::Name | QDir::IgnoreCase, /*filterSpec=*/QDir::Files | QDir::NoSymLinks); +/// std::cout << *it + "basket/backgrounds/ "; + QStringList files = dir.entryList(); + for (QStringList::Iterator it2 = files.begin(); it2 != files.end(); ++it2) // TODO: If an image name is present in two folders? + addImage(*it + "basket/backgrounds/" + *it2); + } + +/// std::cout << ":" << std::endl; +/// for (BackgroundsList::Iterator it = m_backgroundsList.begin(); it != m_backgroundsList.end(); ++it) +/// std::cout << "* " << (*it)->location << " [ref: " << (*it)->name << "]" << std::endl; + + connect( &m_garbageTimer, SIGNAL(timeout()), this, SLOT(doGarbage()) ); +} + +BackgroundManager::~BackgroundManager() +{ +} + +void BackgroundManager::addImage(const QString &fullPath) +{ + m_backgroundsList.append(new BackgroundEntry(fullPath)); +} + +BackgroundEntry* BackgroundManager::backgroundEntryFor(const QString &image) +{ + for (BackgroundsList::Iterator it = m_backgroundsList.begin(); it != m_backgroundsList.end(); ++it) + if ((*it)->name == image) + return *it; + return 0; +} + +OpaqueBackgroundEntry* BackgroundManager::opaqueBackgroundEntryFor(const QString &image, const QColor &color) +{ + for (OpaqueBackgroundsList::Iterator it = m_opaqueBackgroundsList.begin(); it != m_opaqueBackgroundsList.end(); ++it) + if ((*it)->name == image && (*it)->color == color) + return *it; + return 0; +} + +bool BackgroundManager::subscribe(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + if (entry) { + // If it's the first time something subscribe to this image: + if (!entry->pixmap) { + // Try to load the pixmap: + entry->pixmap = new QPixmap(entry->location); + // Try to figure out if it's a tiled background image or not (default to NO): + KSimpleConfig config(entry->location + ".config", /*readOnly=*/true); + config.setGroup("BasKet Background Image Configuration"); + entry->tiled = config.readBoolEntry("tiled", false); + } + // Return if the image loading has failed: + if (entry->pixmap->isNull()) { +/// std::cout << "BackgroundManager: Failed to load " << entry->location << std::endl; + return false; + } + // Success: effectively subscribe: + ++entry->customersCount; + return true; + } else { + // Don't exist: subscription failed: +/// std::cout << "BackgroundManager: Requested unexisting image: " << image << std::endl; + return false; + } +} + +bool BackgroundManager::subscribe(const QString &image, const QColor &color) +{ + BackgroundEntry *backgroundEntry = backgroundEntryFor(image); + + // First, if the image doesn't exist, isn't subscribed, or failed to load then we don't go further: + if (!backgroundEntry || !backgroundEntry->pixmap || backgroundEntry->pixmap->isNull()) { +/// std::cout << "BackgroundManager: Requested an unexisting or unsubscribed image: (" << image << "," << color.name() << ")..." << std::endl; + return false; + } + + OpaqueBackgroundEntry *opaqueBackgroundEntry = opaqueBackgroundEntryFor(image, color); + + // If this couple is requested for the first time or it haven't been subscribed for a long time enough, create it: + if (!opaqueBackgroundEntry) { +/// std::cout << "BackgroundManager: Computing (" << image << "," << color.name() << ")..." << std::endl; + opaqueBackgroundEntry = new OpaqueBackgroundEntry(image, color); + opaqueBackgroundEntry->pixmap = new QPixmap(backgroundEntry->pixmap->size()); + opaqueBackgroundEntry->pixmap->fill(color); + QPainter painter(opaqueBackgroundEntry->pixmap); + painter.drawPixmap(0, 0, *(backgroundEntry->pixmap)); + painter.end(); + m_opaqueBackgroundsList.append(opaqueBackgroundEntry); + } + + // We are now sure the entry exist, do the subscription: + ++opaqueBackgroundEntry->customersCount; + return true; +} + +void BackgroundManager::unsubscribe(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + + if (!entry) { +/// std::cout << "BackgroundManager: Wanted to unsuscribe a not subscribed image: " << image << std::endl; + return; + } + + --entry->customersCount; + if (entry->customersCount <= 0) + requestDelayedGarbage(); +} + +void BackgroundManager::unsubscribe(const QString &image, const QColor &color) +{ + OpaqueBackgroundEntry *entry = opaqueBackgroundEntryFor(image, color); + + if (!entry) { +/// std::cout << "BackgroundManager: Wanted to unsuscribe a not subscribed colored image: (" << image << "," << color.name() << ")" << std::endl; + return; + } + + --entry->customersCount; + if (entry->customersCount <= 0) + requestDelayedGarbage(); +} + +QPixmap* BackgroundManager::pixmap(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + + if (!entry || !entry->pixmap || entry->pixmap->isNull()) { +/// std::cout << "BackgroundManager: Requested an unexisting or unsubscribed image: " << image << std::endl; + return 0; + } + + return entry->pixmap; +} + +QPixmap* BackgroundManager::opaquePixmap(const QString &image, const QColor &color) +{ + OpaqueBackgroundEntry *entry = opaqueBackgroundEntryFor(image, color); + + if (!entry || !entry->pixmap || entry->pixmap->isNull()) { +/// std::cout << "BackgroundManager: Requested an unexisting or unsubscribed colored image: (" << image << "," << color.name() << ")" << std::endl; + return 0; + } + + return entry->pixmap; +} + +bool BackgroundManager::tiled(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + + if (!entry || !entry->pixmap || entry->pixmap->isNull()) { +/// std::cout << "BackgroundManager: Requested an unexisting or unsubscribed image: " << image << std::endl; + return false; + } + + return entry->tiled; +} + +bool BackgroundManager::exists(const QString &image) +{ + for (BackgroundsList::iterator it = m_backgroundsList.begin(); it != m_backgroundsList.end(); ++it) + if ((*it)->name == image) + return true; + return false; +} + +QStringList BackgroundManager::imageNames() +{ + QStringList list; + for (BackgroundsList::iterator it = m_backgroundsList.begin(); it != m_backgroundsList.end(); ++it) + list.append((*it)->name); + return list; +} + +QPixmap* BackgroundManager::preview(const QString &image) +{ + static const int MAX_WIDTH = 100; + static const int MAX_HEIGHT = 75; + static const QColor PREVIEW_BG = Qt::white; + + BackgroundEntry *entry = backgroundEntryFor(image); + + if (!entry) { +/// std::cout << "BackgroundManager: Requested the preview of an unexisting image: " << image << std::endl; + return false; + } + + // The easiest way: already computed: + if (entry->preview) + return entry->preview; + + // Then, try to load the preview from file: + QString previewPath = KGlobal::dirs()->findResource("data", "basket/backgrounds/previews/" + entry->name); + QPixmap *previewPixmap = new QPixmap(previewPath); + // Success: + if (!previewPixmap->isNull()) { +/// std::cout << "BackgroundManager: Loaded image preview for " << entry->location << " from file " << previewPath << std::endl; + entry->preview = previewPixmap; + return entry->preview; + } + + // We failed? Then construct it: + // Note: if a preview is requested, it's because the user is currently choosing an image. + // Since we need that image to create the preview, we keep the image in memory. + // Then, it will already be loaded when user press [OK] in the background image chooser. + // BUT we also delay a garbage because we don't want EVERY images to be loaded if the user use only a few of them, of course: + + // Already used? Good: we don't have to load it... + if (!entry->pixmap) { + // Note: it's a code duplication from BackgroundManager::subscribe(const QString &image), + // Because, as we are loading the pixmap we ALSO need to know if it's a tile or not, in case that image will soon be used (and not destroyed by the garbager): + entry->pixmap = new QPixmap(entry->location); + // Try to figure out if it's a tiled background image or not (default to NO): + KSimpleConfig config(entry->location + ".config", /*readOnly=*/true); + config.setGroup("BasKet Background Image Configuration"); + entry->tiled = config.readBoolEntry("tiled", false); + } + + // The image cannot be loaded, we failed: + if (entry->pixmap->isNull()) + return 0; + + // Good that we are still alive: entry->pixmap contains the pixmap to rescale down for the preview: + // Compute new size: + int width = entry->pixmap->width(); + int height = entry->pixmap->height(); + if (width > MAX_WIDTH) { + height = height * MAX_WIDTH / width; + width = MAX_WIDTH; + } + if (height > MAX_HEIGHT) { + width = width * MAX_HEIGHT / height; + height = MAX_HEIGHT; + } + // And create the resulting pixmap: + QPixmap *result = new QPixmap(width, height); + result->fill(PREVIEW_BG); + QImage imageToScale = entry->pixmap->convertToImage(); + QPixmap pmScaled; + pmScaled.convertFromImage(imageToScale.smoothScale(width, height)); + QPainter painter(result); + painter.drawPixmap(0, 0, pmScaled); + painter.end(); + + // Saving it to file for later: + QString folder = KGlobal::dirs()->saveLocation("data", "basket/backgrounds/previews/"); + result->save(folder + entry->name, "PNG"); + + // Ouf! That's done: + entry->preview = result; + requestDelayedGarbage(); + return entry->preview; +} + +QString BackgroundManager::pathForImageName(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + if (entry == 0) + return ""; + else + return entry->location; +} + +QString BackgroundManager::previewPathForImageName(const QString &image) +{ + BackgroundEntry *entry = backgroundEntryFor(image); + if (entry == 0) + return ""; + else { + QString previewPath = KGlobal::dirs()->findResource("data", "basket/backgrounds/previews/" + entry->name); + QDir dir; + if (!dir.exists(previewPath)) + return ""; + else + return previewPath; + } +} + +void BackgroundManager::requestDelayedGarbage() +{ + static const int DELAY = 60/*seconds*/; + + if (!m_garbageTimer.isActive()) + m_garbageTimer.start(DELAY * 1000/*ms*/, /*singleShot=*/true); +} + +void BackgroundManager::doGarbage() +{ +/// std::cout << "BackgroundManager: Doing garbage..." << std::endl; + +/// std::cout << "BackgroundManager: Images:" << std::endl; + for (BackgroundsList::Iterator it = m_backgroundsList.begin(); it != m_backgroundsList.end(); ++it) { + BackgroundEntry *entry = *it; +/// std::cout << "* " << entry->name << ": used " << entry->customersCount << " times"; + if (entry->customersCount <= 0 && entry->pixmap) { +/// std::cout << " [Deleted cached pixmap]"; + delete entry->pixmap; + entry->pixmap = 0; + } +/// std::cout << std::endl; + } + +/// std::cout << "BackgroundManager: Opaque Cached Images:" << std::endl; + for (OpaqueBackgroundsList::Iterator it = m_opaqueBackgroundsList.begin(); it != m_opaqueBackgroundsList.end(); ) { + OpaqueBackgroundEntry *entry = *it; +/// std::cout << "* " << entry->name << "," << entry->color.name() << ": used " << entry->customersCount << " times"; + if (entry->customersCount <= 0) { +/// std::cout << " [Deleted entry]"; + delete entry->pixmap; + entry->pixmap = 0; + it = m_opaqueBackgroundsList.remove(it); + } else + ++it; +/// std::cout << std::endl; + } +} + +#include "backgroundmanager.moc" diff --git a/src/backgroundmanager.h b/src/backgroundmanager.h new file mode 100644 index 0000000..0db7898 --- /dev/null +++ b/src/backgroundmanager.h @@ -0,0 +1,132 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BACKGROUNDMANAGER_H +#define BACKGROUNDMANAGER_H + +#include +#include +#include +#include +#include +#include + +/** A node in the list of background images of BackgroundManager. + * It can only be used by BackgroundManager because it is an internal structure of this manager. + * @author S�astien Laot + */ +class BackgroundEntry +{ + friend class BackgroundManager; + + protected: + BackgroundEntry(const QString &location); + ~BackgroundEntry(); + + QString name; + QString location; + bool tiled; /// << Only valid after some object subscribed to this image! Because it's only read at this time. + QPixmap *pixmap; /// << Only valid (non-null) after some object subscribed to this image! Because it's only read at this time. + QPixmap *preview; /// << Only valid (non-null) after some object requested the preview. + int customersCount; +}; + +/** A node in the list of opaque background images (with a background color applyed to an image) of BackgroundManager. + * It can only be used by BackgroundManager because it is an internal structure of this manager. + * @author S�astien Laot + */ +class OpaqueBackgroundEntry +{ + friend class BackgroundManager; + + protected: + OpaqueBackgroundEntry(const QString &name, const QColor &color); + ~OpaqueBackgroundEntry(); + + QString name; + QColor color; + QPixmap *pixmap; + int customersCount; +}; + +/** Manage the list of background images. + * BASIC FUNCTIONNING OF A BACKGROUND CHOOSER: + * It get all image names with imageNames() to put them in eg. a QComboBox and then, + * when it's time to get the preview of an image it call preview() with the image name to get it. + * Preview are only computed on demand and then cached to fast the next demands (only the pointer will have to be returned). + * Previews are scalled to fit in a rectangle of 100 by 75 pixels, and with a white background color. + * They are also saved to files, so that the scalling/opaquification has not to be done later (they will be directly loaded from file). + * Previews are saved in Global::backgroundsFolder()+"previews/", so that emptying the folder is sufficient to remove them. + * BASIC FUNCTIONNING OF AN IMAGE REQUESTER: + * When eg. a basket is assigned an image name, it register it with subscribe(). + * The full pixmap is then loaded from file and cached (if it was not already loaded) and the "tiled" property is read from the image configuration file. + * If this object want to have the pixmap applyed on a background color (for no transparency => really faster drawing), + * it should register for the couple (imageName,color) with suscribe(): the pixmap will be created in the cache. + * Then, the object can get the subscribed images with pixmap() or opaquePixmap() and know if it's tiled with tiled(). + * When the user removed the object background image (or when the object/basket/... is removed), the object should call unsubscribe() for + * EVERY subscribed image and image couples. Usage count is decreased for those images and a garbage collector will remove the cached images + * if nothing is subscribed to them (to free memory). + * @author S�astien Laot + */ +class BackgroundManager : private QObject +{ + Q_OBJECT + private: + /// LIST OF IMAGES: + typedef QValueList BackgroundsList; + typedef QValueList OpaqueBackgroundsList; + + public: + /// CONTRUCTOR AND DESTRUCTOR: + BackgroundManager(); + ~BackgroundManager(); + /// SUBSCRIPTION TO IMAGES: + bool subscribe(const QString &image); /// << @Return true if the loading is a success. In the counter-case, calling methods below is unsafe with this @p image name. + bool subscribe(const QString &image, const QColor &color); /// << Idem. + void unsubscribe(const QString &image); + void unsubscribe(const QString &image, const QColor &color); + /// GETTING THE IMAGES AND PROPERTIES: + QPixmap* pixmap(const QString &image); + QPixmap* opaquePixmap(const QString &image, const QColor &color); + bool tiled(const QString &image); + /// LIST OF IMAGES AND PREVIEWS: + bool exists(const QString &image); + QStringList imageNames(); + QPixmap* preview(const QString &image); + /// USED FOR EXPORTATION: + QString pathForImageName(const QString &image); /// << It is STRONGLY advised to not use those two methods unless it's to copy (export) the images or something like that... + QString previewPathForImageName(const QString &image); + /// USED FOR IMPORTATION: + void addImage(const QString &fullPath); + + private: + BackgroundEntry* backgroundEntryFor(const QString &image); + OpaqueBackgroundEntry* opaqueBackgroundEntryFor(const QString &image, const QColor &color); + + private: + BackgroundsList m_backgroundsList; + OpaqueBackgroundsList m_opaqueBackgroundsList; + QTimer m_garbageTimer; + private slots: + void requestDelayedGarbage(); + void doGarbage(); +}; + +#endif // BACKGROUNDMANAGER_H diff --git a/src/backup.cpp b/src/backup.cpp new file mode 100644 index 0000000..00bc660 --- /dev/null +++ b/src/backup.cpp @@ -0,0 +1,414 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "backup.h" + +#include "global.h" +#include "variouswidgets.h" +#include "settings.h" +#include "tools.h" +#include "formatimporter.h" // To move a folder + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // usleep() + +/** + * Backups are wrapped in a .tar.gz, inside that folder name. + * An archive is not a backup or is corrupted if data are not in that folder! + */ +const QString backupMagicFolder = "BasKet-Note-Pads_Backup"; + +/** class BackupDialog: */ + +BackupDialog::BackupDialog(QWidget *parent, const char *name) + : KDialogBase(parent, name, /*modal=*/true, i18n("Backup & Restore"), + KDialogBase::Close, KDialogBase::Close, /*separator=*/false) +{ + QVBox *page = makeVBoxMainWidget(); +// page->setSpacing(spacingHint()); + + QString savesFolder = Global::savesFolder(); + savesFolder = savesFolder.left(savesFolder.length() - 1); // savesFolder ends with "/" + + QGroupBox *folderGroup = new QGroupBox(1, Qt::Horizontal, i18n("Save Folder"), page); + new QLabel("" + i18n("Your baskets are currently stored in that folder:
      %1").arg(savesFolder), folderGroup); + QWidget *folderWidget = new QWidget(folderGroup); + QHBoxLayout *folderLayout = new QHBoxLayout(folderWidget, 0, spacingHint()); + QPushButton *moveFolder = new QPushButton(i18n("&Move to Another Folder..."), folderWidget); + QPushButton *useFolder = new QPushButton(i18n("&Use Another Existing Folder..."), folderWidget); + HelpLabel *helpLabel = new HelpLabel(i18n("Why to do that?"), i18n( + "

      You can move the folder where %1 store your baskets to:

        " + "
      • Store your baskets in a visible place in your home folder, like ~/Notes or ~/Baskets, so you can manually backup them when you want.
      • " + "
      • Store your baskets on a server to share them between two computers.
        " + "In this case, mount the shared-folder to the local file system and ask %2 to use that mount point.
        " + "Warning: you should not run %3 at the same time on both computers, or you risk to loss data while the two applications are desynced.
      • " + "

      Please remember that you should not change the content of that folder manually (eg. adding a file in a basket folder will not add that file to the basket).

      ") + .arg(kapp->aboutData()->programName()) + .arg(kapp->aboutData()->programName()) + .arg(kapp->aboutData()->programName()), + folderWidget); + folderLayout->addWidget(moveFolder); + folderLayout->addWidget(useFolder); + folderLayout->addWidget(helpLabel); + folderLayout->addStretch(); + connect( moveFolder, SIGNAL(clicked()), this, SLOT(moveToAnotherFolder()) ); + connect( useFolder, SIGNAL(clicked()), this, SLOT(useAnotherExistingFolder()) ); + + QGroupBox *backupGroup = new QGroupBox(1, Qt::Horizontal, i18n("Backups"), page); + QWidget *backupWidget = new QWidget(backupGroup); + QHBoxLayout *backupLayout = new QHBoxLayout(backupWidget, 0, spacingHint()); + QPushButton *backupButton = new QPushButton(i18n("&Backup..."), backupWidget); + QPushButton *restoreButton = new QPushButton(i18n("&Restore a Backup..."), backupWidget); + m_lastBackup = new QLabel("", backupWidget); + backupLayout->addWidget(backupButton); + backupLayout->addWidget(restoreButton); + backupLayout->addWidget(m_lastBackup); + backupLayout->addStretch(); + connect( backupButton, SIGNAL(clicked()), this, SLOT(backup()) ); + connect( restoreButton, SIGNAL(clicked()), this, SLOT(restore()) ); + + populateLastBackup(); + + (new QWidget(page))->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); +} + +BackupDialog::~BackupDialog() +{ +} + +void BackupDialog::populateLastBackup() +{ + QString lastBackupText = i18n("Last backup: never"); + if (Settings::lastBackup().isValid()) + lastBackupText = i18n("Last backup: %1").arg(Settings::lastBackup().toString(Qt::LocalDate)); + + m_lastBackup->setText(lastBackupText); +} + +void BackupDialog::moveToAnotherFolder() +{ + KURL selectedURL = KDirSelectDialog::selectDirectory( + /*startDir=*/Global::savesFolder(), /*localOnly=*/true, /*parent=*/0, + /*caption=*/i18n("Choose a Folder Where to Move Baskets")); + + if (!selectedURL.isEmpty()) { + QString folder = selectedURL.path(); + QDir dir(folder); + // The folder should not exists, or be empty (because KDirSelectDialog will likely create it anyway): + if (dir.exists()) { + // Get the content of the folder: + QStringList content = dir.entryList(); + if (content.count() > 2) { // "." and ".." + int result = KMessageBox::questionYesNo( + 0, + "" + i18n("The folder %1 is not empty. Do you want to override it?").arg(folder), + i18n("Override Folder?"), + KGuiItem(i18n("&Override"), "filesave") + ); + if (result == KMessageBox::No) + return; + } + Tools::deleteRecursively(folder); + } + FormatImporter copier; + copier.moveFolder(Global::savesFolder(), folder); + Backup::setFolderAndRestart(folder, i18n("Your baskets have been successfuly moved to %1. %2 is going to be restarted to take this change into account.")); + } +} + +void BackupDialog::useAnotherExistingFolder() +{ + KURL selectedURL = KDirSelectDialog::selectDirectory( + /*startDir=*/Global::savesFolder(), /*localOnly=*/true, /*parent=*/0, + /*caption=*/i18n("Choose an Existing Folder to Store Baskets")); + + if (!selectedURL.isEmpty()) { + Backup::setFolderAndRestart(selectedURL.path(), i18n("Your basket save folder has been successfuly changed to %1. %2 is going to be restarted to take this change into account.")); + } +} + +void BackupDialog::backup() +{ + QDir dir; + + // Compute a default file name & path (eg. "Baskets_2007-01-31.tar.gz"): + KConfig *config = KGlobal::config(); + config->setGroup("Backups"); + QString folder = config->readEntry("lastFolder", QDir::homeDirPath()) + "/"; + QString fileName = i18n("Backup filename (without extension), %1 is the date", "Baskets_%1") + .arg(QDate::currentDate().toString(Qt::ISODate)); + QString url = folder + fileName; + + // Ask a file name & path to the user: + QString filter = "*.tar.gz|" + i18n("Tar Archives Compressed by Gzip") + "\n*|" + i18n("All Files"); + QString destination = url; + for (bool askAgain = true; askAgain; ) { + // Ask: + destination = KFileDialog::getSaveFileName(destination, filter, 0, i18n("Backup Baskets")); + // User canceled? + if (destination.isEmpty()) + return; + // File already existing? Ask for overriding: + if (dir.exists(destination)) { + int result = KMessageBox::questionYesNoCancel( + 0, + "" + i18n("The file %1 already exists. Do you really want to override it?") + .arg(KURL(destination).fileName()), + i18n("Override File?"), + KGuiItem(i18n("&Override"), "filesave") + ); + if (result == KMessageBox::Cancel) + return; + else if (result == KMessageBox::Yes) + askAgain = false; + } else + askAgain = false; + } + + KProgressDialog dialog(0, 0, i18n("Backup Baskets"), i18n("Backing up baskets. Please wait..."), /*modal=*/true); + dialog.setAllowCancel(false); + dialog.setAutoClose(true); + dialog.show(); + KProgress *progress = dialog.progressBar(); + progress->setTotalSteps(0/*Busy/Undefined*/); + progress->setProgress(0); + progress->setPercentageVisible(false); + + BackupThread thread(destination, Global::savesFolder()); + thread.start(); + while (thread.running()) { + progress->advance(1); // Or else, the animation is not played! + kapp->processEvents(); + usleep(300); // Not too long because if the backup process is finished, we wait for nothing + } + + Settings::setLastBackup(QDate::currentDate()); + Settings::saveConfig(); + populateLastBackup(); +} + +void BackupDialog::restore() +{ + // Get last backup folder: + KConfig *config = KGlobal::config(); + config->setGroup("Backups"); + QString folder = config->readEntry("lastFolder", QDir::homeDirPath()) + "/"; + + // Ask a file name to the user: + QString filter = "*.tar.gz|" + i18n("Tar Archives Compressed by Gzip") + "\n*|" + i18n("All Files"); + QString path = KFileDialog::getOpenFileName(folder, filter, this, i18n("Open Basket Archive")); + if (path.isEmpty()) // User has canceled + return; + + // Before replacing the basket data folder with the backup content, we safely backup the current baskets to the home folder. + // So if the backup is corrupted or something goes wrong while restoring (power cut...) the user will be able to restore the old working data: + QString safetyPath = Backup::newSafetyFolder(); + FormatImporter copier; + copier.moveFolder(Global::savesFolder(), safetyPath); + + // Add the README file for user to cancel a bad restoration: + QString readmePath = safetyPath + i18n("README.txt"); + QFile file(readmePath); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream << i18n("This is a safety copy of your baskets like they were before you started to restore the backup %1.").arg(KURL(path).fileName()) + "\n\n" + << i18n("If the restoration was a success and you restored what you wanted to restore, you can remove this folder.") + "\n\n" + << i18n("If something went wrong during the restoration process, you can re-use this folder to store your baskets and nothing will be lost.") + "\n\n" + << i18n("Choose \"Basket\" -> \"Backup & Restore...\" -> \"Use Another Existing Folder...\" and select that folder.") + "\n"; + file.close(); + } + + QString message = + "

      " + i18n("Restoring %1. Please wait...").arg(KURL(path).fileName()) + "

      " + + i18n("If something goes wrong during the restoration process, read the file %1.").arg(readmePath); + + KProgressDialog *dialog = new KProgressDialog(0, 0, i18n("Restore Baskets"), message, /*modal=*/true); + dialog->setAllowCancel(false); + dialog->setAutoClose(true); + dialog->show(); + KProgress *progress = dialog->progressBar(); + progress->setTotalSteps(0/*Busy/Undefined*/); + progress->setProgress(0); + progress->setPercentageVisible(false); + + // Uncompress: + RestoreThread thread(path, Global::savesFolder()); + thread.start(); + while (thread.running()) { + progress->advance(1); // Or else, the animation is not played! + kapp->processEvents(); + usleep(300); // Not too long because if the restore process is finished, we wait for nothing + } + + dialog->hide(); // The restore is finished, do not continue to show it while telling the user the application is going to be restarted + delete dialog; // If we only hidden it, it reappeared just after having restored a small backup... Very strange. + dialog = 0; // This was annoying since it is modal and the "BasKet Note Pads is going to be restarted" message was not reachable. + //kapp->processEvents(); + + // Check for errors: + if (!thread.success()) { + // Restore the old baskets: + QDir dir; + dir.remove(readmePath); + copier.moveFolder(safetyPath, Global::savesFolder()); + // Tell the user: + KMessageBox::error(0, i18n("This archive is either not a backup of baskets or is corrupted. It cannot be imported. Your old baskets have been preserved instead."), i18n("Restore Error")); + return; + } + + // Note: The safety backup is not removed now because the code can has been wrong, somehow, or the user perhapse restored an older backup by error... + // The restore process will not be called very often (it is possible it will only be called once or twice arround the world during the next years). + // So it is rare enough to force the user to remove the safety folder, but keep him in control and let him safely recover from restoration errors. + + Backup::setFolderAndRestart(Global::savesFolder()/*No change*/, i18n("Your backup has been successfuly restored to %1. %2 is going to be restarted to take this change into account.")); +} + +/** class Backup: */ + +QString Backup::binaryPath = ""; + +#include + +void Backup::figureOutBinaryPath(const char *argv0, QApplication &app) +{ + /* + The application can be launched by two ways: + - Globaly (app.applicationFilePath() is good) + - In KDevelop or with an absolute path (app.applicationFilePath() is wrong) + This function is called at the very start of main() so that the current directory has not been changed yet. + + Command line (argv[0]) QDir(argv[0]).canonicalPath() app.applicationFilePath() + ====================== ============================================= ========================= + "basket" "" "/opt/kde3/bin/basket" + "./src/.libs/basket" "/home/seb/prog/basket/debug/src/.lib/basket" "/opt/kde3/bin/basket" + */ + + binaryPath = QDir(argv0).canonicalPath(); + if (binaryPath.isEmpty()) + binaryPath = app.applicationFilePath(); +} + +void Backup::setFolderAndRestart(const QString &folder, const QString &message) +{ + // Set the folder: + Settings::setDataFolder(folder); + Settings::saveConfig(); + + // Rassure the user that the application main window disapearition is not a crash, but a normal restart. + // This is important for users to trust the application in such a critical phase and understands what's happening: + KMessageBox::information( + 0, + "" + message.arg( + (folder.endsWith("/") ? folder.left(folder.length() - 1) : folder), + kapp->aboutData()->programName()), + i18n("Restart") + ); + + // Restart the application: + KRun::runCommand(binaryPath, kapp->aboutData()->programName(), kapp->iconName()); + exit(0); +} + +QString Backup::newSafetyFolder() +{ + QDir dir; + QString fullPath; + + fullPath = QDir::homeDirPath() + "/" + i18n("Safety folder name before restoring a basket data archive", "Baskets Before Restoration") + "/"; + if (!dir.exists(fullPath)) + return fullPath; + + for (int i = 2; ; ++i) { + fullPath = QDir::homeDirPath() + "/" + i18n("Safety folder name before restoring a basket data archive", "Baskets Before Restoration (%1)").arg(i) + "/"; + if (!dir.exists(fullPath)) + return fullPath; + } + + return ""; +} + +/** class BackupThread: */ + +BackupThread::BackupThread(const QString &tarFile, const QString &folderToBackup) + : m_tarFile(tarFile), m_folderToBackup(folderToBackup) +{ +} + +void BackupThread::run() +{ + KTar tar(m_tarFile, "application/x-gzip"); + tar.open(IO_WriteOnly); + tar.addLocalDirectory(m_folderToBackup, backupMagicFolder); + // KArchive does not add hidden files. Basket description files (".basket") are hidden, we add them manually: + QDir dir(m_folderToBackup + "baskets/"); + QStringList baskets = dir.entryList(QDir::Dirs); + for (QStringList::Iterator it = baskets.begin(); it != baskets.end(); ++it) { + tar.addLocalFile( + m_folderToBackup + "baskets/" + *it + "/.basket", + backupMagicFolder + "/baskets/" + *it + "/.basket" + ); + } + // We finished: + tar.close(); +} + +/** class RestoreThread: */ + +RestoreThread::RestoreThread(const QString &tarFile, const QString &destFolder) + : m_tarFile(tarFile), m_destFolder(destFolder) +{ +} + +void RestoreThread::run() +{ + m_success = false; + KTar tar(m_tarFile, "application/x-gzip"); + tar.open(IO_ReadOnly); + if (tar.isOpened()) { + const KArchiveDirectory *directory = tar.directory(); + if (directory->entries().contains(backupMagicFolder)) { + const KArchiveEntry *entry = directory->entry(backupMagicFolder); + if (entry->isDirectory()) { + ((const KArchiveDirectory*) entry)->copyTo(m_destFolder); + m_success = true; + } + } + tar.close(); + } +} + +#include "backup.moc" diff --git a/src/backup.h b/src/backup.h new file mode 100644 index 0000000..092aba9 --- /dev/null +++ b/src/backup.h @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BACKUP_H +#define BACKUP_H + +#include +#include +#include + +/** + * @author Sébastien Laoût + */ +class BackupDialog : public KDialogBase +{ + Q_OBJECT + public: + BackupDialog(QWidget *parent = 0, const char *name = 0); + ~BackupDialog(); + private slots: + void moveToAnotherFolder(); + void useAnotherExistingFolder(); + void backup(); + void restore(); + void populateLastBackup(); + private: + QLabel *m_lastBackup; +}; + +/** + * @author Sébastien Laoût + */ +class Backup +{ + public: + static void figureOutBinaryPath(const char *argv0, QApplication &app); + static void setFolderAndRestart(const QString &folder, const QString &message); + static QString newSafetyFolder(); + + private: + static QString binaryPath; +}; + +class BackupThread : public QThread +{ + public: + BackupThread(const QString &tarFile, const QString &folderToBackup); + protected: + virtual void run(); + private: + QString m_tarFile; + QString m_folderToBackup; +}; + +class RestoreThread : public QThread +{ + public: + RestoreThread(const QString &tarFile, const QString &destFolder); + inline bool success() { return m_success; } + protected: + virtual void run(); + private: + QString m_tarFile; + QString m_destFolder; + bool m_success; +}; + +#endif // BACKUP_H diff --git a/src/basket.cpp b/src/basket.cpp new file mode 100644 index 0000000..95a3614 --- /dev/null +++ b/src/basket.cpp @@ -0,0 +1,5734 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // For sleep() + +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include // rand() function +#include // seed for rand() + +#include "basket.h" +#include "note.h" +#include "notedrag.h" +#include "notefactory.h" +#include "noteedit.h" +#include "tagsedit.h" +#include "xmlwork.h" +#include "global.h" +#include "backgroundmanager.h" +#include "settings.h" +#include "tools.h" +#include "debugwindow.h" +#include "exporterdialog.h" +#include "config.h" +#include "popupmenu.h" +#ifdef HAVE_LIBGPGME +#include "kgpgme.h" +#endif + +#include + +/** Class NoteSelection: */ + +NoteSelection* NoteSelection::nextStacked() +{ + // First, search in the childs: + if (firstChild) + if (firstChild->note && firstChild->note->content()) + return firstChild; + else + return firstChild->nextStacked(); + + // Then, in the next: + if (next) + if (next->note && next->note->content()) + return next; + else + return next->nextStacked(); + + // And finally, in the parent: + NoteSelection *node = parent; + while (node) + if (node->next) + if (node->next->note && node->next->note->content()) + return node->next; + else + return node->next->nextStacked(); + else + node = node->parent; + + // Not found: + return 0; +} + +NoteSelection* NoteSelection::firstStacked() +{ + if (!this) + return 0; + + if (note && note->content()) + return this; + else + return nextStacked(); +} + +void NoteSelection::append(NoteSelection *node) +{ + if (!this || !node) + return; + + if (firstChild) { + NoteSelection *last = firstChild; + while (last->next) + last = last->next; + last->next = node; + } else + firstChild = node; + + while (node) { + node->parent = this; + node = node->next; + } +} + +int NoteSelection::count() +{ + if (!this) + return 0; + + int count = 0; + + for (NoteSelection *node = this; node; node = node->next) + if (node->note && node->note->content()) + ++count; + else + count += node->firstChild->count(); + + return count; +} + +QValueList NoteSelection::parentGroups() +{ + QValueList groups; + + // For each note: + for (NoteSelection *node = firstStacked(); node; node = node->nextStacked()) + // For each parent groups of the note: + for (Note *note = node->note->parentNote(); note; note = note->parentNote()) + // Add it (if it was not already in the list): + if (!note->isColumn() && !groups.contains(note)) + groups.append(note); + + return groups; +} + +/** Class DecoratedBasket: */ + +DecoratedBasket::DecoratedBasket(QWidget *parent, const QString &folderName, const char *name, WFlags fl) + : QWidget(parent, name, fl) +{ + m_layout = new QVBoxLayout(this); + m_filter = new FilterBar(this); + m_basket = new Basket(this, folderName); + m_layout->addWidget(m_basket); + setFilterBarPosition(Settings::filterOnTop()); + + m_filter->setShown(true); + m_basket->setFocus(); // To avoid the filter bar have focus on load + + connect( m_filter, SIGNAL(newFilter(const FilterData&)), m_basket, SLOT(newFilter(const FilterData&)) ); + connect( m_filter, SIGNAL(escapePressed()), m_basket, SLOT(cancelFilter()) ); + connect( m_filter, SIGNAL(returnPressed()), m_basket, SLOT(validateFilter()) ); + + connect( m_basket, SIGNAL(postMessage(const QString&)), Global::bnpView, SLOT(postStatusbarMessage(const QString&)) ); + connect( m_basket, SIGNAL(setStatusBarText(const QString&)), Global::bnpView, SLOT(setStatusBarHint(const QString&)) ); + connect( m_basket, SIGNAL(resetStatusBarText()), Global::bnpView, SLOT(updateStatusBarHint()) ); +} + +DecoratedBasket::~DecoratedBasket() +{ +} + +void DecoratedBasket::setFilterBarPosition(bool onTop) +{ + m_layout->remove(m_filter); + if (onTop) { + m_layout->insertWidget(0, m_filter); + setTabOrder(this/*(QWidget*)parent()*/, m_filter); + setTabOrder(m_filter, m_basket); + setTabOrder(m_basket, (QWidget*)parent()); + } else { + m_layout->addWidget(m_filter); + setTabOrder(this/*(QWidget*)parent()*/, m_basket); + setTabOrder(m_basket, m_filter); + setTabOrder(m_filter, (QWidget*)parent()); + } +} + +void DecoratedBasket::setFilterBarShown(bool show, bool switchFocus) +{ +// m_basket->setShowFilterBar(true);//show); +// m_basket->save(); + // In this order (m_basket and then m_filter) because setShown(false) + // will call resetFilter() that will update actions, and then check the + // Ctrl+F action whereas it should be unchecked + // FIXME: It's very uggly all those things + m_filter->setShown(true);//show); + if (show) { + if (switchFocus) + m_filter->setEditFocus(); + } else if (m_filter->hasEditFocus()) + m_basket->setFocus(); +} + +void DecoratedBasket::resetFilter() +{ + m_filter->reset(); +} + +/** Class TransparentWidget */ + +TransparentWidget::TransparentWidget(Basket *basket) + : QWidget(basket->viewport(), "", Qt::WNoAutoErase), m_basket(basket) +{ + setFocusPolicy(QWidget::NoFocus); + setWFlags(Qt::WNoAutoErase); + setMouseTracking(true); // To receive mouseMoveEvents + + basket->viewport()->installEventFilter(this); +} + +/*void TransparentWidget::reparent(QWidget *parent, WFlags f, const QPoint &p, bool showIt) +{ + QWidget::reparent(parent, Qt::WNoAutoErase, p, showIt); +}*/ + +void TransparentWidget::setPosition(int x, int y) +{ + m_x = x; + m_y = y; +} + +void TransparentWidget::paintEvent(QPaintEvent*event) +{ + QWidget::paintEvent(event); + QPainter painter(this); + +// painter.save(); + + painter.translate(-m_x, -m_y); + m_basket->drawContents(&painter, m_x, m_y, width(), height()); + +// painter.restore(); +// painter.setPen(Qt::blue); +// painter.drawRect(0, 0, width(), height()); +} + +void TransparentWidget::mouseMoveEvent(QMouseEvent *event) +{ + QMouseEvent *translated = new QMouseEvent(QEvent::MouseMove, event->pos() + QPoint(m_x, m_y), event->button(), event->state()); + m_basket->contentsMouseMoveEvent(translated); + delete translated; +} + +bool TransparentWidget::eventFilter(QObject */*object*/, QEvent *event) +{ + // If the parent basket viewport has changed, we should change too: + if (event->type() == QEvent::Paint) + update(); + + return false; // Event not consumed, in every cases (because it's only a notification)! +} + +/** Class Basket: */ + +const int Basket::FRAME_DELAY = 50/*1500*/; // Delay between two animation "frames" in milliseconds + +/* + * Convenient function (defined in note.cpp !): + */ +void drawGradient( QPainter *p, const QColor &colorTop, const QColor & colorBottom, + int x, int y, int w, int h, + bool sunken, bool horz, bool flat ); + +/* + * Defined in note.cpp: + */ +extern void substractRectOnAreas(const QRect &rectToSubstract, QValueList &areas, bool andRemove = true); + +void debugZone(int zone) +{ + QString s; + switch (zone) { + case Note::Handle: s = "Handle"; break; + case Note::Group: s = "Group"; break; + case Note::TagsArrow: s = "TagsArrow"; break; + case Note::Custom0: s = "Custom0"; break; + case Note::GroupExpander: s = "GroupExpander"; break; + case Note::Content: s = "Content"; break; + case Note::Link: s = "Link"; break; + case Note::TopInsert: s = "TopInsert"; break; + case Note::TopGroup: s = "TopGroup"; break; + case Note::BottomInsert: s = "BottomInsert"; break; + case Note::BottomGroup: s = "BottomGroup"; break; + case Note::BottomColumn: s = "BottomColumn"; break; + case Note::None: s = "None"; break; + default: + if (zone == Note::Emblem0) + s = "Emblem0"; + else + s = "Emblem0+" + QString::number(zone - Note::Emblem0); + break; + } + std::cout << s << std::endl; +} + +#define FOR_EACH_NOTE(noteVar) \ + for (Note *noteVar = firstNote(); noteVar; noteVar = noteVar->next()) + +void Basket::prependNoteIn(Note *note, Note *in) +{ + if (!note) + // No note to prepend: + return; + + if (in) { + // The normal case: + preparePlug(note); + + Note *last = note->lastSibling(); + + for (Note *n = note; n; n = n->next()) + n->setParentNote(in); +// note->setPrev(0L); + last->setNext(in->firstChild()); + + if (in->firstChild()) + in->firstChild()->setPrev(last); + + in->setFirstChild(note); + + if (m_loaded) + signalCountsChanged(); + } else + // Prepend it directly in the basket: + appendNoteBefore(note, firstNote()); +} + +void Basket::appendNoteIn(Note *note, Note *in) +{ + if (!note) + // No note to append: + return; + + if (in) { + // The normal case: + preparePlug(note); + +// Note *last = note->lastSibling(); + Note *lastChild = in->lastChild(); + + for (Note *n = note; n; n = n->next()) + n->setParentNote(in); + note->setPrev(lastChild); +// last->setNext(0L); + + if (!in->firstChild()) + in->setFirstChild(note); + + if (lastChild) + lastChild->setNext(note); + + if (m_loaded) + signalCountsChanged(); + } else + // Prepend it directly in the basket: + appendNoteAfter(note, lastNote()); +} + +void Basket::appendNoteAfter(Note *note, Note *after) +{ + if (!note) + // No note to append: + return; + + if (!after) + // By default, insert after the last note: + after = lastNote(); + + if (m_loaded && after && !after->isFree() && !after->isColumn()) + for (Note *n = note; n; n = n->next()) + n->inheritTagsOf(after); + +// if (!alreadyInBasket) + preparePlug(note); + + Note *last = note->lastSibling(); + if (after) { + // The normal case: + for (Note *n = note; n; n = n->next()) + n->setParentNote(after->parentNote()); + note->setPrev(after); + last->setNext(after->next()); + after->setNext(note); + if (last->next()) + last->next()->setPrev(last); + } else { + // There is no note in the basket: + for (Note *n = note; n; n = n->next()) + n->setParentNote(0); + m_firstNote = note; +// note->setPrev(0); +// last->setNext(0); + } + +// if (!alreadyInBasket) + if (m_loaded) + signalCountsChanged(); +} + +void Basket::appendNoteBefore(Note *note, Note *before) +{ + if (!note) + // No note to append: + return; + + if (!before) + // By default, insert before the first note: + before = firstNote(); + + if (m_loaded && before && !before->isFree() && !before->isColumn()) + for (Note *n = note; n; n = n->next()) + n->inheritTagsOf(before); + + preparePlug(note); + + Note *last = note->lastSibling(); + if (before) { + // The normal case: + for (Note *n = note; n; n = n->next()) + n->setParentNote(before->parentNote()); + note->setPrev(before->prev()); + last->setNext(before); + before->setPrev(last); + if (note->prev()) + note->prev()->setNext(note); + else { + if (note->parentNote()) + note->parentNote()->setFirstChild(note); + else + m_firstNote = note; + } + } else { + // There is no note in the basket: + for (Note *n = note; n; n = n->next()) + n->setParentNote(0); + m_firstNote = note; +// note->setPrev(0); +// last->setNext(0); + } + + if (m_loaded) + signalCountsChanged(); +} + +DecoratedBasket* Basket::decoration() +{ + return (DecoratedBasket*)parent(); +} + +void Basket::preparePlug(Note *note) +{ + // Select only the new notes, compute the new notes count and the new number of found notes: + if (m_loaded) + unselectAll(); + int count = 0; + int founds = 0; + Note *last = 0; + for (Note *n = note; n; n = n->next()) { + if (m_loaded) + n->setSelectedRecursivly(true); // Notes should have a parent basket (and they have, so that's OK). + count += n->count(); + founds += n->newFilter(decoration()->filterData()); + last = n; + } + m_count += count; + m_countFounds += founds; + + // Focus the last inserted note: + if (m_loaded && last) { + setFocusedNote(last); + m_startOfShiftSelectionNote = (last->isGroup() ? last->lastRealChild() : last); + } + + // If some notes don't match (are hidden), tell it to the user: + if (m_loaded && founds < count) { + if (count == 1) postMessage( i18n("The new note does not match the filter and is hidden.") ); + else if (founds == count - 1) postMessage( i18n("A new note does not match the filter and is hidden.") ); + else if (founds > 0) postMessage( i18n("Some new notes do not match the filter and are hidden.") ); + else postMessage( i18n("The new notes do not match the filter and are hidden.") ); + } +} + +void Basket::unplugNote(Note *note) +{ + // If there is nothing to do... + if (!note) + return; + +// if (!willBeReplugged) { + note->setSelectedRecursivly(false); // To removeSelectedNote() and decrease the selectedsCount. + m_count -= note->count(); + m_countFounds -= note->newFilter(decoration()->filterData()); + signalCountsChanged(); +// } + + // If it was the first note, change the first note: + if (m_firstNote == note) + m_firstNote = note->next(); + + // Change previous and next notes: + if (note->prev()) + note->prev()->setNext(note->next()); + if (note->next()) + note->next()->setPrev(note->prev()); + + if (note->parentNote()) { + // If it was the first note of a group, change the first note of the group: + if (note->parentNote()->firstChild() == note) + note->parentNote()->setFirstChild( note->next() ); + + if (!note->parentNote()->isColumn()) { + // Ungroup if still 0 note inside parent group: + if ( ! note->parentNote()->firstChild() ) + unplugNote(note->parentNote()); // TODO delete + + // Ungroup if still 1 note inside parent group: + else if ( ! note->parentNote()->firstChild()->next() ) + ungroupNote(note->parentNote()); + } + } + + note->setParentNote(0); + note->setPrev(0); + note->setNext(0); + +// recomputeBlankRects(); // FIXME: called too much time. It's here because when dragging and moving a note to another basket and then go back to the original basket, the note is deleted but the note rect is not painter anymore. +} + +void Basket::ungroupNote(Note *group) +{ + Note *note = group->firstChild(); + Note *lastGroupedNote = group; + Note *nextNote; + + // Move all notes after the group (not before, to avoid to change m_firstNote or group->m_firstChild): + while (note) { + nextNote = note->next(); + + if (lastGroupedNote->next()) + lastGroupedNote->next()->setPrev(note); + note->setNext(lastGroupedNote->next()); + lastGroupedNote->setNext(note); + note->setParentNote(group->parentNote()); + note->setPrev(lastGroupedNote); + + note->setGroupWidth(group->groupWidth() - Note::GROUP_WIDTH); + lastGroupedNote = note; + note = nextNote; + } + + // Unplug the group: + group->setFirstChild(0); + unplugNote(group); // TODO: delete + + relayoutNotes(true); +} + +void Basket::groupNoteBefore(Note *note, Note *with) +{ + if (!note || !with) + // No note to group or nowhere to group it: + return; + +// if (m_loaded && before && !with->isFree() && !with->isColumn()) + for (Note *n = note; n; n = n->next()) + n->inheritTagsOf(with); + + preparePlug(note); + + Note *last = note->lastSibling(); + + Note *group = new Note(this); + group->setPrev(with->prev()); + group->setNext(with->next()); + group->setX(with->x()); + group->setY(with->y()); + if (with->parentNote() && with->parentNote()->firstChild() == with) + with->parentNote()->setFirstChild(group); + else if (m_firstNote == with) + m_firstNote = group; + group->setParentNote(with->parentNote()); + group->setFirstChild(note); + group->setGroupWidth(with->groupWidth() + Note::GROUP_WIDTH); + + if (with->prev()) + with->prev()->setNext(group); + if (with->next()) + with->next()->setPrev(group); + with->setParentNote(group); + with->setPrev(last); + with->setNext(0L); + + for (Note *n = note; n; n = n->next()) + n->setParentNote(group); +// note->setPrev(0L); + last->setNext(with); + + if (m_loaded) + signalCountsChanged(); +} + +void Basket::groupNoteAfter(Note *note, Note *with) +{ + if (!note || !with) + // No note to group or nowhere to group it: + return; + +// if (m_loaded && before && !with->isFree() && !with->isColumn()) + for (Note *n = note; n; n = n->next()) + n->inheritTagsOf(with); + + preparePlug(note); + +// Note *last = note->lastSibling(); + + Note *group = new Note(this); + group->setPrev(with->prev()); + group->setNext(with->next()); + group->setX(with->x()); + group->setY(with->y()); + if (with->parentNote() && with->parentNote()->firstChild() == with) + with->parentNote()->setFirstChild(group); + else if (m_firstNote == with) + m_firstNote = group; + group->setParentNote(with->parentNote()); + group->setFirstChild(with); + group->setGroupWidth(with->groupWidth() + Note::GROUP_WIDTH); + + if (with->prev()) + with->prev()->setNext(group); + if (with->next()) + with->next()->setPrev(group); + with->setParentNote(group); + with->setPrev(0L); + with->setNext(note); + + for (Note *n = note; n; n = n->next()) + n->setParentNote(group); + note->setPrev(with); +// last->setNext(0L); + + if (m_loaded) + signalCountsChanged(); +} + +void Basket::loadNotes(const QDomElement ¬es, Note *parent) +{ + Note *note; + for (QDomNode n = notes.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + if (e.isNull()) // Cannot handle that! + continue; + note = 0; + // Load a Group: + if (e.tagName() == "group") { + note = new Note(this); // 1. Create the group... + loadNotes(e, note); // 3. ... And populate it with child notes. + int noteCount = note->count(); + if (noteCount > 0 || (parent == 0 && !isFreeLayout())) { // But don't remove columns! + appendNoteIn(note, parent); // 2. ... Insert it... FIXME: Initially, the if() the insrtion was the step 2. Was it on purpose? + // The notes in the group are counted two times (it's why appendNoteIn() was called before loadNotes): + m_count -= noteCount;// TODO: Recompute note count every time noteCount() is emitted! + m_countFounds -= noteCount; + } + } + // Load a Content-Based Note: + if (e.tagName() == "note" || e.tagName() == "item") { // Keep compatible with 0.6.0 Alpha 1 + note = new Note(this); // Create the note... + NoteFactory__loadNode(XMLWork::getElement(e, "content"), e.attribute("type"), note, /*lazyLoad=*/m_finishLoadOnFirstShow); // ... Populate it with content... + if (e.attribute("type") == "text") + m_shouldConvertPlainTextNotes = true; // Convert Pre-0.6.0 baskets: plain text notes should be converted to rich text ones once all is loaded! + appendNoteIn(note, parent); // ... And insert it. + // Load dates: + if (e.hasAttribute("added")) + note->setAddedDate( QDateTime::fromString(e.attribute("added"), Qt::ISODate)); + if (e.hasAttribute("lastModification")) + note->setLastModificationDate(QDateTime::fromString(e.attribute("lastModification"), Qt::ISODate)); + } + // If we successfully loaded a note: + if (note) { + // Free Note Properties: + if (note->isFree()) { + int x = e.attribute("x").toInt(); + int y = e.attribute("y").toInt(); + note->setX(x < 0 ? 0 : x); + note->setY(y < 0 ? 0 : y); + } + // Resizeable Note Properties: + if (note->hasResizer() || note->isColumn()) + note->setGroupWidth(e.attribute("width", "200").toInt()); + // Group Properties: + if (note->isGroup() && !note->isColumn() && XMLWork::trueOrFalse(e.attribute("folded", "false"))) + note->toggleFolded(false); + // Tags: + if (note->content()) { + QString tagsString = XMLWork::getElementText(e, "tags", ""); + QStringList tagsId = QStringList::split(";", tagsString); + for (QStringList::iterator it = tagsId.begin(); it != tagsId.end(); ++it) { + State *state = Tag::stateForId(*it); + if (state) + note->addState(state, /*orReplace=*/true); + } + } + } +// kapp->processEvents(); + } +} + +void Basket::saveNotes(QDomDocument &document, QDomElement &element, Note *parent) +{ + Note *note = (parent ? parent->firstChild() : firstNote()); + while (note) { + // Create Element: + QDomElement noteElement = document.createElement(note->isGroup() ? "group" : "note"); + element.appendChild(noteElement); + // Free Note Properties: + if (note->isFree()) { + noteElement.setAttribute("x", note->finalX()); + noteElement.setAttribute("y", note->finalY()); + } + // Resizeable Note Properties: + if (note->hasResizer()) + noteElement.setAttribute("width", note->groupWidth()); + // Group Properties: + if (note->isGroup() && !note->isColumn()) + noteElement.setAttribute("folded", XMLWork::trueOrFalse(note->isFolded())); + // Save Content: + if (note->content()) { + // Save Dates: + noteElement.setAttribute("added", note->addedDate().toString(Qt::ISODate) ); + noteElement.setAttribute("lastModification", note->lastModificationDate().toString(Qt::ISODate)); + // Save Content: + noteElement.setAttribute("type", note->content()->lowerTypeName()); + QDomElement content = document.createElement("content"); + noteElement.appendChild(content); + note->content()->saveToNode(document, content); + // Save Tags: + if (note->states().count() > 0) { + QString tags; + for (State::List::iterator it = note->states().begin(); it != note->states().end(); ++it) + tags += (tags.isEmpty() ? "" : ";") + (*it)->id(); + XMLWork::addElement(document, noteElement, "tags", tags); + } + } else + // Save Child Notes: + saveNotes(document, noteElement, note); + // Go to the Next One: + note = note->next(); + } +} + +void Basket::loadProperties(const QDomElement &properties) +{ + // Compute Default Values for When Loading the Properties: + QString defaultBackgroundColor = (backgroundColorSetting().isValid() ? backgroundColorSetting().name() : ""); + QString defaultTextColor = (textColorSetting().isValid() ? textColorSetting().name() : ""); + + // Load the Properties: + QString icon = XMLWork::getElementText(properties, "icon", this->icon() ); + QString name = XMLWork::getElementText(properties, "name", basketName() ); + + QDomElement appearance = XMLWork::getElement(properties, "appearance"); + // In 0.6.0-Alpha versions, there was a typo error: "backround" instead of "background" + QString backgroundImage = appearance.attribute( "backgroundImage", appearance.attribute( "backroundImage", backgroundImageName() ) ); + QString backgroundColorString = appearance.attribute( "backgroundColor", appearance.attribute( "backroundColor", defaultBackgroundColor ) ); + QString textColorString = appearance.attribute( "textColor", defaultTextColor ); + QColor backgroundColor = (backgroundColorString.isEmpty() ? QColor() : QColor(backgroundColorString)); + QColor textColor = (textColorString.isEmpty() ? QColor() : QColor(textColorString) ); + + QDomElement disposition = XMLWork::getElement(properties, "disposition"); + bool free = XMLWork::trueOrFalse( disposition.attribute( "free", XMLWork::trueOrFalse(isFreeLayout()) ) ); + int columnCount = disposition.attribute( "columnCount", QString::number(this->columnsCount()) ).toInt(); + bool mindMap = XMLWork::trueOrFalse( disposition.attribute( "mindMap", XMLWork::trueOrFalse(isMindMap()) ) ); + + QDomElement shortcut = XMLWork::getElement(properties, "shortcut"); + QString actionStrings[] = { "show", "globalShow", "globalSwitch" }; + KShortcut combination = KShortcut( shortcut.attribute( "combination", m_action->shortcut().toStringInternal() ) ); + QString actionString = shortcut.attribute( "action" ); + int action = shortcutAction(); + if (actionString == actionStrings[0]) action = 0; + if (actionString == actionStrings[1]) action = 1; + if (actionString == actionStrings[2]) action = 2; + + QDomElement protection = XMLWork::getElement(properties, "protection"); + m_encryptionType = protection.attribute( "type" ).toInt(); + m_encryptionKey = protection.attribute( "key" ); + + // Apply the Properties: + setDisposition((free ? (mindMap ? 2 : 1) : 0), columnCount); + setShortcut(combination, action); + setAppearance(icon, name, backgroundImage, backgroundColor, textColor); // Will emit propertiesChanged(this) +} + +void Basket::saveProperties(QDomDocument &document, QDomElement &properties) +{ + XMLWork::addElement( document, properties, "name", basketName() ); + XMLWork::addElement( document, properties, "icon", icon() ); + + QDomElement appearance = document.createElement("appearance"); + properties.appendChild(appearance); + appearance.setAttribute( "backgroundImage", backgroundImageName() ); + appearance.setAttribute( "backgroundColor", backgroundColorSetting().isValid() ? backgroundColorSetting().name() : "" ); + appearance.setAttribute( "textColor", textColorSetting().isValid() ? textColorSetting().name() : "" ); + + QDomElement disposition = document.createElement("disposition"); + properties.appendChild(disposition); + disposition.setAttribute( "free", XMLWork::trueOrFalse(isFreeLayout()) ); + disposition.setAttribute( "columnCount", QString::number(columnsCount()) ); + disposition.setAttribute( "mindMap", XMLWork::trueOrFalse(isMindMap()) ); + + QDomElement shortcut = document.createElement("shortcut"); + properties.appendChild(shortcut); + QString actionStrings[] = { "show", "globalShow", "globalSwitch" }; + shortcut.setAttribute( "combination", m_action->shortcut().toStringInternal() ); + shortcut.setAttribute( "action", actionStrings[shortcutAction()] ); + + QDomElement protection = document.createElement("protection"); + properties.appendChild(protection); + protection.setAttribute( "type", m_encryptionType ); + protection.setAttribute( "key", m_encryptionKey ); +} + +void Basket::subscribeBackgroundImages() +{ + if (!m_backgroundImageName.isEmpty()) { + Global::backgroundManager->subscribe(m_backgroundImageName); + Global::backgroundManager->subscribe(m_backgroundImageName, this->backgroundColor()); + Global::backgroundManager->subscribe(m_backgroundImageName, selectionRectInsideColor()); + m_backgroundPixmap = Global::backgroundManager->pixmap(m_backgroundImageName); + m_opaqueBackgroundPixmap = Global::backgroundManager->opaquePixmap(m_backgroundImageName, this->backgroundColor()); + m_selectedBackgroundPixmap = Global::backgroundManager->opaquePixmap(m_backgroundImageName, selectionRectInsideColor()); + m_backgroundTiled = Global::backgroundManager->tiled(m_backgroundImageName); + } +} + +void Basket::unsubscribeBackgroundImages() +{ + if (hasBackgroundImage()) { + Global::backgroundManager->unsubscribe(m_backgroundImageName); + Global::backgroundManager->unsubscribe(m_backgroundImageName, this->backgroundColor()); + Global::backgroundManager->unsubscribe(m_backgroundImageName, selectionRectInsideColor()); + m_backgroundPixmap = 0; + m_opaqueBackgroundPixmap = 0; + m_selectedBackgroundPixmap = 0; + } +} + +void Basket::setAppearance(const QString &icon, const QString &name, const QString &backgroundImage, const QColor &backgroundColor, const QColor &textColor) +{ + unsubscribeBackgroundImages(); + + m_icon = icon; + m_basketName = name; + m_backgroundImageName = backgroundImage; + m_backgroundColorSetting = backgroundColor; + m_textColorSetting = textColor; + + m_action->setText("BASKET SHORTCUT: " + name); + + // Basket should ALWAYS have an icon (the "basket" icon by default): + QPixmap iconTest = kapp->iconLoader()->loadIcon(m_icon, KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/true); + if (iconTest.isNull()) + m_icon = "basket"; + + // We don't request the background images if it's not loaded yet (to make the application startup fast). + // When the basket is loading (because requested by the user: he/she want to access it) + // it load the properties, subscribe to (and then load) the images, update the "Loading..." message with the image, + // load all the notes and it's done! + if (m_loadingLaunched) + subscribeBackgroundImages(); + + recomputeAllStyles(); // If a note have a tag with the same background color as the basket one, then display a "..." + recomputeBlankRects(); // See the drawing of blank areas in Basket::drawContents() + unbufferizeAll(); + updateContents(); + + if (isDuringEdit() && m_editor->widget()) { + m_editor->widget()->setPaletteBackgroundColor( m_editor->note()->backgroundColor() ); + m_editor->widget()->setPaletteForegroundColor( m_editor->note()->textColor() ); + } + + emit propertiesChanged(this); +} + +void Basket::setDisposition(int disposition, int columnCount) +{ + static const int COLUMNS_LAYOUT = 0; + static const int FREE_LAYOUT = 1; + static const int MINDMAPS_LAYOUT = 2; + + int currentDisposition = (isFreeLayout() ? (isMindMap() ? MINDMAPS_LAYOUT : FREE_LAYOUT) : COLUMNS_LAYOUT); + + if (currentDisposition == COLUMNS_LAYOUT && disposition == COLUMNS_LAYOUT) { + if (firstNote() && columnCount > m_columnsCount) { + // Insert each new columns: + for (int i = m_columnsCount; i < columnCount; ++i) { + Note *newColumn = new Note(this); + insertNote(newColumn, /*clicked=*/lastNote(), /*zone=*/Note::BottomInsert, QPoint(), /*animateNewPosition=*/false); + } + } else if (firstNote() && columnCount < m_columnsCount) { + Note *column = firstNote(); + Note *cuttedNotes = 0; + for (int i = 1; i <= m_columnsCount; ++i) { + Note *columnToRemove = column; + column = column->next(); + if (i > columnCount) { + // Remove the columns that are too much: + unplugNote(columnToRemove); + // "Cut" the content in the columns to be deleted: + if (columnToRemove->firstChild()) { + for (Note *it = columnToRemove->firstChild(); it; it = it->next()) + it->setParentNote(0); + if (!cuttedNotes) + cuttedNotes = columnToRemove->firstChild(); + else { + Note *lastCuttedNote = cuttedNotes; + while (lastCuttedNote->next()) + lastCuttedNote = lastCuttedNote->next(); + lastCuttedNote->setNext(columnToRemove->firstChild()); + columnToRemove->firstChild()->setPrev(lastCuttedNote); + } + columnToRemove->setFirstChild(0); + } + } + } + // Paste the content in the last column: + if (cuttedNotes) + insertNote(cuttedNotes, /*clicked=*/lastNote(), /*zone=*/Note::BottomColumn, QPoint(), /*animateNewPosition=*/true); + unselectAll(); + } + if (columnCount != m_columnsCount) { + m_columnsCount = (columnCount <= 0 ? 1 : columnCount); + equalizeColumnSizes(); // Will relayoutNotes() + } + } else if (currentDisposition == COLUMNS_LAYOUT && (disposition == FREE_LAYOUT || disposition == MINDMAPS_LAYOUT)) { + Note *column = firstNote(); + m_columnsCount = 0; // Now, so relayoutNotes() will not relayout the free notes as if they were columns! + while (column) { + // Move all childs on the first level: + Note *nextColumn = column->next(); + ungroupNote(column); + column = nextColumn; + } + unselectAll(); + m_mindMap = (disposition == MINDMAPS_LAYOUT); + relayoutNotes(true); + } else if ((currentDisposition == FREE_LAYOUT || currentDisposition == MINDMAPS_LAYOUT) && disposition == COLUMNS_LAYOUT) { + if (firstNote()) { + // TODO: Reorder notes! + // Remove all notes (but keep a reference to them, we're not crazy ;-) ): + Note *notes = m_firstNote; + m_firstNote = 0; + m_count = 0; + m_countFounds = 0; + // Insert the number of columns that is needed: + Note *lastInsertedColumn = 0; + for (int i = 0; i < columnCount; ++i) { + Note *column = new Note(this); + if (lastInsertedColumn) + insertNote(column, /*clicked=*/lastInsertedColumn, /*zone=*/Note::BottomInsert, QPoint(), /*animateNewPosition=*/false); + else + m_firstNote = column; + lastInsertedColumn = column; + } + // Reinsert the old notes in the first column: + insertNote(notes, /*clicked=*/firstNote(), /*zone=*/Note::BottomColumn, QPoint(), /*animateNewPosition=*/true); + unselectAll(); + } else { + // Insert the number of columns that is needed: + Note *lastInsertedColumn = 0; + for (int i = 0; i < columnCount; ++i) { + Note *column = new Note(this); + if (lastInsertedColumn) + insertNote(column, /*clicked=*/lastInsertedColumn, /*zone=*/Note::BottomInsert, QPoint(), /*animateNewPosition=*/false); + else + m_firstNote = column; + lastInsertedColumn = column; + } + } + m_columnsCount = (columnCount <= 0 ? 1 : columnCount); + equalizeColumnSizes(); // Will relayoutNotes() + } +} + +void Basket::equalizeColumnSizes() +{ + if (!firstNote()) + return; + + // Necessary to know the available space; + relayoutNotes(true); + + int availableSpace = visibleWidth(); + int columnWidth = (visibleWidth() - (columnsCount()-1)*Note::GROUP_WIDTH) / columnsCount(); + int columnCount = columnsCount(); + Note *column = firstNote(); + while (column) { + int minGroupWidth = column->minRight() - column->x(); + if (minGroupWidth > columnWidth) { + availableSpace -= minGroupWidth; + --columnCount; + } + column = column->next(); + } + columnWidth = (availableSpace - (columnsCount()-1)*Note::GROUP_WIDTH) / columnCount; + + column = firstNote(); + while (column) { + int minGroupWidth = column->minRight() - column->x(); + if (minGroupWidth > columnWidth) + column->setGroupWidth(minGroupWidth); + else + column->setGroupWidth(columnWidth); + column = column->next(); + } + + relayoutNotes(true); +} + +void Basket::enableActions() +{ + Global::bnpView->enableActions(); + setFocusPolicy(isLocked() ? QWidget::NoFocus : QWidget::StrongFocus); + if (isLocked()) + viewport()->setCursor(Qt::ArrowCursor); // When locking, the cursor stays the last form it was +} + +bool Basket::save() +{ + if (!m_loaded) + return false; + + DEBUG_WIN << "Basket[" + folderName() + "]: Saving..."; + + // Create Document: + QDomDocument document(/*doctype=*/"basket"); + QDomElement root = document.createElement("basket"); + document.appendChild(root); + + // Create Properties Element and Populate It: + QDomElement properties = document.createElement("properties"); + saveProperties(document, properties); + root.appendChild(properties); + + // Create Notes Element and Populate It: + QDomElement notes = document.createElement("notes"); + saveNotes(document, notes, 0); + root.appendChild(notes); + + // Write to Disk: + if(!saveToFile(fullPath() + ".basket", "\n" + document.toString())) + { + DEBUG_WIN << "Basket[" + folderName() + "]: FAILED to save!"; + return false; + } + + Global::bnpView->setUnsavedStatus(false); + return true; +} + +void Basket::aboutToBeActivated() +{ + if (m_finishLoadOnFirstShow) { + FOR_EACH_NOTE (note) + note->finishLazyLoad(); + + //relayoutNotes(/*animate=*/false); + setFocusedNote(0); // So that during the focusInEvent that will come shortly, the FIRST note is focused. + + if (Settings::playAnimations() && !decoration()->filterBar()->filterData().isFiltering && Global::bnpView->currentBasket() == this) // No animation when filtering all! + animateLoad();//QTimer::singleShot( 0, this, SLOT(animateLoad()) ); + + m_finishLoadOnFirstShow = false; + } +} + +void Basket::load() +{ + // Load only once: + if (m_loadingLaunched) + return; + m_loadingLaunched = true; + +// StopWatch::start(10); + + DEBUG_WIN << "Basket[" + folderName() + "]: Loading..."; + QDomDocument *doc = 0; + QString content; + +// StopWatch::start(0); + + if (loadFromFile(fullPath() + ".basket", &content)) { + doc = new QDomDocument("basket"); + if ( ! doc->setContent(content) ) { + DEBUG_WIN << "Basket[" + folderName() + "]: FAILED to parse XML!"; + delete doc; + doc = 0; + } + } + if(isEncrypted()) + DEBUG_WIN << "Basket is encrypted."; + if ( ! doc) { + DEBUG_WIN << "Basket[" + folderName() + "]: FAILED to load!"; + m_loadingLaunched = false; + if (isEncrypted()) + m_locked = true; + Global::bnpView->notesStateChanged(); // Show "Locked" instead of "Loading..." in the statusbar + return; + } + m_locked = false; + + QDomElement docElem = doc->documentElement(); + QDomElement properties = XMLWork::getElement(docElem, "properties"); + + loadProperties(properties); // Since we are loading, this time the background image will also be loaded! + // Now that the background image is loaded and subscribed, we display it during the load process: + delete doc; + updateContents(); +// kapp->processEvents(); + + //BEGIN Compatibility with 0.6.0 Pre-Alpha versions: + QDomElement notes = XMLWork::getElement(docElem, "notes"); + if (notes.isNull()) + notes = XMLWork::getElement(docElem, "items"); + m_watcher->stopScan(); + m_shouldConvertPlainTextNotes = false; // Convert Pre-0.6.0 baskets: plain text notes should be converted to rich text ones once all is loaded! +// StopWatch::check(0); + +// StopWatch::start(1); + m_finishLoadOnFirstShow = (Global::bnpView->currentBasket() != this); + loadNotes(notes, 0L); +// StopWatch::check(1); +// StopWatch::start(2); + + if (m_shouldConvertPlainTextNotes) + convertTexts(); + m_watcher->startScan(); + //loadNotes(XMLWork::getElement(docElem, "notes"), 0L); + //END + +// StopWatch::check(0); + + signalCountsChanged(); + if (isColumnsLayout()) { + // Count the number of columns: + int columnsCount = 0; + Note *column = firstNote(); + while (column) { + ++columnsCount; + column = column->next(); + } + m_columnsCount = columnsCount; + } + + relayoutNotes(false); + + // On application start, the current basket is not focused yet, so the focus rectangle is not shown when calling focusANote(): + if (Global::bnpView->currentBasket() == this) + setFocus(); + focusANote(); + + if (Settings::playAnimations() && !decoration()->filterBar()->filterData().isFiltering && Global::bnpView->currentBasket() == this) // No animation when filtering all! + animateLoad();//QTimer::singleShot( 0, this, SLOT(animateLoad()) ); + else + m_loaded = true; + enableActions(); +// StopWatch::check(2); + +// StopWatch::check(10); +} + +void Basket::filterAgain(bool andEnsureVisible/* = true*/) +{ + newFilter(decoration()->filterData(), andEnsureVisible); +} + +void Basket::filterAgainDelayed() +{ + QTimer::singleShot( 0, this, SLOT(filterAgain()) ); +} + +void Basket::newFilter(const FilterData &data, bool andEnsureVisible/* = true*/) +{ + if (!isLoaded()) + return; + +//StopWatch::start(20); + + m_countFounds = 0; + for (Note *note = firstNote(); note; note = note->next()) + m_countFounds += note->newFilter(data); + + relayoutNotes(true); + signalCountsChanged(); + + if (hasFocus()) // if (!hasFocus()), focusANote() will be called at focusInEvent() + focusANote(); // so, we avoid de-focus a note if it will be re-shown soon + if (andEnsureVisible && m_focusedNote != 0L) + ensureNoteVisible(m_focusedNote); + + Global::bnpView->setFiltering(data.isFiltering); + +//StopWatch::check(20); +} + +void Basket::cancelFilter() +{ + decoration()->filterBar()->reset(); + validateFilter(); +} + +void Basket::validateFilter() +{ + if (isDuringEdit()) + m_editor->widget()->setFocus(); + else + setFocus(); +} + +bool Basket::isFiltering() +{ + return decoration()->filterBar()->filterData().isFiltering; +} + + + +QString Basket::fullPath() +{ + return Global::basketsFolder() + folderName(); +} + +QString Basket::fullPathForFileName(const QString &fileName) +{ + return fullPath() + fileName; +} + +/*static*/ QString Basket::fullPathForFolderName(const QString &folderName) +{ + return Global::basketsFolder() + folderName; +} + + +void Basket::setShortcut(KShortcut shortcut, int action) +{ + if(!Global::globalAccel) + return; + QString sAction = "global_basket_activate_" + folderName(); + Global::globalAccel->remove(sAction); + Global::globalAccel->updateConnections(); + + m_action->setShortcut(shortcut); + m_shortcutAction = action; + + if (action > 0) + Global::globalAccel->insert(sAction, m_action->text(), /*whatsThis=*/"", m_action->shortcut(), KShortcut(), this, SLOT(activatedShortcut()), /*configurable=*/false); + Global::globalAccel->updateConnections(); +} + +void Basket::activatedShortcut() +{ + Global::bnpView->setCurrentBasket(this); + + if (m_shortcutAction == 1) + Global::bnpView->setActive(true); +} + +void Basket::signalCountsChanged() +{ + if (!m_timerCountsChanged.isActive()) + m_timerCountsChanged.start(0/*ms*/, /*singleShot=*/true); +} + +void Basket::countsChangedTimeOut() +{ + emit countsChanged(this); +} + + +Basket::Basket(QWidget *parent, const QString &folderName) + : QScrollView(parent), + QToolTip(viewport()), + m_noActionOnMouseRelease(false), m_ignoreCloseEditorOnNextMouseRelease(false), m_pressPos(-100, -100), m_canDrag(false), + m_firstNote(0), m_columnsCount(1), m_mindMap(false), m_resizingNote(0L), m_pickedResizer(0), m_movingNote(0L), m_pickedHandle(0, 0), + m_clickedToInsert(0), m_zoneToInsert(0), m_posToInsert(-1, -1), + m_isInsertPopupMenu(false), + m_loaded(false), m_loadingLaunched(false), m_locked(false), m_decryptBox(0), m_button(0), m_encryptionType(NoEncryption), +#ifdef HAVE_LIBGPGME + m_gpg(0), +#endif + m_backgroundPixmap(0), m_opaqueBackgroundPixmap(0), m_selectedBackgroundPixmap(0), + m_action(0), m_shortcutAction(0), + m_hoveredNote(0), m_hoveredZone(Note::None), m_lockedHovering(false), m_underMouse(false), + m_inserterRect(), m_inserterShown(false), m_inserterSplit(true), m_inserterTop(false), m_inserterGroup(false), + m_isSelecting(false), m_selectionStarted(false), + m_count(0), m_countFounds(0), m_countSelecteds(0), + m_folderName(folderName), + m_editor(0), m_leftEditorBorder(0), m_rightEditorBorder(0), m_redirectEditActions(false), m_editorWidth(-1), m_editorHeight(-1), + m_doNotCloseEditor(false), m_editParagraph(0), m_editIndex(0), + m_isDuringDrag(false), m_draggedNotes(), + m_focusedNote(0), m_startOfShiftSelectionNote(0), + m_finishLoadOnFirstShow(false), m_relayoutOnNextShow(false) +{ + QString sAction = "local_basket_activate_" + folderName; + m_action = new KAction("FAKE TEXT", "FAKE ICON", KShortcut(), this, SLOT(activatedShortcut()), Global::bnpView->actionCollection(), sAction); + m_action->setShortcutConfigurable(false); // We do it in the basket properties dialog (and keep it in sync with the global one) + + if (!m_folderName.endsWith("/")) + m_folderName += "/"; + + setFocusPolicy(QWidget::StrongFocus); + setWFlags(Qt::WNoAutoErase); + setDragAutoScroll(true); + + // By default, there is no corner widget: we set one for the corner area to be painted! + // If we don't set one and there are two scrollbars present, slowly resizing up the window show graphical glitches in that area! + m_cornerWidget = new QWidget(this); + setCornerWidget(m_cornerWidget); + + viewport()->setAcceptDrops(true); + viewport()->setMouseTracking(true); + viewport()->setBackgroundMode(NoBackground); // Do not clear the widget before paintEvent() because we always draw every pixels (faster and flicker-free) + + // File Watcher: + m_watcher = new KDirWatch(this); + connect( m_watcher, SIGNAL(dirty(const QString&)), this, SLOT(watchedFileModified(const QString&)) ); + connect( m_watcher, SIGNAL(deleted(const QString&)), this, SLOT(watchedFileDeleted(const QString&)) ); + connect( &m_watcherTimer, SIGNAL(timeout()), this, SLOT(updateModifiedNotes()) ); + + // Various Connections: + connect( &m_animationTimer, SIGNAL(timeout()), this, SLOT(animateObjects()) ); + connect( &m_autoScrollSelectionTimer, SIGNAL(timeout()), this, SLOT(doAutoScrollSelection()) ); + connect( &m_timerCountsChanged, SIGNAL(timeout()), this, SLOT(countsChangedTimeOut()) ); + connect( &m_inactivityAutoSaveTimer, SIGNAL(timeout()), this, SLOT(inactivityAutoSaveTimeout()) ); + connect( &m_inactivityAutoLockTimer, SIGNAL(timeout()), this, SLOT(inactivityAutoLockTimeout()) ); + connect( this, SIGNAL(contentsMoving(int, int)), this, SLOT(contentsMoved()) ); +#ifdef HAVE_LIBGPGME + m_gpg = new KGpgMe(); +#endif + m_locked = isFileEncrypted(); +} + +void Basket::contentsMoved() +{ + // This slot is called BEFORE the content move, so we delay the hover effects: + QTimer::singleShot(0, this, SLOT(doHoverEffects())); +} + +void Basket::enterEvent(QEvent *) +{ + m_underMouse = true; + doHoverEffects(); +} + +void Basket::leaveEvent(QEvent *) +{ + m_underMouse = false; + doHoverEffects(); + + if (m_lockedHovering) + return; + + removeInserter(); + if (m_hoveredNote) { + m_hoveredNote->setHovered(false); + m_hoveredNote->setHoveredZone(Note::None); + updateNote(m_hoveredNote); + } + m_hoveredNote = 0; +} + +void Basket::setFocusIfNotInPopupMenu() +{ + if (!kapp->activePopupWidget()) + if (isDuringEdit()) + m_editor->widget()->setFocus(); + else + setFocus(); +} + +void Basket::contentsMousePressEvent(QMouseEvent *event) +{ + // If user click the basket, focus it! + // The focus is delayed because if the click results in showing a popup menu, + // the interface flicker by showing the focused rectangle (as the basket gets focus) + // and immediatly removing it (because the popup menu now have focus). + if (!isDuringEdit()) + QTimer::singleShot(0, this, SLOT(setFocusIfNotInPopupMenu())); + + // Convenient variables: + bool controlPressed = event->stateAfter() & Qt::ControlButton; + bool shiftPressed = event->stateAfter() & Qt::ShiftButton; + + // Do nothing if we disabled the click some milliseconds sooner. + // For instance when a popup menu has been closed with click, we should not do action: + if (event->button() == Qt::LeftButton && (kapp->activePopupWidget() || m_lastDisableClick.msecsTo(QTime::currentTime()) <= 80)) { + doHoverEffects(); + m_noActionOnMouseRelease = true; + // But we allow to select: + // The code is the same as at the bottom of this method: + if (event->button() == Qt::LeftButton) { + m_selectionStarted = true; + m_selectionBeginPoint = event->pos(); + m_selectionInvert = controlPressed || shiftPressed; + } + return; + } + + // Figure out what is the clicked note and zone: + Note *clicked = noteAt(event->pos().x(), event->pos().y()); + Note::Zone zone = (clicked ? clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()) ) : Note::None); + + // Popup Tags menu: + if (zone == Note::TagsArrow && !controlPressed && !shiftPressed && event->button() != Qt::MidButton) { + if (!clicked->isSelected()) + unselectAllBut(clicked); + setFocusedNote(clicked); /// /// /// + m_startOfShiftSelectionNote = clicked; + m_noActionOnMouseRelease = true; + popupTagsMenu(clicked); + return; + } + + if (event->button() == Qt::LeftButton) { + // Prepare to allow drag and drop when moving mouse further: + if ( (zone == Note::Handle || zone == Note::Group) || + (clicked && clicked->isSelected() && + (zone == Note::TagsArrow || zone == Note::Custom0 || zone == Note::Content || zone == Note::Link /**/ || zone >= Note::Emblem0 /**/)) ) { + if (!shiftPressed && !controlPressed) { + m_pressPos = event->pos(); // TODO: Allow to drag emblems to assign them to other notes. Then don't allow drag at Emblem0!! + m_canDrag = true; + // Saving where we were editing, because during a drag, the mouse can fly over the text edit and move the cursor position: + if (m_editor && m_editor->textEdit()) { + QTextEdit *editor = m_editor->textEdit(); + editor->getCursorPosition(&m_editParagraph, &m_editIndex); + } + } + } + + // Initializing Resizer move: + if (zone == Note::Resizer) { + m_resizingNote = clicked; + m_pickedResizer = event->pos().x() - clicked->rightLimit(); + m_noActionOnMouseRelease = true; + m_lockedHovering = true; + return; + } + + // Select note(s): + if (zone == Note::Handle || zone == Note::Group || (zone == Note::GroupExpander && (controlPressed || shiftPressed))) { + Note *end = clicked; + if (clicked->isGroup() && shiftPressed) { + if (clicked->contains(m_startOfShiftSelectionNote)) { + m_startOfShiftSelectionNote = clicked->firstRealChild(); + end = clicked->lastRealChild(); + } else if (clicked->firstRealChild()->isAfter(m_startOfShiftSelectionNote)) + end = clicked->lastRealChild(); + else + end = clicked->firstRealChild(); + } + if (controlPressed && shiftPressed) + selectRange(m_startOfShiftSelectionNote, end, /*unselectOthers=*/false); + else if (shiftPressed) + selectRange(m_startOfShiftSelectionNote, end); + else if (controlPressed) + clicked->setSelectedRecursivly(!clicked->allSelected()); + else if (!clicked->allSelected()) + unselectAllBut(clicked); + setFocusedNote(end); /// /// /// + m_startOfShiftSelectionNote = (end->isGroup() ? end->firstRealChild() : end); + //m_noActionOnMouseRelease = false; + m_noActionOnMouseRelease = true; + return; + } + // MOVED TO RELEASE EVENT: + /* else if (clicked && zone != Note::None && zone != Note::BottomColumn && zone != Note::Resizer && (controlPressed || shiftPressed)) { + if (controlPressed && shiftPressed) + selectRange(m_startOfShiftSelectionNote, clicked, / *unselectOthers=* /false); + else if (shiftPressed) + selectRange(m_startOfShiftSelectionNote, clicked); + else if (controlPressed) + clicked->setSelectedRecursivly(!clicked->allSelected()); + setFocusedNote(clicked); /// /// /// + m_startOfShiftSelectionNote = (clicked->isGroup() ? clicked->firstRealChild() : clicked); + m_noActionOnMouseRelease = true; + return; + }*/ + + // Initializing Note move: +/* if ((zone == Note::Group || zone == Note::Handle) && clicked->isFree()) { + m_movingNote = clicked; + m_pickedHandle = QPoint(event->pos().x() - clicked->x(), event->pos().y() - clicked->y()); + m_noActionOnMouseRelease = true; + m_lockedHovering = true; + return; + } +*/ + + // Folding/Unfolding group: + if (zone == Note::GroupExpander) { + clicked->toggleFolded(Settings::playAnimations()); + relayoutNotes(true); + m_noActionOnMouseRelease = true; + return; + } + } + + // Popup menu for tag emblems: + if (event->button() == Qt::RightButton && zone >= Note::Emblem0) { + if (!clicked->isSelected()) + unselectAllBut(clicked); + setFocusedNote(clicked); /// /// /// + m_startOfShiftSelectionNote = clicked; + popupEmblemMenu(clicked, zone - Note::Emblem0); + m_noActionOnMouseRelease = true; + return; + } + + // Insertion Popup Menu: + if ( (event->button() == Qt::RightButton) && + ((!clicked && isFreeLayout()) || + (clicked && (zone == Note::TopInsert || zone == Note::TopGroup || zone == Note::BottomInsert || zone == Note::BottomGroup || zone == Note::BottomColumn))) ) { + unselectAll(); + m_clickedToInsert = clicked; + m_zoneToInsert = zone; + m_posToInsert = event->pos(); + KPopupMenu* menu = (KPopupMenu*)(Global::bnpView->popupMenu("insert_popup")); + if (!menu->title(/*id=*/120).isEmpty()) // If we already added a title, remove it because it would be kept and then added several times: + menu->removeItem(/*id=*/120); + menu->insertTitle((zone == Note::TopGroup || zone == Note::BottomGroup ? i18n("The verb (Group New Note)", "Group") : i18n("The verb (Insert New Note)", "Insert")), /*id=*/120, /*index=*/0); + setInsertPopupMenu(); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(delayedCancelInsertPopupMenu()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(hideInsertPopupMenu()) ); + doHoverEffects(clicked, zone); // In the case where another popup menu was open, we should do that manually! + m_lockedHovering = true; + menu->exec(QCursor::pos()); + m_noActionOnMouseRelease = true; + return; + } + + // Note Context Menu: + if (event->button() == Qt::RightButton && clicked && !clicked->isColumn() && zone != Note::Resizer) { + if (!clicked->isSelected()) + unselectAllBut(clicked); + setFocusedNote(clicked); /// /// /// + if (editedNote() == clicked) { + closeEditor(); + clicked->setSelected(true); + } + m_startOfShiftSelectionNote = (clicked->isGroup() ? clicked->firstRealChild() : clicked); + QPopupMenu* menu = Global::bnpView->popupMenu("note_popup"); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + doHoverEffects(clicked, zone); // In the case where another popup menu was open, we should do that manually! + m_lockedHovering = true; + menu->exec(QCursor::pos()); + m_noActionOnMouseRelease = true; + return; + } + + // Paste selection under cursor (but not "create new primary note under cursor" because this is on moveRelease): + if (event->button() == Qt::MidButton && zone != Note::Resizer && (!isDuringEdit() || clicked != editedNote())) { + if ((Settings::middleAction() != 0) && (event->state() == Qt::ShiftButton)) { + m_clickedToInsert = clicked; + m_zoneToInsert = zone; + m_posToInsert = event->pos(); + closeEditor(); + removeInserter(); // If clicked at an insertion line and the new note shows a dialog for editing, + NoteType::Id type = (NoteType::Id)0; // hide that inserter before the note edition instead of after the dialog is closed + switch (Settings::middleAction()) { + case 1: + m_isInsertPopupMenu = true; + pasteNote(); + break; + case 2: type = NoteType::Image; break; + case 3: type = NoteType::Link; break; + case 4: type = NoteType::Launcher; break; + default: + m_noActionOnMouseRelease = false; + return; // Other options should be done on mouse release (to avoid mouse release to cancel them!) +/* case 5: type = NoteType::Color; break; + case 6: + Global::bnpView->grabScreenshot(); + break; + case 7: + Global::bnpView->slotColorFromScreen(); + break; + case 8: + Global::bnpView->insertWizard(3); // loadFromFile + break; + case 9: + Global::bnpView->insertWizard(1); // importKMenuLauncher + break; + case 10: + Global::bnpView->insertWizard(2); // importIcon + break; +*/ } + if (type != 0) { + m_ignoreCloseEditorOnNextMouseRelease = true; + Global::bnpView->insertEmpty(type); + } + } else { + if (clicked) + zone = clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()), true ); + closeEditor(); + clickedToInsert(event, clicked, zone); + save(); + } + m_noActionOnMouseRelease = true; + return; + } + + // Finally, no action has been done durint pressEvent, so an action can be done on releaseEvent: + m_noActionOnMouseRelease = false; + + /* Selection scenario: + * On contentsMousePressEvent, put m_selectionStarted to true and init Begin and End selection point. + * On contentsMouseMoveEvent, if m_selectionStarted, update End selection point, update selection rect, + * and if it's larger, switching to m_isSelecting mode: we can draw the selection rectangle. + */ + // Prepare selection: + if (event->button() == Qt::LeftButton) { + m_selectionStarted = true; + m_selectionBeginPoint = event->pos(); + // We usualy invert the selection with the Ctrl key, but some environements (like GNOME or The Gimp) do it with the Shift key. + // Since the Shift key has no specific usage, we allow to invert selection ALSO with Shift for Gimp people + m_selectionInvert = controlPressed || shiftPressed; + } +} + +void Basket::delayedCancelInsertPopupMenu() +{ + QTimer::singleShot( 0, this, SLOT(cancelInsertPopupMenu()) ); +} + +void Basket::contentsContextMenuEvent(QContextMenuEvent *event) +{ + if (event->reason() == QContextMenuEvent::Keyboard) { + if (countFounds/*countShown*/() == 0) { // TODO: Count shown!! + QRect basketRect( mapToGlobal(QPoint(0,0)), size() ); + QPopupMenu *menu = Global::bnpView->popupMenu("insert_popup"); + setInsertPopupMenu(); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(delayedCancelInsertPopupMenu()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + removeInserter(); + m_lockedHovering = true; + PopupMenu::execAtRectCenter(*menu, basketRect); // Popup at center or the basket + } else { + if ( ! m_focusedNote->isSelected() ) + unselectAllBut(m_focusedNote); + setFocusedNote(m_focusedNote); /// /// /// + m_startOfShiftSelectionNote = (m_focusedNote->isGroup() ? m_focusedNote->firstRealChild() : m_focusedNote); + // Popup at bottom (or top) of the focused note, if visible : + QPopupMenu *menu = Global::bnpView->popupMenu("note_popup"); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + doHoverEffects(m_focusedNote, Note::Content); // In the case where another popup menu was open, we should do that manually! + m_lockedHovering = true; + PopupMenu::execAtRectBottom(*menu, noteVisibleRect(m_focusedNote), true); + } + } +} + +QRect Basket::noteVisibleRect(Note *note) +{ + QRect rect( contentsToViewport(QPoint(note->x(), note->y())), QSize(note->width(),note->height()) ); + QPoint basketPoint = mapToGlobal(QPoint(0,0)); + rect.moveTopLeft( rect.topLeft() + basketPoint + QPoint(frameWidth(), frameWidth()) ); + + // Now, rect contain the global note rectangle on the screen. + // We have to clip it by the basket widget : + if (rect.bottom() > basketPoint.y() + visibleHeight() + 1) { // Bottom too... bottom + rect.setBottom( basketPoint.y() + visibleHeight() + 1); + if (rect.height() <= 0) // Have at least one visible pixel of height + rect.setTop(rect.bottom()); + } + if (rect.top() < basketPoint.y() + frameWidth()) { // Top too... top + rect.setTop( basketPoint.y() + frameWidth()); + if (rect.height() <= 0) + rect.setBottom(rect.top()); + } + if (rect.right() > basketPoint.x() + visibleWidth() + 1) { // Right too... right + rect.setRight( basketPoint.x() + visibleWidth() + 1); + if (rect.width() <= 0) // Have at least one visible pixel of width + rect.setLeft(rect.right()); + } + if (rect.left() < basketPoint.x() + frameWidth()) { // Left too... left + rect.setLeft( basketPoint.x() + frameWidth()); + if (rect.width() <= 0) + rect.setRight(rect.left()); + } + + return rect; +} + +void Basket::disableNextClick() +{ + m_lastDisableClick = QTime::currentTime(); +} + +void Basket::recomputeAllStyles() +{ + FOR_EACH_NOTE (note) + note->recomputeAllStyles(); +} + +void Basket::removedStates(const QValueList &deletedStates) +{ + bool modifiedBasket = false; + + FOR_EACH_NOTE (note) + if (note->removedStates(deletedStates)) + modifiedBasket = true; + + if (modifiedBasket) + save(); +} + +void Basket::insertNote(Note *note, Note *clicked, int zone, const QPoint &pos, bool animateNewPosition) +{ + if (!note) { + std::cout << "Wanted to insert NO note" << std::endl; + return; + } + + if (clicked && zone == Note::BottomColumn) { + // When inserting at the bottom of a column, it's obvious the new note SHOULD inherit tags. + // We ensure that by changing the insertion point after the last note of the column: + Note *last = clicked->lastChild(); + if (last) { + clicked = last; + zone = Note::BottomInsert; + } + } + + /// Insertion at the bottom of a column: + if (clicked && zone == Note::BottomColumn) { + note->setWidth(clicked->rightLimit() - clicked->x()); + Note *lastChild = clicked->lastChild(); + if (!animateNewPosition || !Settings::playAnimations()) + for (Note *n = note; n; n = n->next()) { + n->setXRecursivly(clicked->x()); + n->setYRecursivly((lastChild ? lastChild : clicked)->bottom() + 1); + } + appendNoteIn(note, clicked); + + /// Insertion relative to a note (top/bottom, insert/group): + } else if (clicked) { + note->setWidth(clicked->width()); + if (!animateNewPosition || !Settings::playAnimations()) + for (Note *n = note; n; n = n->next()) { + if (zone == Note::TopGroup || zone == Note::BottomGroup) + n->setXRecursivly(clicked->x() + Note::GROUP_WIDTH); + else + n->setXRecursivly(clicked->x()); + if (zone == Note::TopInsert || zone == Note::TopGroup) + n->setYRecursivly(clicked->y()); + else + n->setYRecursivly(clicked->bottom() + 1); + } + + if (zone == Note::TopInsert) { appendNoteBefore(note, clicked); } + else if (zone == Note::BottomInsert) { appendNoteAfter(note, clicked); } + else if (zone == Note::TopGroup) { groupNoteBefore(note, clicked); } + else if (zone == Note::BottomGroup) { groupNoteAfter(note, clicked); } + + /// Free insertion: + } else if (isFreeLayout()) { + // Group if note have siblings: + if (note->next()) { + Note *group = new Note(this); + for (Note *n = note; n; n = n->next()) + n->setParentNote(group); + group->setFirstChild(note); + note = group; + } + // Insert at cursor position: + const int initialWidth = 250; + note->setWidth(note->isGroup() ? Note::GROUP_WIDTH : initialWidth); + if (note->isGroup() && note->firstChild()) + note->setInitialHeight(note->firstChild()->height()); + //note->setGroupWidth(initialWidth); + if (animateNewPosition && Settings::playAnimations()) + note->setFinalPosition(pos.x(), pos.y()); + else { + note->setXRecursivly(pos.x()); + note->setYRecursivly(pos.y()); + } + appendNoteAfter(note, lastNote()); + } + + relayoutNotes(true); +} + +void Basket::clickedToInsert(QMouseEvent *event, Note *clicked, /*Note::Zone*/int zone) +{ + Note *note; + if (event->button() == Qt::MidButton) + note = NoteFactory::dropNote(KApplication::clipboard()->data(QClipboard::Selection), this); + else + note = NoteFactory::createNoteText("", this); + + if (!note) + return; + + insertNote(note, clicked, zone, event->pos(), /*animateNewPosition=*/false); + +// ensureNoteVisible(lastInsertedNote()); // TODO: in insertNote() + + if (event->button() != Qt::MidButton) { + removeInserter(); // Case: user clicked below a column to insert, the note is inserted and doHoverEffects() put a new inserter below. We don't want it. + closeEditor(); + noteEdit(note, /*justAdded=*/true); + } +} + +void Basket::contentsDragEnterEvent(QDragEnterEvent *event) +{ + m_isDuringDrag = true; + Global::bnpView->updateStatusBarHint(); + if (NoteDrag::basketOf(event) == this) + m_draggedNotes = NoteDrag::notesOf(event); +} + +void Basket::contentsDragMoveEvent(QDragMoveEvent *event) +{ +// m_isDuringDrag = true; + +// if (isLocked()) +// return; + +// FIXME: viewportToContents does NOT work !!! +// QPoint pos = viewportToContents(event->pos()); +// QPoint pos( event->pos().x() + contentsX(), event->pos().y() + contentsY() ); + +// if (insertAtCursorPos()) +// computeInsertPlace(pos); + doHoverEffects(event->pos()); + +// showFrameInsertTo(); + if (isFreeLayout() || noteAt(event->pos().x(), event->pos().y())) // Cursor before rightLimit() or hovering the dragged source notes + acceptDropEvent(event); + else { + event->acceptAction(false); + event->accept(false); + } + +/* Note *hoveredNote = noteAt(event->pos().x(), event->pos().y()); + if ( (isColumnsLayout() && !hoveredNote) || (draggedNotes().contains(hoveredNote)) ) { + event->acceptAction(false); + event->accept(false); + } else + acceptDropEvent(event);*/ + + // A workarround since QScrollView::dragAutoScroll seem to have no effect : +// ensureVisible(event->pos().x() + contentsX(), event->pos().y() + contentsY(), 30, 30); +// QScrollView::dragMoveEvent(event); +} + +void Basket::contentsDragLeaveEvent(QDragLeaveEvent*) +{ +// resetInsertTo(); + m_isDuringDrag = false; + m_draggedNotes.clear(); + m_noActionOnMouseRelease = true; + emit resetStatusBarText(); + doHoverEffects(); +} + +void Basket::contentsDropEvent(QDropEvent *event) +{ + QPoint pos = event->pos(); + std::cout << "Contents Drop Event at position " << pos.x() << ":" << pos.y() << std::endl; + + m_isDuringDrag = false; + emit resetStatusBarText(); + +// if (isLocked()) +// return; + + // Do NOT check the bottom&right borders. + // Because imagine someone drag&drop a big note from the top to the bottom of a big basket (with big vertical scrollbars), + // the note is first removed, and relayoutNotes() compute the new height that is smaller + // Then noteAt() is called for the mouse pointer position, because the basket is now smaller, the cursor is out of boundaries!!! + // Should, of course, not return 0: + Note *clicked = noteAt(event->pos().x(), event->pos().y()); + + if (NoteFactory::movingNotesInTheSameBasket(event, this, event->action()) && event->action() == QDropEvent::Move) { + m_doNotCloseEditor = true; + } + + Note *note = NoteFactory::dropNote( event, this, true, event->action(), dynamic_cast(event->source()) ); + + if (note) { + Note::Zone zone = (clicked ? clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()), /*toAdd=*/true ) : Note::None); + bool animateNewPosition = NoteFactory::movingNotesInTheSameBasket(event, this, event->action()); + if (animateNewPosition) { + FOR_EACH_NOTE (n) + n->setOnTop(false); + // FOR_EACH_NOTE_IN_CHUNK(note) + for (Note *n = note; n; n = n->next()) + n->setOnTop(true); + } + + insertNote(note, clicked, zone, event->pos(), animateNewPosition); + + // If moved a note on bottom, contentsHeight has been disminished, then view scrolled up, and we should re-scroll the view down: + ensureNoteVisible(note); + +// if (event->button() != Qt::MidButton) { +// removeInserter(); // Case: user clicked below a column to insert, the note is inserted and doHoverEffects() put a new inserter below. We don't want it. +// } + +// resetInsertTo(); +// doHoverEffects(); called by insertNote() + save(); + } + + m_draggedNotes.clear(); + + m_doNotCloseEditor = false; + // When starting the drag, we saved where we were editing. + // This is because during a drag, the mouse can fly over the text edit and move the cursor position, and even HIDE the cursor. + // So we re-show the cursor, and re-position it at the right place: + if (m_editor && m_editor->textEdit()) { + QTextEdit *editor = m_editor->textEdit(); + editor->setCursorPosition(m_editParagraph, m_editIndex); + } +} + +// handles dropping of a note to basket that is not shown +// (usually through its entry in the basket list) +void Basket::blindDrop(QDropEvent* event) +{ + if (!m_isInsertPopupMenu && redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->paste(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->paste(); + } else { + if (!isLoaded()) { + Global::bnpView->showPassiveLoading(this); + load(); + } + closeEditor(); + unselectAll(); + Note *note = NoteFactory::dropNote( event, this, true, event->action(), + dynamic_cast(event->source()) ); + if (note) { + insertCreatedNote(note); + //unselectAllBut(note); + if (Settings::usePassivePopup()) + Global::bnpView->showPassiveDropped(i18n("Dropped to basket %1")); + } + } + save(); +} + +void Basket::insertEmptyNote(int type) +{ + if (!isLoaded()) + load(); + if (isDuringEdit()) + closeEditor(); + Note *note = NoteFactory::createEmptyNote((NoteType::Id)type, this); + insertCreatedNote(note/*, / *edit=* /true*/); + noteEdit(note, /*justAdded=*/true); +} + +void Basket::insertWizard(int type) +{ + saveInsertionData(); + Note *note = 0; + switch (type) { + default: + case 1: note = NoteFactory::importKMenuLauncher(this); break; + case 2: note = NoteFactory::importIcon(this); break; + case 3: note = NoteFactory::importFileContent(this); break; + } + if (!note) + return; + restoreInsertionData(); + insertCreatedNote(note); + unselectAllBut(note); + resetInsertionData(); +} + +void Basket::insertColor(const QColor &color) +{ + Note *note = NoteFactory::createNoteColor(color, this); + restoreInsertionData(); + insertCreatedNote(note); + unselectAllBut(note); + resetInsertionData(); +} + +void Basket::insertImage(const QPixmap &image) +{ + Note *note = NoteFactory::createNoteImage(image, this); + restoreInsertionData(); + insertCreatedNote(note); + unselectAllBut(note); + resetInsertionData(); +} + +void Basket::pasteNote(QClipboard::Mode mode) +{ + if (!m_isInsertPopupMenu && redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->paste(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->paste(); + } else { + if (!isLoaded()) { + Global::bnpView->showPassiveLoading(this); + load(); + } + closeEditor(); + unselectAll(); + Note *note = NoteFactory::dropNote(KApplication::clipboard()->data(mode), this); + if (note) { + insertCreatedNote(note); + //unselectAllBut(note); + } + } +} + +void Basket::insertCreatedNote(Note *note) +{ + // Get the insertion data if the user clicked inside the basket: + Note *clicked = m_clickedToInsert; + int zone = m_zoneToInsert; + QPoint pos = m_posToInsert; + + // If it isn't the case, use the default position: + if (!clicked && (pos.x() < 0 || pos.y() < 0)) { + // Insert right after the focused note: + focusANote(); + if (m_focusedNote) { + clicked = m_focusedNote; + zone = (m_focusedNote->isFree() ? Note::BottomGroup : Note::BottomInsert); + pos = QPoint(m_focusedNote->x(), m_focusedNote->finalBottom()); + // Insert at the end of the last column: + } else if (isColumnsLayout()) { + Note *column = /*(Settings::newNotesPlace == 0 ?*/ firstNote() /*: lastNote())*/; + /*if (Settings::newNotesPlace == 0 && column->firstChild()) { // On Top, if at least one child in the column + clicked = column->firstChild(); + zone = Note::TopInsert; + } else { // On Bottom*/ + clicked = column; + zone = Note::BottomColumn; + /*}*/ + // Insert at free position: + } else { + pos = QPoint(0, 0); + } + } + + insertNote(note, clicked, zone, pos); +// ensureNoteVisible(lastInsertedNote()); + removeInserter(); // Case: user clicked below a column to insert, the note is inserted and doHoverEffects() put a new inserter below. We don't want it. +// resetInsertTo(); + save(); +} + +void Basket::saveInsertionData() +{ + m_savedClickedToInsert = m_clickedToInsert; + m_savedZoneToInsert = m_zoneToInsert; + m_savedPosToInsert = m_posToInsert; +} + +void Basket::restoreInsertionData() +{ + m_clickedToInsert = m_savedClickedToInsert; + m_zoneToInsert = m_savedZoneToInsert; + m_posToInsert = m_savedPosToInsert; +} + +void Basket::resetInsertionData() +{ + m_clickedToInsert = 0; + m_zoneToInsert = 0; + m_posToInsert = QPoint(-1, -1); +} + +void Basket::hideInsertPopupMenu() +{ + QTimer::singleShot( 50/*ms*/, this, SLOT(timeoutHideInsertPopupMenu()) ); +} + +void Basket::timeoutHideInsertPopupMenu() +{ + resetInsertionData(); +} + +void Basket::acceptDropEvent(QDropEvent *event, bool preCond) +{ + // FIXME: Should not accept all actions! Or not all actions (link not supported?!) + event->acceptAction(preCond && 1); + event->accept(preCond); +} + +void Basket::contentsMouseReleaseEvent(QMouseEvent *event) +{ + // Now disallow drag: + m_canDrag = false; + + // Cancel Resizer move: + if (m_resizingNote) { + m_resizingNote = 0; + m_pickedResizer = 0; + m_lockedHovering = false; + doHoverEffects(); + save(); + } + + // Cancel Note move: +/* if (m_movingNote) { + m_movingNote = 0; + m_pickedHandle = QPoint(0, 0); + m_lockedHovering = false; + //doHoverEffects(); + save(); + } +*/ + + // Cancel Selection rectangle: + if (m_isSelecting) { + m_isSelecting = false; + stopAutoScrollSelection(); + resetWasInLastSelectionRect(); + doHoverEffects(); + updateContents(m_selectionRect); + } + m_selectionStarted = false; + + Note *clicked = noteAt(event->pos().x(), event->pos().y()); + Note::Zone zone = (clicked ? clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()) ) : Note::None); + if ((zone == Note::Handle || zone == Note::Group) && editedNote() && editedNote() == clicked) { + if (m_ignoreCloseEditorOnNextMouseRelease) + m_ignoreCloseEditorOnNextMouseRelease = false; + else { + bool editedNoteStillThere = closeEditor(); + if (editedNoteStillThere) + //clicked->setSelected(true); + unselectAllBut(clicked); + } + } + + + if (event->stateAfter() == 0 && (zone == Note::Group || zone == Note::Handle)) { + closeEditor(); + unselectAllBut(clicked); + } + + + // Do nothing if an action has already been made during mousePressEvent, + // or if user made a selection and canceled it by regressing to a very small rectangle. + if (m_noActionOnMouseRelease) + return; + // We immediatly set it to true, to avoid actions set on mouseRelease if NO mousePress event has been triggered. + // This is the case when a popup menu is shown, and user click to the basket area to close it: + // the menu then receive the mousePress event and the basket area ONLY receive the mouseRelease event. + // Obviously, nothing should be done in this case: + m_noActionOnMouseRelease = true; + + + + if (event->button() == Qt::MidButton && zone != Note::Resizer && (!isDuringEdit() || clicked != editedNote())) { + if ((Settings::middleAction() != 0) && (event->stateAfter() == Qt::ShiftButton)) { + m_clickedToInsert = clicked; + m_zoneToInsert = zone; + m_posToInsert = event->pos(); + closeEditor(); + removeInserter(); // If clicked at an insertion line and the new note shows a dialog for editing, + NoteType::Id type = (NoteType::Id)0; // hide that inserter before the note edition instead of after the dialog is closed + switch (Settings::middleAction()) { + case 5: type = NoteType::Color; break; + case 6: + Global::bnpView->grabScreenshot(); + return; + case 7: + Global::bnpView->slotColorFromScreen(); + return; + case 8: + Global::bnpView->insertWizard(3); // loadFromFile + return; + case 9: + Global::bnpView->insertWizard(1); // importKMenuLauncher + return; + case 10: + Global::bnpView->insertWizard(2); // importIcon + return; + } + if (type != 0) { + m_ignoreCloseEditorOnNextMouseRelease = true; + Global::bnpView->insertEmpty(type); + return; + } + } + } + +// Note *clicked = noteAt(event->pos().x(), event->pos().y()); + if ( ! clicked ) { + if (isFreeLayout() && event->button() == Qt::LeftButton) { + clickedToInsert(event); + save(); + } + return; + } +// Note::Zone zone = clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()) ); + + // Convenient variables: + bool controlPressed = event->stateAfter() & Qt::ControlButton; + bool shiftPressed = event->stateAfter() & Qt::ShiftButton; + + if (clicked && zone != Note::None && zone != Note::BottomColumn && zone != Note::Resizer && (controlPressed || shiftPressed)) { + if (controlPressed && shiftPressed) + selectRange(m_startOfShiftSelectionNote, clicked, /*unselectOthers=*/false); + else if (shiftPressed) + selectRange(m_startOfShiftSelectionNote, clicked); + else if (controlPressed) + clicked->setSelectedRecursivly(!clicked->allSelected()); + setFocusedNote(clicked); /// /// /// + m_startOfShiftSelectionNote = (clicked->isGroup() ? clicked->firstRealChild() : clicked); + m_noActionOnMouseRelease = true; + return; + } + + // Switch tag states: + if (zone >= Note::Emblem0) { + if (event->button() == Qt::LeftButton) { + int icons = -1; + for (State::List::iterator it = clicked->states().begin(); it != clicked->states().end(); ++it) { + if ( ! (*it)->emblem().isEmpty() ) + icons++; + if (icons == zone - Note::Emblem0) { + State *state = (*it)->nextState(); + if (!state) + return; + it = clicked->states().insert(it, state); + ++it; + clicked->states().remove(it); + clicked->recomputeStyle(); + clicked->unbufferize(); + updateNote(clicked); + updateEditorAppearance(); + filterAgain(); + save(); + break; + } + } + return; + }/* else if (event->button() == Qt::RightButton) { + popupEmblemMenu(clicked, zone - Note::Emblem0); + return; + }*/ + } + + // Insert note or past clipboard: + QString text; +// Note *note; + QString link; + //int zone = zone; + if (event->button() == Qt::MidButton && zone == Note::Resizer) + return; //zone = clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()), true ); + if (event->button() == Qt::RightButton && (clicked->isColumn() || zone == Note::Resizer)) + return; + if (clicked->isGroup() && zone == Note::None) + return; + switch (zone) { + case Note::Handle: + case Note::Group: + // We select note on mousePress if it was unselected or Ctrl is pressed. + // But the user can want to drag select_s_ notes, so it the note is selected, we only select it alone on mouseRelease: + if (event->stateAfter() == 0) { + std::cout << "EXEC" << std::endl; + if ( !(event->stateAfter() & Qt::ControlButton) && clicked->allSelected()) + unselectAllBut(clicked); + if (zone == Note::Handle && isDuringEdit() && editedNote() == clicked) { + closeEditor(); + clicked->setSelected(true); + } + } + break; + + case Note::Custom0: + //unselectAllBut(clicked); + setFocusedNote(clicked); + noteOpen(clicked); + break; + + case Note::GroupExpander: + case Note::TagsArrow: + break; + + case Note::Link: + link = clicked->linkAt(event->pos() - QPoint(clicked->x(), clicked->y())); + if ( ! link.isEmpty() ) { + if (link == "basket-internal-remove-basket") { + // TODO: ask confirmation: "Do you really want to delete the welcome baskets?\n You can re-add them at any time in the Help menu." + Global::bnpView->doBasketDeletion(this); + } else if (link == "basket-internal-import") { + QPopupMenu *menu = Global::bnpView->popupMenu("fileimport"); + menu->exec(event->globalPos()); + } else { + KRun *run = new KRun(link); // open the URL. + run->setAutoDelete(true); + } + break; + } // If there is no link, edit note content + case Note::Content: + closeEditor(); + unselectAllBut(clicked); + noteEdit(clicked, /*justAdded=*/false, event->pos()); + break; + + case Note::TopInsert: + case Note::TopGroup: + case Note::BottomInsert: + case Note::BottomGroup: + case Note::BottomColumn: + clickedToInsert(event, clicked, zone); + save(); + break; + + case Note::None: + default: + KMessageBox::information(viewport(), + i18n("This message should never appear. If it does, this program is buggy! " + "Please report the bug to the developer.")); + break; + } +} + +void Basket::contentsMouseDoubleClickEvent(QMouseEvent *event) +{ + Note *clicked = noteAt(event->pos().x(), event->pos().y()); + Note::Zone zone = (clicked ? clicked->zoneAt( event->pos() - QPoint(clicked->x(), clicked->y()) ) : Note::None); + + if (event->button() == Qt::LeftButton && (zone == Note::Group || zone == Note::Handle)) { + doCopy(CopyToSelection); + m_noActionOnMouseRelease = true; + } else + contentsMousePressEvent(event); +} + +void Basket::contentsMouseMoveEvent(QMouseEvent *event) +{ + // Drag the notes: + if (m_canDrag && (m_pressPos - event->pos()).manhattanLength() > KApplication::startDragDistance()) { + m_canDrag = false; + m_isSelecting = false; // Don't draw selection rectangle ater drag! + m_selectionStarted = false; + NoteSelection *selection = selectedNotes(); + if (selection->firstStacked()) { + QDragObject *d = NoteDrag::dragObject(selection, /*cutting=*/false, /*source=*/this); // d will be deleted by QT + /*bool shouldRemove = */d->drag(); +// delete selection; + + // Never delete because URL is dragged and the file must be available for the extern appliation +// if (shouldRemove && d->target() == 0) // If target is another application that request to remove the note +// emit wantDelete(this); + } + return; + } + + // Moving a Resizer: + if (m_resizingNote) { + int groupWidth = event->pos().x() - m_resizingNote->x() - m_pickedResizer; + int minRight = m_resizingNote->minRight(); + int maxRight = 100 * contentsWidth(); // A big enough value (+infinity) for free layouts. + Note *nextColumn = m_resizingNote->next(); + if (m_resizingNote->isColumn()) { + if (nextColumn) + maxRight = nextColumn->x() + nextColumn->rightLimit() - nextColumn->minRight() - Note::RESIZER_WIDTH; + else + maxRight = contentsWidth(); + } + if (groupWidth > maxRight - m_resizingNote->x()) + groupWidth = maxRight - m_resizingNote->x(); + if (groupWidth < minRight - m_resizingNote->x()) + groupWidth = minRight - m_resizingNote->x(); + int delta = groupWidth - m_resizingNote->groupWidth(); + m_resizingNote->setGroupWidth(groupWidth); + // If resizing columns: + if (m_resizingNote->isColumn()) { + Note *column = m_resizingNote; + if ( (column = column->next()) ) { + // Next columns should not have them X coordinate animated, because it would flicker: + column->setXRecursivly(column->x() + delta); + // And the resizer should resize the TWO sibling columns, and not push the other columns on th right: + column->setGroupWidth(column->groupWidth() - delta); + } + } + relayoutNotes(true); + } + + // Moving a Note: +/* if (m_movingNote) { + int x = event->pos().x() - m_pickedHandle.x(); + int y = event->pos().y() - m_pickedHandle.y(); + if (x < 0) x = 0; + if (y < 0) y = 0; + m_movingNote->setX(x); + m_movingNote->setY(y); + m_movingNote->relayoutAt(x, y, / *animate=* /false); + relayoutNotes(true); + } +*/ + + // Dragging the selection rectangle: + if (m_selectionStarted) + doAutoScrollSelection(); + + doHoverEffects(event->pos()); +} + +void Basket::doAutoScrollSelection() +{ + static const int AUTO_SCROLL_MARGIN = 50; // pixels + static const int AUTO_SCROLL_DELAY = 100; // milliseconds + + QPoint pos = viewport()->mapFromGlobal(QCursor::pos()); + + // Do the selection: + + if (m_isSelecting) + updateContents(m_selectionRect); + + m_selectionEndPoint = viewportToContents(pos); + m_selectionRect = QRect(m_selectionBeginPoint, m_selectionEndPoint).normalize(); + if (m_selectionRect.left() < 0) m_selectionRect.setLeft(0); + if (m_selectionRect.top() < 0) m_selectionRect.setTop(0); + if (m_selectionRect.right() >= contentsWidth()) m_selectionRect.setRight(contentsWidth() - 1); + if (m_selectionRect.bottom() >= contentsHeight()) m_selectionRect.setBottom(contentsHeight() - 1); + + if ( (m_selectionBeginPoint - m_selectionEndPoint).manhattanLength() > QApplication::startDragDistance() ) { + m_isSelecting = true; + selectNotesIn(m_selectionRect, m_selectionInvert); + updateContents(m_selectionRect); + m_noActionOnMouseRelease = true; + } else { + // If the user was selecting but cancel by making the rectangle too small, cancel it really!!! + if (m_isSelecting) { + if (m_selectionInvert) + selectNotesIn(QRect(), m_selectionInvert); + else + unselectAllBut(0); // TODO: unselectAll(); + } + if (m_isSelecting) + resetWasInLastSelectionRect(); + m_isSelecting = false; + stopAutoScrollSelection(); + return; + } + + // Do the auto-scrolling: + // FIXME: It's still flickering + + QRect insideRect(AUTO_SCROLL_MARGIN, AUTO_SCROLL_MARGIN, visibleWidth() - 2*AUTO_SCROLL_MARGIN, visibleHeight() - 2*AUTO_SCROLL_MARGIN); + + int dx = 0; + int dy = 0; + + if (pos.y() < AUTO_SCROLL_MARGIN) + dy = pos.y() - AUTO_SCROLL_MARGIN; + else if (pos.y() > visibleHeight() - AUTO_SCROLL_MARGIN) + dy = pos.y() - visibleHeight() + AUTO_SCROLL_MARGIN; + + if (pos.x() < AUTO_SCROLL_MARGIN) + dx = pos.x() - AUTO_SCROLL_MARGIN; + else if (pos.x() > visibleWidth() - AUTO_SCROLL_MARGIN) + dx = pos.x() - visibleWidth() + AUTO_SCROLL_MARGIN; + + if (dx || dy) { + kapp->sendPostedEvents(); // Do the repaints, because the scrolling will make the area to repaint to be wrong + scrollBy(dx, dy); + if (!m_autoScrollSelectionTimer.isActive()) + m_autoScrollSelectionTimer.start(AUTO_SCROLL_DELAY); + } else + stopAutoScrollSelection(); +} + +void Basket::stopAutoScrollSelection() +{ + m_autoScrollSelectionTimer.stop(); +} + +void Basket::resetWasInLastSelectionRect() +{ + Note *note = m_firstNote; + while (note) { + note->resetWasInLastSelectionRect(); + note = note->next(); + } +} + +void Basket::selectAll() +{ + if (redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->selectAll(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->selectAll(); + } else { + // First select all in the group, then in the parent group... + Note *child = m_focusedNote; + Note *parent = (m_focusedNote ? m_focusedNote->parentNote() : 0); + while (parent) { + if (!parent->allSelected()) { + parent->setSelectedRecursivly(true); + return; + } + child = parent; + parent = parent->parentNote(); + } + // Then, select all: + FOR_EACH_NOTE (note) + note->setSelectedRecursivly(true); + } +} + +void Basket::unselectAll() +{ + if (redirectEditActions()) { + if (m_editor->textEdit()) { + m_editor->textEdit()->removeSelection(); + selectionChangedInEditor(); // THIS IS NOT EMITED BY Qt!!! + } else if (m_editor->lineEdit()) + m_editor->lineEdit()->deselect(); + } else { + if (countSelecteds() > 0) // Optimisation + FOR_EACH_NOTE (note) + note->setSelectedRecursivly(false); + } +} + +void Basket::invertSelection() +{ + FOR_EACH_NOTE (note) + note->invertSelectionRecursivly(); +} + +void Basket::unselectAllBut(Note *toSelect) +{ + FOR_EACH_NOTE (note) + note->unselectAllBut(toSelect); +} + +void Basket::invertSelectionOf(Note *toSelect) +{ + FOR_EACH_NOTE (note) + note->invertSelectionOf(toSelect); +} + +void Basket::selectNotesIn(const QRect &rect, bool invertSelection, bool unselectOthers /*= true*/) +{ + FOR_EACH_NOTE (note) + note->selectIn(rect, invertSelection, unselectOthers); +} + +void Basket::doHoverEffects() +{ + doHoverEffects( viewportToContents( viewport()->mapFromGlobal(QCursor::pos()) ) ); +} + +void Basket::doHoverEffects(Note *note, Note::Zone zone, const QPoint &pos) +{ + // Inform the old and new hovered note (if any): + Note *oldHoveredNote = m_hoveredNote; + if (note != m_hoveredNote) { + if (m_hoveredNote) { + m_hoveredNote->setHovered(false); + m_hoveredNote->setHoveredZone(Note::None); + updateNote(m_hoveredNote); + } + m_hoveredNote = note; + if (note) + note->setHovered(true); + } + + // If we are hovering a note, compute which zone is hovered and inform the note: + if (m_hoveredNote) { + if (zone != m_hoveredZone || oldHoveredNote != m_hoveredNote) { + m_hoveredZone = zone; + m_hoveredNote->setCursor(zone); + updateNote(m_hoveredNote); + } + m_hoveredNote->setHoveredZone(zone); + // If we are hovering an insert line zone, update this thing: + if (zone == Note::TopInsert || zone == Note::TopGroup || zone == Note::BottomInsert || zone == Note::BottomGroup || zone == Note::BottomColumn) + placeInserter(m_hoveredNote, zone); + else + removeInserter(); + // If we are hovering an embedded link in a rich text element, show the destination in the statusbar: + if (zone == Note::Link) + emit setStatusBarText(m_hoveredNote->linkAt( pos - QPoint(m_hoveredNote->x(), m_hoveredNote->y()) )); + else if (m_hoveredNote->content()) + emit setStatusBarText(m_hoveredNote->content()->statusBarMessage(m_hoveredZone));//resetStatusBarText(); + // If we aren't hovering a note, reset all: + } else { + if (isFreeLayout() && !isSelecting()) + viewport()->setCursor(Qt::CrossCursor); + else + viewport()->unsetCursor(); + m_hoveredZone = Note::None; + removeInserter(); + emit resetStatusBarText(); + } +} + +void Basket::doHoverEffects(const QPoint &pos) +{ +// if (isDuringEdit()) +// viewport()->unsetCursor(); + + // Do we have the right to do hover effects? + if ( ! m_loaded || m_lockedHovering) + return; + + // enterEvent() (mouse enter in the widget) set m_underMouse to true, and leaveEvent() make it false. + // But some times the enterEvent() is not trigerred: eg. when dragging the scrollbar: + // Ending the drag INSIDE the basket area will make NO hoverEffects() because m_underMouse is false. + // User need to leave the area and re-enter it to get effects. + // This hack solve that by dismissing the m_underMouse variable: + bool underMouse = Global::bnpView->currentBasket() == this && QRect(contentsX(), contentsY(), visibleWidth(), visibleHeight()).contains(pos); + + // Don't do hover effects when a popup menu is opened. + // Primarily because the basket area will only receive mouseEnterEvent and mouveLeaveEvent. + // It willn't be noticed of mouseMoveEvent, which would result in a apparently broken application state: + if (kapp->activePopupWidget()) + underMouse = false; + + // Compute which note is hovered: + Note *note = (m_isSelecting || !underMouse ? 0 : noteAt(pos.x(), pos.y())); + Note::Zone zone = (note ? note->zoneAt( pos - QPoint(note->x(), note->y()), isDuringDrag() ) : Note::None); + + // Inform the old and new hovered note (if any) and update the areas: + doHoverEffects(note, zone, pos); +} + +void Basket::mouseEnteredEditorWidget() +{ + if (!m_lockedHovering && !kapp->activePopupWidget()) + doHoverEffects(editedNote(), Note::Content, QPoint()); +} + +void Basket::removeInserter() +{ + if (m_inserterShown) { // Do not hide (and then update/repaint the view) if it is already hidden! + m_inserterShown = false; + updateContents(m_inserterRect); + } +} + +void Basket::placeInserter(Note *note, int zone) +{ + // Remove the inserter: + if (!note) { + removeInserter(); + return; + } + + // Update the old position: + if (inserterShown()) + updateContents(m_inserterRect); + // Some comodities: + m_inserterShown = true; + m_inserterTop = (zone == Note::TopGroup || zone == Note::TopInsert); + m_inserterGroup = (zone == Note::TopGroup || zone == Note::BottomGroup); + // X and width: + int groupIndent = (note->isGroup() ? note->width() : Note::HANDLE_WIDTH); + int x = note->x(); + int width = (note->isGroup() ? note->rightLimit() - note->x() : note->width()); + if (m_inserterGroup) { + x += groupIndent; + width -= groupIndent; + } + m_inserterSplit = (Settings::groupOnInsertionLine() && note && !note->isGroup() && !note->isFree() && !note->isColumn()); +// if (note->isGroup()) +// width = note->rightLimit() - note->x() - (m_inserterGroup ? groupIndent : 0); + // Y: + int y = note->y() - (m_inserterGroup && m_inserterTop ? 1 : 3); + if (!m_inserterTop) + y += (note->isColumn() ? note->finalHeight() : note->height()); + // Assigning result: + m_inserterRect = QRect(x, y, width, 6 - (m_inserterGroup ? 2 : 0)); + // Update the new position: + updateContents(m_inserterRect); +} + +inline void drawLineByRect(QPainter &painter, int x, int y, int width, int height) +{ + painter.drawLine(x, y, x + width - 1, y + height - 1); +} + +void Basket::drawInserter(QPainter &painter, int xPainter, int yPainter) +{ + if (!m_inserterShown) + return; + + QRect rect = m_inserterRect; // For shorter code-lines when drawing! + rect.moveBy(-xPainter, -yPainter); + int lineY = (m_inserterGroup && m_inserterTop ? 0 : 2); + int roundY = (m_inserterGroup && m_inserterTop ? 0 : 1); + + QColor dark = KApplication::palette().active().dark(); + QColor light = dark.light().light(); + if (m_inserterGroup && Settings::groupOnInsertionLine()) + light = Tools::mixColor(light, KGlobalSettings::highlightColor()); + painter.setPen(dark); + // The horizontal line: + //painter.drawRect( rect.x(), rect.y() + lineY, rect.width(), 2); + int width = rect.width() - 4; + drawGradient(&painter, dark, light, rect.x() + 2, rect.y() + lineY, width/2, 2, /*sunken=*/false, /*horz=*/false, /*flat=*/false); + drawGradient(&painter, light, dark, rect.x() + 2 + width/2, rect.y() + lineY, width - width/2, 2, /*sunken=*/false, /*horz=*/false, /*flat=*/false); + // The left-most and right-most edges (biggest vertical lines): + drawLineByRect(painter, rect.x(), rect.y(), 1, (m_inserterGroup ? 4 : 6)); + drawLineByRect(painter, rect.x() + rect.width() - 1, rect.y(), 1, (m_inserterGroup ? 4 : 6)); + // The left and right mid vertical lines: + drawLineByRect(painter, rect.x() + 1, rect.y() + roundY, 1, (m_inserterGroup ? 3 : 4)); + drawLineByRect(painter, rect.x() + rect.width() - 2, rect.y() + roundY, 1, (m_inserterGroup ? 3 : 4)); + // Draw the split as a feedback to know where is the limit between insert and group: + if (m_inserterSplit) { + int noteWidth = rect.width() + (m_inserterGroup ? Note::HANDLE_WIDTH : 0); + int xSplit = rect.x() - (m_inserterGroup ? Note::HANDLE_WIDTH : 0) + noteWidth / 2; + painter.setPen(Tools::mixColor(dark, light)); + painter.drawRect(xSplit - 2, rect.y() + lineY, 4, 2); + painter.setPen(dark); + painter.drawRect(xSplit - 1, rect.y() + lineY, 2, 2); + } +} + +void Basket::maybeTip(const QPoint &pos) +{ + if ( !m_loaded || !Settings::showNotesToolTip() ) + return; + + QString message; + QRect rect; + + QPoint contentPos = viewportToContents(pos); + Note *note = noteAt(contentPos.x(), contentPos.y()); + + if (!note && isFreeLayout()) { + message = i18n("Insert note here\nRight click for more options"); + QRect itRect; + for (QValueList::iterator it = m_blankAreas.begin(); it != m_blankAreas.end(); ++it) { + itRect = QRect(0, 0, visibleWidth(), visibleHeight()).intersect(*it); + if (itRect.contains(contentPos)) { + rect = itRect; + rect.moveLeft(rect.left() - contentsX()); + rect.moveTop( rect.top() - contentsY()); + break; + } + } + } else { + if (!note) + return; + + Note::Zone zone = note->zoneAt( contentPos - QPoint(note->x(), note->y()) ); + switch (zone) { + case Note::Resizer: message = (note->isColumn() ? + i18n("Resize those columns") : + (note->isGroup() ? + i18n("Resize this group") : + i18n("Resize this note"))); break; + case Note::Handle: message = i18n("Select or move this note"); break; + case Note::Group: message = i18n("Select or move this group"); break; + case Note::TagsArrow: message = i18n("Assign or remove tags from this note"); + if (note->states().count() > 0) { + message = "" + message + "
      " + i18n("Assigned Tags: %1"); + QString tagsString = ""; + for (State::List::iterator it = note->states().begin(); it != note->states().end(); ++it) { + QString tagName = "" + Tools::textToHTMLWithoutP((*it)->fullName()) + ""; + if (tagsString.isEmpty()) + tagsString = tagName; + else + tagsString = i18n("%1, %2").arg(tagsString, tagName); + } + message = message.arg(tagsString); + } + break; + case Note::Custom0: message = note->content()->zoneTip(zone); break; //"Open this link/Open this file/Open this sound file/Launch this application" + case Note::GroupExpander: message = (note->isFolded() ? + i18n("Expand this group") : + i18n("Collapse this group")); break; + case Note::Link: + case Note::Content: message = note->content()->editToolTipText(); break; + case Note::TopInsert: + case Note::BottomInsert: message = i18n("Insert note here\nRight click for more options"); break; + case Note::TopGroup: message = i18n("Group note with the one below\nRight click for more options"); break; + case Note::BottomGroup: message = i18n("Group note with the one above\nRight click for more options"); break; + case Note::BottomColumn: message = i18n("Insert note here\nRight click for more options"); break; + case Note::None: message = "** Zone NONE: internal error **"; break; + default: + if (zone >= Note::Emblem0) + message = note->stateForEmblemNumber(zone - Note::Emblem0)->fullName(); + else + message = ""; + break; + } + + if (zone == Note::Content || zone == Note::Link || zone == Note::Custom0) { + QStringList keys; + QStringList values; + + note->content()->toolTipInfos(&keys, &values); + keys.append(i18n("Added")); + keys.append(i18n("Last Modification")); + values.append(note->addedStringDate()); + values.append(note->lastModificationStringDate()); + + message = "" + message; + QStringList::iterator key; + QStringList::iterator value; + for (key = keys.begin(), value = values.begin(); key != keys.end() && value != values.end(); ++key, ++value) + message += "
      " + i18n("of the form 'key: value'", "%1: %2").arg(*key, *value); + message += "
      "; + } else if (m_inserterSplit && (zone == Note::TopInsert || zone == Note::BottomInsert)) + message += "\n" + i18n("Click on the right to group instead of insert"); + else if (m_inserterSplit && (zone == Note::TopGroup || zone == Note::BottomGroup)) + message += "\n" + i18n("Click on the left to insert instead of group"); + + rect = note->zoneRect( zone, contentPos - QPoint(note->x(), note->y()) ); + + rect.moveLeft(rect.left() - contentsX()); + rect.moveTop( rect.top() - contentsY()); + + rect.moveLeft(rect.left() + note->x()); + rect.moveTop( rect.top() + note->y()); + } + + tip(rect, message); +} + +Note* Basket::lastNote() +{ + Note *note = firstNote(); + while (note && note->next()) + note = note->next(); + return note; +} + +void Basket::deleteNotes() +{ + Note *note = m_firstNote; + + while (note){ + Note *tmp = note->next(); + delete note; + note = tmp; + } + m_firstNote = 0; + m_resizingNote = 0; + m_movingNote = 0; + m_focusedNote = 0; + m_startOfShiftSelectionNote = 0; + m_tagPopupNote = 0; + m_clickedToInsert = 0; + m_savedClickedToInsert = 0; + m_hoveredNote = 0; + m_count = 0; + m_countFounds = 0; + m_countSelecteds = 0; + + emit resetStatusBarText(); + emit countsChanged(this); +} + +Note* Basket::noteAt(int x, int y) +{ +//NO: +// // Do NOT check the bottom&right borders. +// // Because imagine someone drag&drop a big note from the top to the bottom of a big basket (with big vertical scrollbars), +// // the note is first removed, and relayoutNotes() compute the new height that is smaller +// // Then noteAt() is called for the mouse pointer position, because the basket is now smaller, the cursor is out of boundaries!!! +// // Should, of course, not return 0: + if (x < 0 || x > contentsWidth() || y < 0 || y > contentsHeight()) + return 0; + + // When resizing a note/group, keep it highlighted: + if (m_resizingNote) + return m_resizingNote; + + // Search and return the hovered note: + Note *note = m_firstNote; + Note *possibleNote; + while (note) { + possibleNote = note->noteAt(x, y); + if (possibleNote) { + if (draggedNotes().contains(possibleNote)) + return 0; + else + return possibleNote; + } + note = note->next(); + } + + // If the basket is layouted in columns, return one of the columns to be able to add notes in them: + if (isColumnsLayout()) { + Note *column = m_firstNote; + while (column) { + if (x >= column->x() && x < column->rightLimit()) + return column; + column = column->next(); + } + } + + // Nothing found, no note is hovered: + return NULL; +} + +Basket::~Basket() +{ + //delete m_action; + if(m_decryptBox) + delete m_decryptBox; +#ifdef HAVE_LIBGPGME + delete m_gpg; +#endif + deleteNotes(); +} + +void Basket::viewportResizeEvent(QResizeEvent *event) +{ + relayoutNotes(true); + //cornerWidget()->setShown(horizontalScrollBar()->isShown() && verticalScrollBar()->isShown()); + if (horizontalScrollBar()->isShown() && verticalScrollBar()->isShown()) { + if (!cornerWidget()) + setCornerWidget(m_cornerWidget); + } else { + if (cornerWidget()) + setCornerWidget(0); + } +// if (isDuringEdit()) +// ensureNoteVisible(editedNote()); + QScrollView::viewportResizeEvent(event); +} + +void Basket::animateLoad() +{ + const int viewHeight = contentsY() + visibleHeight(); + + QTime t = QTime::currentTime(); // Set random seed + srand(t.hour()*12 + t.minute()*60 + t.second()*60); + + Note *note = firstNote(); + while (note) { + if ((note->finalY() < viewHeight) && note->matching()) + note->initAnimationLoad(); + note = note->next(); + } + + m_loaded = true; +} + +QColor Basket::selectionRectInsideColor() +{ + return Tools::mixColor(Tools::mixColor(backgroundColor(), KGlobalSettings::highlightColor()), backgroundColor()); +} + +QColor alphaBlendColors(const QColor &bgColor, const QColor &fgColor, const int a) +{ + // normal button... + QRgb rgb = bgColor.rgb(); + QRgb rgb_b = fgColor.rgb(); + int alpha = a; + if (alpha>255) alpha = 255; + if (alpha<0) alpha = 0; + int inv_alpha = 255 - alpha; + QColor result = QColor( qRgb(qRed(rgb_b)*inv_alpha/255 + qRed(rgb)*alpha/255, + qGreen(rgb_b)*inv_alpha/255 + qGreen(rgb)*alpha/255, + qBlue(rgb_b)*inv_alpha/255 + qBlue(rgb)*alpha/255) ); + + return result; +} + +void Basket::unlock() +{ + QTimer::singleShot( 0, this, SLOT(load()) ); +} + +void Basket::inactivityAutoLockTimeout() +{ + lock(); +} + +void Basket::drawContents(QPainter *painter, int clipX, int clipY, int clipWidth, int clipHeight) +{ + // Start the load the first time the basket is shown: + if (!m_loadingLaunched) + { + if(!m_locked) + QTimer::singleShot( 0, this, SLOT(load()) ); + else { + Global::bnpView->notesStateChanged(); // Show "Locked" instead of "Loading..." in the statusbar + } + } + + QBrush brush(backgroundColor()); // FIXME: share it for all the basket? + QRect clipRect(clipX, clipY, clipWidth, clipHeight); + + if(m_locked) + { + if(!m_decryptBox) + { + m_decryptBox = new QFrame( this, "m_decryptBox" ); + m_decryptBox->setFrameShape( QFrame::StyledPanel ); + m_decryptBox->setFrameShadow( QFrame::Plain ); + m_decryptBox->setLineWidth( 1 ); + + QGridLayout* layout = new QGridLayout( m_decryptBox, 1, 1, 11, 6, "decryptBoxLayout"); + +#ifdef HAVE_LIBGPGME + m_button = new QPushButton( m_decryptBox, "button" ); + m_button->setText( i18n( "&Unlock" ) ); + layout->addWidget( m_button, 1, 2 ); + connect( m_button, SIGNAL( clicked() ), this, SLOT( unlock() ) ); +#endif + QLabel* label = new QLabel( m_decryptBox, "label" ); + QString text = "" + i18n("Password protected basket.") + "
      "; +#ifdef HAVE_LIBGPGME + label->setText( text + i18n("Press Unlock to access it.") ); +#else + label->setText( text + i18n("Encryption is not supported by
      this version of %1.").arg(kapp->aboutData()->programName()) ); +#endif + label->setAlignment( int( QLabel::AlignTop ) ); + layout->addMultiCellWidget( label, 0, 0, 1, 2 ); + QLabel* pixmap = new QLabel( m_decryptBox, "pixmap" ); + pixmap->setPixmap( KGlobal::iconLoader()->loadIcon("encrypted", KIcon::NoGroup, KIcon::SizeHuge) ); + layout->addMultiCellWidget( pixmap, 0, 1, 0, 0 ); + + QSpacerItem* spacer = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + layout->addItem( spacer, 1, 1 ); + + label = new QLabel("" + + i18n("To make baskets stay unlocked, change the automatic
      " + "locking duration in the application settings.") + "
      ", + m_decryptBox); + //label->setFixedWidth(label->sizeHint().width() / 2); + label->setAlignment( int( QLabel::AlignTop ) ); + layout->addMultiCellWidget( label, 2,2,0,2 ); + + m_decryptBox->resize(layout->sizeHint()); + } + if(m_decryptBox->isHidden()) + { + m_decryptBox->show(); + } +#ifdef HAVE_LIBGPGME + m_button->setFocus(); +#endif + m_decryptBox->move((visibleWidth() - m_decryptBox->width()) / 2, + (visibleHeight() - m_decryptBox->height()) / 2); + } + else + { + if(m_decryptBox && m_decryptBox->isShown()) + m_decryptBox->hide(); + } + + // Draw notes (but not when it's not loaded or locked yet): + Note *note = ((m_loaded || m_locked) ? m_firstNote : 0); + while (note) { + note->draw(painter, clipRect); + note = note->next(); + } + enableActions(); + + // Draw loading message: + if (!m_loaded) { + QPixmap pixmap(visibleWidth(), visibleHeight()); // TODO: Clip it to asked size only! + QPainter painter2(&pixmap); + QSimpleRichText rt(QString("

      %1
      ").arg(i18n("Loading...")), QScrollView::font()); + rt.setWidth(visibleWidth()); + int hrt = rt.height(); + painter2.fillRect(0, 0, visibleWidth(), visibleHeight(), brush); + blendBackground(painter2, QRect(0, 0, visibleWidth(), visibleHeight()), -1, -1, /*opaque=*/true); + QColorGroup cg = colorGroup(); + cg.setColor(QColorGroup::Text, textColor()); + rt.draw(&painter2, 0, (visibleHeight() - hrt) / 2, QRect(), cg); + painter2.end(); + painter->drawPixmap(0, 0, pixmap); + return; // TODO: Clip to the wanted rectangle + } + + // We will draw blank areas below. + // For each rectangle to be draw there is three ways to do so: + // - The rectangle is full of the background COLOR => we fill a rect directly on screen + // - The rectangle is full of the background PIXMAP => we draw it directly on screen (we draw m_opaqueBackgroundPixmap that is not transparent) + // - The rectangle contains the resizer => We draw it on an offscreen buffer and then paint the buffer on screen + // If the background image is not tiled, we know that recomputeBlankRects() broken rects so that they are full of either background pixmap or color, but not a mix. + + // Draw blank areas (see the last preparation above): + QPixmap pixmap; + QPainter painter2; + QRect rect; + for (QValueList::iterator it = m_blankAreas.begin(); it != m_blankAreas.end(); ++it) { + rect = clipRect.intersect(*it); + if (rect.width() > 0 && rect.height() > 0) { + // If there is an inserter to draw, draw the image off screen, + // apply the inserter and then draw the image on screen: + if ( (inserterShown() && rect.intersects(inserterRect())) || (m_isSelecting && rect.intersects(m_selectionRect)) ) { + pixmap.resize(rect.width(), rect.height()); + painter2.begin(&pixmap); + painter2.fillRect(0, 0, rect.width(), rect.height(), backgroundColor()); + blendBackground(painter2, rect, -1, -1, /*opaque=*/true); + // Draw inserter: + if (inserterShown() && rect.intersects(inserterRect())) + drawInserter(painter2, rect.x(), rect.y()); + // Draw selection rect: + if (m_isSelecting && rect.intersects(m_selectionRect)) { + QRect selectionRect = m_selectionRect; + selectionRect.moveBy(-rect.x(), -rect.y()); + QRect selectionRectInside(selectionRect.x() + 1, selectionRect.y() + 1, selectionRect.width() - 2, selectionRect.height() - 2); + if (selectionRectInside.width() > 0 && selectionRectInside.height() > 0) { + QColor insideColor = selectionRectInsideColor(); + painter2.fillRect(selectionRectInside, insideColor); + selectionRectInside.moveBy(rect.x(), rect.y()); + blendBackground(painter2, selectionRectInside, rect.x(), rect.y(), true, /*&*/m_selectedBackgroundPixmap); + } + painter2.setPen(KGlobalSettings::highlightColor().dark()); + painter2.drawRect(selectionRect); + painter2.setPen(Tools::mixColor(KGlobalSettings::highlightColor().dark(), backgroundColor())); + painter2.drawPoint(selectionRect.topLeft()); + painter2.drawPoint(selectionRect.topRight()); + painter2.drawPoint(selectionRect.bottomLeft()); + painter2.drawPoint(selectionRect.bottomRight()); + } + painter2.end(); + painter->drawPixmap(rect.x(), rect.y(), pixmap); + // If it's only a blank rectangle to draw, draw it directly on screen (faster!!!): + } else if ( ! hasBackgroundImage() ) { + painter->fillRect(rect, backgroundColor()); + // It's either a background pixmap to draw or a background color to fill: + } else { + if (isTiledBackground() || (rect.x() < backgroundPixmap()->width() && rect.y() < backgroundPixmap()->height())) + blendBackground(*painter, rect, 0, 0, /*opaque=*/true); + else + painter->fillRect(rect, backgroundColor()); + } + } + } +} + +/* rect(x,y,width,height)==(xBackgroundToDraw,yBackgroundToDraw,widthToDraw,heightToDraw) + */ +void Basket::blendBackground(QPainter &painter, const QRect &rect, int xPainter, int yPainter, bool opaque, QPixmap *bg) +{ + if (xPainter == -1 && yPainter == -1) { + xPainter = rect.x(); + yPainter = rect.y(); + } + + if (hasBackgroundImage()) { + const QPixmap *bgPixmap = (bg ? /* * */bg : (opaque ? m_opaqueBackgroundPixmap : m_backgroundPixmap)); + if (isTiledBackground()) + painter.drawTiledPixmap(rect.x() - xPainter, rect.y() - yPainter, rect.width(), rect.height(), *bgPixmap, rect.x(), rect.y()); + else + painter.drawPixmap(rect.x() - xPainter, rect.y() - yPainter, *bgPixmap, rect.x(), rect.y(), rect.width(), rect.height()); + } +} + +void Basket::recomputeBlankRects() +{ + m_blankAreas.clear(); + m_blankAreas.append( QRect(0, 0, contentsWidth(), contentsHeight()) ); + + FOR_EACH_NOTE (note) + note->recomputeBlankRects(m_blankAreas); + + // See the drawing of blank areas in Basket::drawContents() + if (hasBackgroundImage() && ! isTiledBackground()) + substractRectOnAreas( QRect(0, 0, backgroundPixmap()->width(), backgroundPixmap()->height()), m_blankAreas, false ); +} + +void Basket::addAnimatedNote(Note *note) +{ + if (m_animatedNotes.isEmpty()) { + m_animationTimer.start(FRAME_DELAY); + m_lastFrameTime = QTime::currentTime(); + } + + m_animatedNotes.append(note); +} + +void Basket::unsetNotesWidth() +{ + Note *note = m_firstNote; + while (note) { + note->unsetWidth(); + note = note->next(); + } +} + +void Basket::relayoutNotes(bool animate) +{ + if (Global::bnpView->currentBasket() != this) + return; // Optimize load time, and basket will be relaid out when activated, anyway + + if (!Settings::playAnimations()) + animate = false; + + if (!animate) { + m_animatedNotes.clear(); + m_animationTimer.stop(); + } + + int h = 0; + tmpWidth = 0; + tmpHeight = 0; + Note *note = m_firstNote; + while (note) { + if (note->matching()) { + note->relayoutAt(0, h, animate); + if (note->hasResizer()) { + int minGroupWidth = note->minRight() - note->finalX(); + if (note->groupWidth() < minGroupWidth) { + note->setGroupWidth(minGroupWidth); + relayoutNotes(animate); // Redo the thing, but this time it should not recurse + return; + } + } + h += note->finalHeight(); + } + note = note->next(); + } + + if (isFreeLayout()) + tmpHeight += 100; + else + tmpHeight += 15; + + resizeContents( QMAX(tmpWidth, visibleWidth()), QMAX(tmpHeight, visibleHeight()) ); + recomputeBlankRects(); + placeEditor(); + doHoverEffects(); + updateContents(); +} + +void Basket::updateNote(Note *note) +{ + updateContents(note->rect()); + if (note->hasResizer()) + updateContents(note->resizerRect()); +} + +void Basket::animateObjects() +{ + QValueList::iterator it; + for (it = m_animatedNotes.begin(); it != m_animatedNotes.end(); ) +// if ((*it)->y() >= contentsY() && (*it)->bottom() <= contentsY() + contentsWidth()) +// updateNote(*it); + if ((*it)->advance()) + it = m_animatedNotes.remove(it); + else { +// if ((*it)->y() >= contentsY() && (*it)->bottom() <= contentsY() + contentsWidth()) +// updateNote(*it); + ++it; + } + + if (m_animatedNotes.isEmpty()) { + // Stop animation timer: + m_animationTimer.stop(); + // Reset all onTop notes: + Note* note = m_firstNote; + while (note) { + note->setOnTop(false); + note = note->next(); + } + } + + if (m_focusedNote) + ensureNoteVisible(m_focusedNote); + + // We refresh content if it was the last frame, + // or if the drawing of the last frame was not too long. + if (!m_animationTimer.isActive() || (m_lastFrameTime.msecsTo(QTime::currentTime()) < FRAME_DELAY*11/10)) { // *11/10 == *1.1 : We keep a 0.1 security margin + m_lastFrameTime = m_lastFrameTime.addMSecs(FRAME_DELAY); // because timers are not accurate and can trigger late + //m_lastFrameTime = QTime::currentTime(); +//std::cout << ">>" << m_lastFrameTime.toString("hh:mm:ss.zzz") << std::endl; + if (m_underMouse) + doHoverEffects(); + recomputeBlankRects(); + //relayoutNotes(true); // In case an animated note was to the contents view boundaries, resize the view! + updateContents(); + // If the drawing of the last frame was too long, we skip the drawing of the current and do the next one: + } else { + m_lastFrameTime = m_lastFrameTime.addMSecs(FRAME_DELAY); +//std::cout << "+=" << m_lastFrameTime.toString("hh:mm:ss.zzz") << std::endl; + animateObjects(); + } + + doHoverEffects(); + placeEditor(); + +/* int delta = m_deltaY / 3; + if (delta == 0 && m_deltaY != 0) + delta = (m_deltaY > 0 ? 1 : -1); + m_deltaY -= delta; + resizeContents(contentsWidth(), contentsHeight() + delta); //m_lastNote->y() + m_lastNote->height() +*/ +} + +void Basket::popupEmblemMenu(Note *note, int emblemNumber) +{ + m_tagPopupNote = note; + State *state = note->stateForEmblemNumber(emblemNumber); + State *nextState = state->nextState(/*cycle=*/false); + Tag *tag = state->parentTag(); + m_tagPopup = tag; + + QKeySequence sequence = tag->shortcut().operator QKeySequence(); + bool sequenceOnDelete = (nextState == 0 && !tag->shortcut().isNull()); + + KPopupMenu menu(this); + if (tag->countStates() == 1) { + menu.insertTitle(/*SmallIcon(state->icon()), */tag->name()); + menu.insertItem( SmallIconSet("editdelete"), i18n("&Remove"), 1 ); + menu.insertItem( SmallIconSet("configure"), i18n("&Customize..."), 2 ); + menu.insertSeparator(); + menu.insertItem( SmallIconSet("filter"), i18n("&Filter by this Tag"), 3 ); + } else { + menu.insertTitle(tag->name()); + QValueList::iterator it; + State *currentState; + + int i = 10; + for (it = tag->states().begin(); it != tag->states().end(); ++it) { + currentState = *it; + QKeySequence sequence; + if (currentState == nextState && !tag->shortcut().isNull()) + sequence = tag->shortcut().operator QKeySequence(); + menu.insertItem(StateMenuItem::radioButtonIconSet(state == currentState, menu.colorGroup()), new StateMenuItem(currentState, sequence, false), i ); + if (currentState == nextState && !tag->shortcut().isNull()) + menu.setAccel(sequence, i); + ++i; + } + menu.insertSeparator(); + menu.insertItem( new IndentedMenuItem(i18n("&Remove"), "editdelete", (sequenceOnDelete ? sequence : QKeySequence())), 1 ); + menu.insertItem( new IndentedMenuItem(i18n("&Customize..."), "configure"), 2 ); + menu.insertSeparator(); + menu.insertItem( new IndentedMenuItem(i18n("&Filter by this Tag"), "filter"), 3 ); + menu.insertItem( new IndentedMenuItem(i18n("Filter by this &State"), "filter"), 4 ); + } + if (sequenceOnDelete) + menu.setAccel(sequence, 1); + + connect( &menu, SIGNAL(activated(int)), this, SLOT(toggledStateInMenu(int)) ); + connect( &menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); + connect( &menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + + m_lockedHovering = true; + menu.exec(QCursor::pos()); +} + +void Basket::toggledStateInMenu(int id) +{ + if (id == 1) { + removeTagFromSelectedNotes(m_tagPopup); + //m_tagPopupNote->removeTag(m_tagPopup); + //m_tagPopupNote->setWidth(0); // To force a new layout computation + updateEditorAppearance(); + filterAgain(); + save(); + return; + } + if (id == 2) { // Customize this State: + TagsEditDialog dialog(this, m_tagPopupNote->stateOfTag(m_tagPopup)); + dialog.exec(); + return; + } + if (id == 3) { // Filter by this Tag + decoration()->filterBar()->filterTag(m_tagPopup); + return; + } + if (id == 4) { // Filter by this State + decoration()->filterBar()->filterState(m_tagPopupNote->stateOfTag(m_tagPopup)); + return; + } + + /*addStateToSelectedNotes*/changeStateOfSelectedNotes(m_tagPopup->states()[id - 10] /*, orReplace=true*/); + //m_tagPopupNote->addState(m_tagPopup->states()[id - 10], true); + filterAgain(); + save(); +} + +State* Basket::stateForTagFromSelectedNotes(Tag *tag) +{ + State *state = 0; + + FOR_EACH_NOTE (note) + if (note->stateForTagFromSelectedNotes(tag, &state) && state == 0) + return 0; + return state; +} + +void Basket::activatedTagShortcut(Tag *tag) +{ + // Compute the next state to set: + State *state = stateForTagFromSelectedNotes(tag); + if (state) + state = state->nextState(/*cycle=*/false); + else + state = tag->states().first(); + + // Set or unset it: + if (state) { + FOR_EACH_NOTE (note) + note->addStateToSelectedNotes(state, /*orReplace=*/true); + updateEditorAppearance(); + } else + removeTagFromSelectedNotes(tag); + + filterAgain(); + save(); +} + +void Basket::popupTagsMenu(Note *note) +{ + m_tagPopupNote = note; + + KPopupMenu menu(this); + menu.insertTitle(i18n("Tags")); +// QValueList::iterator it; +// Tag *currentTag; +// State *currentState; +// int i = 10; +// for (it = Tag::all.begin(); it != Tag::all.end(); ++it) { +// // Current tag and first state of it: +// currentTag = *it; +// currentState = currentTag->states().first(); +// QKeySequence sequence; +// if (!currentTag->shortcut().isNull()) +// sequence = currentTag->shortcut().operator QKeySequence(); +// menu.insertItem(StateMenuItem::checkBoxIconSet(note->hasTag(currentTag), menu.colorGroup()), new StateMenuItem(currentState, sequence, true), i ); +// if (!currentTag->shortcut().isNull()) +// menu.setAccel(sequence, i); +// ++i; +// } +// +// menu.insertSeparator(); +// // menu.insertItem( /*SmallIconSet("editdelete"),*/ "&Assign New Tag...", 1 ); +// //id = menu.insertItem( SmallIconSet("editdelete"), "&Remove All", -2 ); +// //if (note->states().isEmpty()) +// // menu.setItemEnabled(id, false); +// // menu.insertItem( SmallIconSet("configure"), "&Customize...", 3 ); +// menu.insertItem( new IndentedMenuItem(i18n("&Assign New Tag...")), 1 ); +// menu.insertItem( new IndentedMenuItem(i18n("&Remove All"), "editdelete"), 2 ); +// menu.insertItem( new IndentedMenuItem(i18n("&Customize..."), "configure"), 3 ); +// +// if (!selectedNotesHaveTags())//note->states().isEmpty()) +// menu.setItemEnabled(2, false); +// +// connect( &menu, SIGNAL(activated(int)), this, SLOT(toggledTagInMenu(int)) ); +// connect( &menu, SIGNAL(aboutToHide()), this, SLOT(unlockHovering()) ); +// connect( &menu, SIGNAL(aboutToHide()), this, SLOT(disableNextClick()) ); + + Global::bnpView->populateTagsMenu(menu, note); + + m_lockedHovering = true; + menu.exec(QCursor::pos()); +} + +void Basket::unlockHovering() +{ + m_lockedHovering = false; + doHoverEffects(); +} + +void Basket::toggledTagInMenu(int id) +{ + if (id == 1) { // Assign new Tag... + TagsEditDialog dialog(this, /*stateToEdit=*/0, /*addNewTag=*/true); + dialog.exec(); + if (!dialog.addedStates().isEmpty()) { + State::List states = dialog.addedStates(); + for (State::List::iterator itState = states.begin(); itState != states.end(); ++itState) + FOR_EACH_NOTE (note) + note->addStateToSelectedNotes(*itState); + updateEditorAppearance(); + filterAgain(); + save(); + } + return; + } + if (id == 2) { // Remove All + removeAllTagsFromSelectedNotes(); + filterAgain(); + save(); + return; + } + if (id == 3) { // Customize... + TagsEditDialog dialog(this); + dialog.exec(); + return; + } + + Tag *tag = Tag::all[id - 10]; + if (!tag) + return; + + if (m_tagPopupNote->hasTag(tag)) + removeTagFromSelectedNotes(tag); + else + addTagToSelectedNotes(tag); + m_tagPopupNote->setWidth(0); // To force a new layout computation + filterAgain(); + save(); +} + +void Basket::addTagToSelectedNotes(Tag *tag) +{ + FOR_EACH_NOTE (note) + note->addTagToSelectedNotes(tag); + updateEditorAppearance(); +} + +void Basket::removeTagFromSelectedNotes(Tag *tag) +{ + FOR_EACH_NOTE (note) + note->removeTagFromSelectedNotes(tag); + updateEditorAppearance(); +} + +void Basket::addStateToSelectedNotes(State *state) +{ + FOR_EACH_NOTE (note) + note->addStateToSelectedNotes(state); + updateEditorAppearance(); +} + +void Basket::updateEditorAppearance() +{ + if (isDuringEdit() && m_editor->widget()) { + m_editor->widget()->setFont(m_editor->note()->font()); + m_editor->widget()->setPaletteBackgroundColor(m_editor->note()->backgroundColor()); + m_editor->widget()->setPaletteForegroundColor(m_editor->note()->textColor()); + + // Uggly Hack arround Qt bugs: placeCursor() don't call any signal: + HtmlEditor *htmlEditor = dynamic_cast(m_editor); + if (htmlEditor) { + int para, index; + m_editor->textEdit()->getCursorPosition(¶, &index); + if (para == 0 && index == 0) { + m_editor->textEdit()->moveCursor(QTextEdit::MoveForward, /*select=*/false); + m_editor->textEdit()->moveCursor(QTextEdit::MoveBackward, /*select=*/false); + } else { + m_editor->textEdit()->moveCursor(QTextEdit::MoveBackward, /*select=*/false); + m_editor->textEdit()->moveCursor(QTextEdit::MoveForward, /*select=*/false); + } + htmlEditor->cursorPositionChanged(); // Does not work anyway :-( (when clicking on a red bold text, the toolbar still show black normal text) + } + } +} + +void Basket::editorPropertiesChanged() +{ + if (isDuringEdit() && m_editor->note()->content()->type() == NoteType::Html) { + m_editor->textEdit()->setAutoFormatting(Settings::autoBullet() ? QTextEdit::AutoAll : QTextEdit::AutoNone); + } +} + +void Basket::changeStateOfSelectedNotes(State *state) +{ + FOR_EACH_NOTE (note) + note->changeStateOfSelectedNotes(state); + updateEditorAppearance(); +} + +void Basket::removeAllTagsFromSelectedNotes() +{ + FOR_EACH_NOTE (note) + note->removeAllTagsFromSelectedNotes(); + updateEditorAppearance(); +} + +bool Basket::selectedNotesHaveTags() +{ + FOR_EACH_NOTE (note) + if (note->selectedNotesHaveTags()) + return true; + return false; +} + +QColor Basket::backgroundColor() +{ + if (m_backgroundColorSetting.isValid()) + return m_backgroundColorSetting; + else + return KGlobalSettings::baseColor(); +} + +QColor Basket::textColor() +{ + if (m_textColorSetting.isValid()) + return m_textColorSetting; + else + return KGlobalSettings::textColor(); +} + +void Basket::unbufferizeAll() +{ + FOR_EACH_NOTE (note) + note->unbufferizeAll(); +} + +Note* Basket::editedNote() +{ + if (m_editor) + return m_editor->note(); + else + return 0; +} + +bool Basket::hasTextInEditor() +{ + if (!isDuringEdit() || !redirectEditActions()) + return false; + + if (m_editor->textEdit()) + return ! m_editor->textEdit()->text().isEmpty(); + else if (m_editor->lineEdit()) + return ! m_editor->lineEdit()->text().isEmpty(); + else + return false; +} + +bool Basket::hasSelectedTextInEditor() +{ + if (!isDuringEdit() || !redirectEditActions()) + return false; + + if (m_editor->textEdit()) { + // The following line does NOT work if one letter is selected and the user press Shift+Left or Shift+Right to unselect than letter: + // Qt misteriously tell us there is an invisible selection!! + //return m_editor->textEdit()->hasSelectedText(); + return !m_editor->textEdit()->selectedText().isEmpty(); + } else if (m_editor->lineEdit()) + return m_editor->lineEdit()->hasSelectedText(); + else + return false; +} + +bool Basket::selectedAllTextInEditor() +{ + if (!isDuringEdit() || !redirectEditActions()) + return false; + + if (m_editor->textEdit()) + return m_editor->textEdit()->text().isEmpty() || m_editor->textEdit()->text() == m_editor->textEdit()->selectedText(); + else if (m_editor->lineEdit()) + return m_editor->lineEdit()->text().isEmpty() || m_editor->lineEdit()->text() == m_editor->lineEdit()->selectedText(); + else + return false; +} + +void Basket::selectionChangedInEditor() +{ + Global::bnpView->notesStateChanged(); +} + +void Basket::contentChangedInEditor() +{ + // Do not wait 3 seconds, because we need the note to expand as needed (if a line is too wider... the note should grow wider): + if (m_editor->textEdit()) + m_editor->autoSave(/*toFileToo=*/false); +// else { + if (m_inactivityAutoSaveTimer.isActive()) + m_inactivityAutoSaveTimer.stop(); + m_inactivityAutoSaveTimer.start(3 * 1000, /*singleShot=*/true); + Global::bnpView->setUnsavedStatus(true); +// } +} + +void Basket::inactivityAutoSaveTimeout() +{ + if (m_editor) + m_editor->autoSave(/*toFileToo=*/true); +} + +void Basket::placeEditorAndEnsureVisible() +{ + placeEditor(/*andEnsureVisible=*/true); +} + +void Basket::placeEditor(bool /*andEnsureVisible*/ /*= false*/) +{ + if (!isDuringEdit()) + return; + + QFrame *editorQFrame = dynamic_cast(m_editor->widget()); + KTextEdit *textEdit = m_editor->textEdit(); +// QLineEdit *lineEdit = m_editor->lineEdit(); + Note *note = m_editor->note(); + + int frameWidth = (editorQFrame ? editorQFrame->frameWidth() : 0); + int x = note->x() + note->contentX() + note->content()->xEditorIndent() - frameWidth; + int y; + int maxHeight = QMAX(visibleHeight(), contentsHeight()); + int height, width; + + if (textEdit) { + x -= 4; + // Need to do it 2 times, because it's wrong overwise + // (sometimes, width depends on height, and sometimes, height depends on with): + for (int i = 0; i < 2; i++) { + // FIXME: CRASH: Select all text, press Del or [<--] and editor->removeSelectedText() is called: + // editor->sync() CRASH!! + // editor->sync(); + y = note->y() + Note::NOTE_MARGIN - frameWidth; + height = textEdit->contentsHeight() + 2*frameWidth; +// height = /*QMAX(*/height/*, note->height())*/; +// height = QMIN(height, visibleHeight()); + width = note->x() + note->width() - x + 1;// /*note->x() + note->width()*/note->rightLimit() - x + 2*frameWidth + 1; +//width=QMAX(width,textEdit->contentsWidth()+2*frameWidth); + if (y + height > maxHeight) + y = maxHeight - height; + textEdit->setFixedSize(width, height); + } + } else { + height = note->height() - 2*Note::NOTE_MARGIN + 2*frameWidth; + width = note->x() + note->width() - x;//note->rightLimit() - x + 2*frameWidth; + m_editor->widget()->setFixedSize(width, height); + x -= 1; + y = note->y() + Note::NOTE_MARGIN - frameWidth; + } + if ((m_editorWidth > 0 && m_editorWidth != width) || (m_editorHeight > 0 && m_editorHeight != height)) { + m_editorWidth = width; // Avoid infinite recursion!!! + m_editorHeight = height; + m_editor->autoSave(/*toFileToo=*/true); + } + m_editorWidth = width; + m_editorHeight = height; + addChild(m_editor->widget(), x, y); + m_editorX = x; + m_editorY = y; + + m_leftEditorBorder->setFixedSize( (m_editor->textEdit() ? 3 : 0), height); +// m_leftEditorBorder->raise(); + addChild(m_leftEditorBorder, x, y ); + m_leftEditorBorder->setPosition( x, y ); + + m_rightEditorBorder->setFixedSize(3, height); +// m_rightEditorBorder->raise(); +// addChild(m_rightEditorBorder, note->rightLimit() - Note::NOTE_MARGIN, note->y() + Note::NOTE_MARGIN ); +// m_rightEditorBorder->setPosition( note->rightLimit() - Note::NOTE_MARGIN, note->y() + Note::NOTE_MARGIN ); + addChild(m_rightEditorBorder, note->x() + note->width() - Note::NOTE_MARGIN, note->y() + Note::NOTE_MARGIN ); + m_rightEditorBorder->setPosition( note->x() + note->width() - Note::NOTE_MARGIN, note->y() + Note::NOTE_MARGIN ); + +// if (andEnsureVisible) +// ensureNoteVisible(note); +} + +#include +#include +void Basket::editorCursorPositionChanged() +{ + if (!isDuringEdit()) + return; + + FocusedTextEdit *textEdit = (FocusedTextEdit*) m_editor->textEdit(); + const QTextCursor *cursor = textEdit->textCursor(); +// std::cout << cursor->x() << ";" << cursor->y() << " " +// << cursor->globalX() << ";" << cursor->globalY() << " " +// << cursor->offsetX() << ";" << cursor->offsetY() << ";" << std::endl; + + ensureVisible(m_editorX + cursor->globalX(), m_editorY + cursor->globalY(), 50, 50); +} + +void Basket::closeEditorDelayed() +{ + setFocus(); + QTimer::singleShot( 0, this, SLOT(closeEditor()) ); +} + +bool Basket::closeEditor() +{ + if (!isDuringEdit()) + return true; + + if (m_doNotCloseEditor) + return true; + + if (m_redirectEditActions) { + disconnect( m_editor->widget(), SIGNAL(selectionChanged()), this, SLOT(selectionChangedInEditor()) ); + if (m_editor->textEdit()) { + disconnect( m_editor->textEdit(), SIGNAL(textChanged()), this, SLOT(selectionChangedInEditor()) ); + disconnect( m_editor->textEdit(), SIGNAL(textChanged()), this, SLOT(contentChangedInEditor()) ); + } else if (m_editor->lineEdit()) { + disconnect( m_editor->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(selectionChangedInEditor()) ); + disconnect( m_editor->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(contentChangedInEditor()) ); + } + } + m_editor->widget()->disconnect(); + m_editor->widget()->hide(); + m_editor->validate(); + + delete m_leftEditorBorder; + delete m_rightEditorBorder; + m_leftEditorBorder = 0; + m_rightEditorBorder = 0; + + Note *note = m_editor->note(); + note->setWidth(0); // For relayoutNotes() to succeed to take care of the change + + // Delete the editor BEFORE unselecting the note because unselecting the note would trigger closeEditor() recursivly: + bool isEmpty = m_editor->isEmpty(); + delete m_editor; + m_editor = 0; + m_redirectEditActions = false; + m_editorWidth = -1; + m_editorHeight = -1; + m_inactivityAutoSaveTimer.stop(); + + // Delete the note if it is now empty: + if (isEmpty) { + focusANonSelectedNoteAboveOrThenBelow(); + note->setSelected(true); + note->deleteSelectedNotes(); + save(); + note = 0; + } + + unlockHovering(); + filterAgain(/*andEnsureVisible=*/false); + +// Does not work: +// if (Settings::playAnimations()) +// note->setOnTop(true); // So if it grew, do not obscure it temporarily while the notes below it are moving + + if (note) + note->setSelected(false);//unselectAll(); + doHoverEffects(); +// save(); + + Global::bnpView->m_actEditNote->setEnabled( !isLocked() && countSelecteds() == 1 /*&& !isDuringEdit()*/ ); + + emit resetStatusBarText(); // Remove the "Editing. ... to validate." text. + + //if (kapp->activeWindow() == Global::mainContainer) + + // Set focus to the basket, unless the user pressed a letter key in the filter bar and the currently edited note came hidden, then editing closed: + if (!decoration()->filterBar()->lineEdit()->hasFocus()) + setFocus(); + + // Return true if the note is still there: + return (note != 0); +} + +void Basket::closeBasket() +{ + closeEditor(); + unbufferizeAll(); // Keep the memory footprint low + if (isEncrypted()) { + if (Settings::enableReLockTimeout()) { + int seconds = Settings::reLockTimeoutMinutes() * 60; + m_inactivityAutoLockTimer.start(seconds * 1000, /*singleShot=*/true); + } + } +} + +void Basket::openBasket() +{ + if (m_inactivityAutoLockTimer.isActive()) + m_inactivityAutoLockTimer.stop(); +} + +Note* Basket::theSelectedNote() +{ + if (countSelecteds() != 1) { + std::cout << "NO SELECTED NOTE !!!!" << std::endl; + return 0; + } + + Note *selectedOne; + FOR_EACH_NOTE (note) { + selectedOne = note->theSelectedNote(); + if (selectedOne) + return selectedOne; + } + + std::cout << "One selected note, BUT NOT FOUND !!!!" << std::endl; + + return 0; +} + +void debugSel(NoteSelection* sel, int n = 0) +{ + for (NoteSelection *node = sel; node; node = node->next) { + for (int i = 0; i < n; i++) + std::cout << "-"; + std::cout << (node->firstChild ? "Group" : node->note->content()->toText("")) << std::endl; + if (node->firstChild) + debugSel(node->firstChild, n+1); + } +} + +NoteSelection* Basket::selectedNotes() +{ + NoteSelection selection; + + FOR_EACH_NOTE (note) + selection.append(note->selectedNotes()); + + if (!selection.firstChild) + return 0; + + for (NoteSelection *node = selection.firstChild; node; node = node->next) + node->parent = 0; + + // If the top-most groups are columns, export only childs of those groups + // (because user is not consciencious that columns are groups, and don't care: it's not what she want): + if (selection.firstChild->note->isColumn()) { + NoteSelection tmpSelection; + NoteSelection *nextNode; + NoteSelection *nextSubNode; + for (NoteSelection *node = selection.firstChild; node; node = nextNode) { + nextNode = node->next; + if (node->note->isColumn()) { + for (NoteSelection *subNode = node->firstChild; subNode; subNode = nextSubNode) { + nextSubNode = subNode->next; + tmpSelection.append(subNode); + subNode->parent = 0; + subNode->next = 0; + } + } else { + tmpSelection.append(node); + node->parent = 0; + node->next = 0; + } + } +// debugSel(tmpSelection.firstChild); + return tmpSelection.firstChild; + } else { +// debugSel(selection.firstChild); + return selection.firstChild; + } +} + +void Basket::showEditedNoteWhileFiltering() +{ + if (m_editor) { + Note *note = m_editor->note(); + filterAgain(); + note->setSelected(true); + relayoutNotes(false); + note->setX(note->finalX()); + note->setY(note->finalY()); + filterAgainDelayed(); + } +} + +void Basket::noteEdit(Note *note, bool justAdded, const QPoint &clickedPoint) // TODO: Remove the first parameter!!! +{ + if (!note) + note = theSelectedNote(); // TODO: Or pick the focused note! + if (!note) + return; + + if (isDuringEdit()) { + closeEditor(); // Validate the noteeditors in KLineEdit that does not intercept Enter key press (and edit is triggered with Enter too... Can conflict) + return; + } + + if (note != m_focusedNote) { + setFocusedNote(note); + m_startOfShiftSelectionNote = note; + } + + if (justAdded && isFiltering()) { + QTimer::singleShot( 0, this, SLOT(showEditedNoteWhileFiltering()) ); + } + + doHoverEffects(note, Note::Content); // Be sure (in the case Edit was triggered by menu or Enter key...): better feedback! + //m_lockedHovering = true; + + //m_editorWidget = note->content()->launchEdit(this); + NoteEditor *editor = NoteEditor::editNoteContent(note->content(), this); + + if (editor->widget()) { + m_editor = editor; + m_leftEditorBorder = new TransparentWidget(this); + m_rightEditorBorder = new TransparentWidget(this); + m_editor->widget()->reparent(viewport(), QPoint(0,0), true); + m_leftEditorBorder->reparent(viewport(), QPoint(0,0), true); + m_rightEditorBorder->reparent(viewport(), QPoint(0,0), true); + addChild(m_editor->widget(), 0, 0); + placeEditorAndEnsureVisible(); // placeEditor(); // FIXME: After? + m_redirectEditActions = m_editor->lineEdit() || m_editor->textEdit(); + if (m_redirectEditActions) { + connect( m_editor->widget(), SIGNAL(selectionChanged()), this, SLOT(selectionChangedInEditor()) ); + // In case there is NO text, "Select All" is disabled. But if the user press a key the there is now a text: + // selection has not changed but "Select All" should be re-enabled: + if (m_editor->textEdit()) { + connect( m_editor->textEdit(), SIGNAL(textChanged()), this, SLOT(selectionChangedInEditor()) ); + connect( m_editor->textEdit(), SIGNAL(textChanged()), this, SLOT(contentChangedInEditor()) ); + } else if (m_editor->lineEdit()) { + connect( m_editor->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(selectionChangedInEditor()) ); + connect( m_editor->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(contentChangedInEditor()) ); + } + } + m_editor->widget()->show(); + //m_editor->widget()->raise(); + m_editor->widget()->setFocus(); + connect( m_editor, SIGNAL(askValidation()), this, SLOT(closeEditorDelayed()) ); + connect( m_editor, SIGNAL(mouseEnteredEditorWidget()), this, SLOT(mouseEnteredEditorWidget()) ); + if (m_editor->textEdit()) { + connect( m_editor->textEdit(), SIGNAL(textChanged()), this, SLOT(placeEditorAndEnsureVisible()) ); + if (clickedPoint != QPoint()) { + QPoint pos(clickedPoint.x() - note->x() - note->contentX() + m_editor->textEdit()->frameWidth() + 4 - m_editor->textEdit()->frameWidth(), + clickedPoint.y() - note->y() - m_editor->textEdit()->frameWidth()); + // Do it right before the kapp->processEvents() to not have the cursor to quickly flicker at end (and sometimes stay at end AND where clicked): + m_editor->textEdit()->moveCursor(KTextEdit::MoveHome, false); + m_editor->textEdit()->ensureCursorVisible(); + m_editor->textEdit()->placeCursor(pos); + updateEditorAppearance(); + } + } +// kapp->processEvents(); // Show the editor toolbar before ensuring the note is visible + ensureNoteVisible(note); // because toolbar can create a new line and then partially hide the note + m_editor->widget()->setFocus(); // When clicking in the basket, a QTimer::singleShot(0, ...) focus the basket! So we focus the the widget after kapp->processEvents() + emit resetStatusBarText(); // Display "Editing. ... to validate." + } else { + // Delete the note user have canceled the addition: + if ((justAdded && editor->canceled()) || editor->isEmpty() /*) && editor->note()->states().count() <= 0*/) { + focusANonSelectedNoteAboveOrThenBelow(); + editor->note()->setSelected(true); + editor->note()->deleteSelectedNotes(); + save(); + } + delete editor; + unlockHovering(); + filterAgain(); + unselectAll(); + } + Global::bnpView->m_actEditNote->setEnabled(false); +} + +void Basket::noteDelete() +{ + if (redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->del(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->del(); + return; + } + + if (countSelecteds() <= 0) + return; + int really = KMessageBox::Yes; + if (Settings::confirmNoteDeletion()) + really = KMessageBox::questionYesNo( this, + i18n("Do you really want to delete this note?", + "Do you really want to delete those %n notes?", + countSelecteds()), + i18n("Delete Note", "Delete Notes", countSelecteds()) +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + , KStdGuiItem::del(), KStdGuiItem::cancel()); +#else + ); +#endif + if (really == KMessageBox::No) + return; + + noteDeleteWithoutConfirmation(); +} + +void Basket::focusANonSelectedNoteBelow(bool inSameColumn) +{ + // First focus another unselected one below it...: + if (m_focusedNote && m_focusedNote->isSelected()) { + Note *next = m_focusedNote->nextShownInStack(); + while (next && next->isSelected()) + next = next->nextShownInStack(); + if (next) { + if (inSameColumn && isColumnsLayout() && m_focusedNote->parentPrimaryNote() == next->parentPrimaryNote()) { + setFocusedNote(next); + m_startOfShiftSelectionNote = next; + } + } + } +} + +void Basket::focusANonSelectedNoteAbove(bool inSameColumn) +{ + // ... Or above it: + if (m_focusedNote && m_focusedNote->isSelected()) { + Note *prev = m_focusedNote->prevShownInStack(); + while (prev && prev->isSelected()) + prev = prev->prevShownInStack(); + if (prev) { + if (inSameColumn && isColumnsLayout() && m_focusedNote->parentPrimaryNote() == prev->parentPrimaryNote()) { + setFocusedNote(prev); + m_startOfShiftSelectionNote = prev; + } + } + } +} + +void Basket::focusANonSelectedNoteBelowOrThenAbove() +{ + focusANonSelectedNoteBelow(/*inSameColumn=*/true); + focusANonSelectedNoteAbove(/*inSameColumn=*/true); + focusANonSelectedNoteBelow(/*inSameColumn=*/false); + focusANonSelectedNoteAbove(/*inSameColumn=*/false); +} + +void Basket::focusANonSelectedNoteAboveOrThenBelow() +{ + focusANonSelectedNoteAbove(/*inSameColumn=*/true); + focusANonSelectedNoteBelow(/*inSameColumn=*/true); + focusANonSelectedNoteAbove(/*inSameColumn=*/false); + focusANonSelectedNoteBelow(/*inSameColumn=*/false); +} + +void Basket::noteDeleteWithoutConfirmation(bool deleteFilesToo) +{ + // If the currently focused note is selected, it will be deleted. + focusANonSelectedNoteBelowOrThenAbove(); + + // Do the deletion: + Note *note = firstNote(); + Note *next; + while (note) { + next = note->next(); // If we delete 'note' on the next line, note->next() will be 0! + note->deleteSelectedNotes(deleteFilesToo); + note = next; + } + + relayoutNotes(true); // FIXME: filterAgain()? + save(); +} + +void Basket::doCopy(CopyMode copyMode) +{ + QClipboard *cb = KApplication::clipboard(); + QClipboard::Mode mode = (copyMode == CopyToSelection ? QClipboard::Selection : QClipboard::Clipboard); + + NoteSelection *selection = selectedNotes(); + int countCopied = countSelecteds(); + if (selection->firstStacked()) { + QDragObject *d = NoteDrag::dragObject(selection, copyMode == CutToClipboard, /*source=*/0); // d will be deleted by QT +// /*bool shouldRemove = */d->drag(); +// delete selection; + cb->setData(d, mode); // NoteMultipleDrag will be deleted by QT +// if (copyMode == CutToClipboard && !note->useFile()) // If useFile(), NoteDrag::dragObject() will delete it TODO +// note->slotDelete(); + + if (copyMode == CutToClipboard) + noteDeleteWithoutConfirmation(/*deleteFilesToo=*/false); + + switch (copyMode) { + default: + case CopyToClipboard: emit postMessage(i18n("Copied note to clipboard.", "Copied notes to clipboard.", countCopied)); break; + case CutToClipboard: emit postMessage(i18n("Cut note to clipboard.", "Cut notes to clipboard.", countCopied)); break; + case CopyToSelection: emit postMessage(i18n("Copied note to selection.", "Copied notes to selection.", countCopied)); break; + } + } +} + +void Basket::noteCopy() +{ + if (redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->copy(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->copy(); + } else + doCopy(CopyToClipboard); +} + +void Basket::noteCut() +{ + if (redirectEditActions()) { + if (m_editor->textEdit()) + m_editor->textEdit()->cut(); + else if (m_editor->lineEdit()) + m_editor->lineEdit()->cut(); + } else + doCopy(CutToClipboard); +} + +void Basket::noteOpen(Note *note) +{ + /* + GetSelectedNotes + NoSelectedNote || Count == 0 ? return + AllTheSameType ? + Get { url, message(count) } + */ + + // TODO: Open ALL selected notes! + if (!note) + note = theSelectedNote(); + if (!note) + return; + + KURL url = note->content()->urlToOpen(/*with=*/false); + QString message = note->content()->messageWhenOpenning(NoteContent::OpenOne /*NoteContent::OpenSeveral*/); + if (url.isEmpty()) { + if (message.isEmpty()) + emit postMessage(i18n("Unable to open this note.") /*"Unable to open those notes."*/); + else { + int result = KMessageBox::warningContinueCancel(this, message, /*caption=*/QString::null, KGuiItem(i18n("&Edit"), "edit")); + if (result == KMessageBox::Continue) + noteEdit(note); + } + } else { + emit postMessage(message); // "Openning link target..." / "Launching application..." / "Openning note file..." + // Finally do the opening job: + QString customCommand = note->content()->customOpenCommand(); + if (customCommand.isEmpty()) { + KRun *run = new KRun(url); + run->setAutoDelete(true); + } else + KRun::run(customCommand, url); + } +} + +/** Code from bool KRun::displayOpenWithDialog(const KURL::List& lst, bool tempFiles) + * It does not allow to set a text, so I ripped it to do that: + */ +bool KRun__displayOpenWithDialog(const KURL::List& lst, bool tempFiles, const QString &text) +{ + if (kapp && !kapp->authorizeKAction("openwith")) { + KMessageBox::sorry(0L, i18n("You are not authorized to open this file.")); // TODO: Better message, i18n freeze :-( + return false; + } + KOpenWithDlg l(lst, text, QString::null, 0L); + if (l.exec()) { + KService::Ptr service = l.service(); + if (!!service) + return KRun::run(*service, lst, tempFiles); + //kdDebug(250) << "No service set, running " << l.text() << endl; + return KRun::run(l.text(), lst); // TODO handle tempFiles + } + return false; +} + +void Basket::noteOpenWith(Note *note) +{ + if (!note) + note = theSelectedNote(); + if (!note) + return; + + KURL url = note->content()->urlToOpen(/*with=*/true); + QString message = note->content()->messageWhenOpenning(NoteContent::OpenOneWith /*NoteContent::OpenSeveralWith*/); + QString text = note->content()->messageWhenOpenning(NoteContent::OpenOneWithDialog /*NoteContent::OpenSeveralWithDialog*/); + if (url.isEmpty()) + emit postMessage(i18n("Unable to open this note.") /*"Unable to open those notes."*/); + else if (KRun__displayOpenWithDialog(url, false, text)) + emit postMessage(message); // "Openning link target with..." / "Openning note file with..." +} + +void Basket::noteSaveAs() +{ +// if (!note) +// note = theSelectedNote(); + Note *note = theSelectedNote(); + if (!note) + return; + + KURL url = note->content()->urlToOpen(/*with=*/false); + if (url.isEmpty()) + return; + + QString fileName = KFileDialog::getSaveFileName(url.fileName(), note->content()->saveAsFilters(), this, i18n("Save to File")); + // TODO: Ask to overwrite ! + if (fileName.isEmpty()) + return; + + // TODO: Convert format, etc. (use NoteContent::saveAs(fileName)) + KIO::copy(url, KURL(fileName)); +} + +Note* Basket::selectedGroup() +{ + FOR_EACH_NOTE (note) { + Note *selectedGroup = note->selectedGroup(); + if (selectedGroup) { + // If the selected group is one group in a column, then return that group, and not the column, + // because the column is not ungrouppage, and the Ungroup action would be disabled. + if (selectedGroup->isColumn() && selectedGroup->firstChild() && !selectedGroup->firstChild()->next()) { + return selectedGroup->firstChild(); + } + return selectedGroup; + } + } + return 0; +} + +bool Basket::selectionIsOneGroup() +{ + return (selectedGroup() != 0); +} + +Note* Basket::firstSelected() +{ + Note *first = 0; + FOR_EACH_NOTE (note) { + first = note->firstSelected(); + if (first) + return first; + } + return 0; +} + +Note* Basket::lastSelected() +{ + Note *last = 0, *tmp = 0; + FOR_EACH_NOTE (note) { + tmp = note->lastSelected(); + if (tmp) + last = tmp; + } + return last; +} + +bool Basket::convertTexts() +{ + m_watcher->stopScan(); + bool convertedNotes = false; + + if (!isLoaded()) + load(); + + FOR_EACH_NOTE (note) + if (note->convertTexts()) + convertedNotes = true; + + if (convertedNotes) + save(); + m_watcher->startScan(); + return convertedNotes; +} + +void Basket::noteGroup() +{ +/* // Nothing to do? + if (isLocked() || countSelecteds() <= 1) + return; + + // If every selected notes are ALREADY in one group, then don't touch anything: + Note *selectedGroup = this->selectedGroup(); + if (selectedGroup && !selectedGroup->isColumn()) + return; +*/ + + // Copied from BNPView::updateNotesActions() + bool severalSelected = countSelecteds() >= 2; + Note *selectedGroup = (severalSelected ? this->selectedGroup() : 0); + bool enabled = !isLocked() && severalSelected && (!selectedGroup || selectedGroup->isColumn()); + if (!enabled) + return; + + // Get the first selected note: we will group selected items just before: + Note *first = firstSelected(); +// if (selectedGroup != 0 || first == 0) +// return; + + m_loaded = false; // Hack to avoid notes to be unselected and new notes to be selected: + + // Create and insert the receiving group: + Note *group = new Note(this); + if (first->isFree()) { + insertNote(group, 0L, Note::BottomColumn, QPoint(first->finalX(), first->finalY()), /*animateNewPosition=*/false); + } else { + insertNote(group, first, Note::TopInsert, QPoint(), /*animateNewPosition=*/false); + } + + // Put a FAKE UNSELECTED note in the new group, so if the new group is inside an allSelected() group, the parent group is not moved inside the new group! + Note *fakeNote = NoteFactory::createNoteColor(Qt::red, this); + insertNote(fakeNote, group, Note::BottomColumn, QPoint(), /*animateNewPosition=*/false); + + // Group the notes: + Note *nextNote; + Note *note = firstNote(); + while (note) { + nextNote = note->next(); + note->groupIn(group); + note = nextNote; + } + + m_loaded = true; // Part 2 / 2 of the workarround! + + // Do cleanup: + unplugNote(fakeNote); + unselectAll(); + group->setSelectedRecursivly(true); // Notes were unselected by unplugging + + relayoutNotes(true); + save(); +} + +void Basket::noteUngroup() +{ + Note *group = selectedGroup(); + if (group && !group->isColumn()) + ungroupNote(group); + save(); +} + +void Basket::unplugSelection(NoteSelection *selection) +{ + for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked()) + unplugNote(toUnplug->note); +} + +void Basket::insertSelection(NoteSelection *selection, Note *after) +{ + for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked()) { + if (toUnplug->note->isGroup()) { + Note *group = new Note(this); + insertNote(group, after, Note::BottomInsert, QPoint(), /*animateNewPosition=*/false); + Note *fakeNote = NoteFactory::createNoteColor(Qt::red, this); + insertNote(fakeNote, group, Note::BottomColumn, QPoint(), /*animateNewPosition=*/false); + insertSelection(toUnplug->firstChild, fakeNote); + unplugNote(fakeNote); + after = group; + } else { + Note *note = toUnplug->note; + note->setPrev(0); + note->setNext(0); + insertNote(note, after, Note::BottomInsert, QPoint(), /*animateNewPosition=*/true); + after = note; + } + } +} + +void Basket::selectSelection(NoteSelection *selection) +{ + for (NoteSelection *toUnplug = selection->firstStacked(); toUnplug; toUnplug = toUnplug->nextStacked()) { + if (toUnplug->note->isGroup()) + selectSelection(toUnplug); + else + toUnplug->note->setSelected(true); + } +} + +void Basket::noteMoveOnTop() +{ + // TODO: Get the group containing the selected notes and first move inside the group, then inside parent group, then in the basket + // TODO: Move on top/bottom... of the column or basjet + + NoteSelection *selection = selectedNotes(); + unplugSelection(selection); + // Replug the notes: + Note *fakeNote = NoteFactory::createNoteColor(Qt::red, this); + if (isColumnsLayout()) { + if (firstNote()->firstChild()) + insertNote(fakeNote, firstNote()->firstChild(), Note::TopInsert, QPoint(), /*animateNewPosition=*/false); + else + insertNote(fakeNote, firstNote(), Note::BottomColumn, QPoint(), /*animateNewPosition=*/false); + } else { + // TODO: Also allow to move notes on top of a group!!!!!!! + insertNote(fakeNote, 0, Note::BottomInsert, QPoint(0, 0), /*animateNewPosition=*/false); + } + insertSelection(selection, fakeNote); + unplugNote(fakeNote); + selectSelection(selection); + relayoutNotes(true); + save(); +} + +void Basket::noteMoveOnBottom() +{ + + // TODO: Duplicate code: void noteMoveOn(); + + // TODO: Get the group containing the selected notes and first move inside the group, then inside parent group, then in the basket + // TODO: Move on top/bottom... of the column or basjet + + NoteSelection *selection = selectedNotes(); + unplugSelection(selection); + // Replug the notes: + Note *fakeNote = NoteFactory::createNoteColor(Qt::red, this); + if (isColumnsLayout()) + insertNote(fakeNote, firstNote(), Note::BottomColumn, QPoint(), /*animateNewPosition=*/false); + else { + // TODO: Also allow to move notes on top of a group!!!!!!! + insertNote(fakeNote, 0, Note::BottomInsert, QPoint(0, 0), /*animateNewPosition=*/false); + } + insertSelection(selection, fakeNote); + unplugNote(fakeNote); + selectSelection(selection); + relayoutNotes(true); + save(); +} + +void Basket::moveSelectionTo(Note *here, bool below/* = true*/) +{ + NoteSelection *selection = selectedNotes(); + unplugSelection(selection); + // Replug the notes: + Note *fakeNote = NoteFactory::createNoteColor(Qt::red, this); +// if (isColumnsLayout()) + insertNote(fakeNote, here, (below ? Note::BottomInsert : Note::TopInsert), QPoint(), /*animateNewPosition=*/false); +// else { +// // TODO: Also allow to move notes on top of a group!!!!!!! +// insertNote(fakeNote, 0, Note::BottomInsert, QPoint(0, 0), /*animateNewPosition=*/false); +// } + insertSelection(selection, fakeNote); + unplugNote(fakeNote); + selectSelection(selection); + relayoutNotes(true); + save(); +} + +void Basket::noteMoveNoteUp() +{ + + // TODO: Move between columns, even if they are empty !!!!!!! + + // TODO: if first note of a group, move just above the group! And let that even if there is no note before that group!!! + + Note *first = firstSelected(); + Note *previous = first->prevShownInStack(); + if (previous) + moveSelectionTo(previous, /*below=*/false); +} + +void Basket::noteMoveNoteDown() +{ + Note *first = lastSelected(); + Note *next = first->nextShownInStack(); + if (next) + moveSelectionTo(next, /*below=*/true); +} + +void Basket::wheelEvent(QWheelEvent *event) +{ + QScrollView::wheelEvent(event); +} + +void Basket::linkLookChanged() +{ + Note *note = m_firstNote; + while (note) { + note->linkLookChanged(); + note = note->next(); + } + relayoutNotes(true); +} + +void Basket::slotCopyingDone2(KIO::Job *job) +{ + if (job->error()) { + DEBUG_WIN << "Copy finished, ERROR"; + return; + } + KIO::FileCopyJob *fileCopyJob = (KIO::FileCopyJob*)job; + Note *note = noteForFullPath(fileCopyJob->destURL().path()); + DEBUG_WIN << "Copy finished, load note: " + fileCopyJob->destURL().path() + (note ? "" : " --- NO CORRESPONDING NOTE"); + if (note != 0L) { + note->content()->loadFromFile(/*lazyLoad=*/false); + if(isEncrypted()) + note->content()->saveToFile(); + if (m_focusedNote == note) // When inserting a new note we ensure it visble + ensureNoteVisible(note); // But after loading it has certainly grown and if it was + } // on bottom of the basket it's not visible entirly anymore +} + +Note* Basket::noteForFullPath(const QString &path) +{ + Note *note = firstNote(); + Note *found; + while (note) { + found = note->noteForFullPath(path); + if (found) + return found; + note = note->next(); + } + return 0; +} + +void Basket::deleteFiles() +{ + m_watcher->stopScan(); + Tools::deleteRecursively(fullPath()); +} + +QValueList Basket::usedStates() +{ + QValueList states; + FOR_EACH_NOTE (note) + note->usedStates(states); + return states; +} + +QString Basket::saveGradientBackground(const QColor &color, const QFont &font, const QString &folder) +{ + // Construct file name and return if the file already exists: + QString fileName = "note_background_" + color.name().lower().mid(1) + ".png"; + QString fullPath = folder + fileName; + if (QFile::exists(fullPath)) + return fileName; + + // Get the gradient top and bottom colors: + QColor topBgColor; + QColor bottomBgColor; + Note::getGradientColors(color, &topBgColor, &bottomBgColor); + + // Draw and save the gradient image: + int sampleTextHeight = QFontMetrics(font) + .boundingRect(0, 0, /*width=*/10000, /*height=*/0, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, "Test text") + .height(); + QPixmap noteGradient(100, sampleTextHeight + Note::NOTE_MARGIN); + QPainter painter(¬eGradient); + drawGradient(&painter, topBgColor, bottomBgColor, 0, 0, noteGradient.width(), noteGradient.height(), /*sunken=*/false, /*horz=*/true, /*flat=*/false); + painter.end(); + noteGradient.save(fullPath, "PNG"); + + // Return the name of the created file: + return fileName; +} + +void Basket::listUsedTags(QValueList &list) +{ + if (!isLoaded()) { + load(); + } + + FOR_EACH_NOTE (child) + child->listUsedTags(list); +} + + +/** Unfocus the previously focused note (unless it was null) + * and focus the new @param note (unless it is null) if hasFocus() + * Update m_focusedNote to the new one + */ +void Basket::setFocusedNote(Note *note) // void Basket::changeFocusTo(Note *note) +{ + // Don't focus an hidden note: + if (note != 0L && !note->isShown()) + return; + // When clicking a group, this group gets focused. But only content-based notes should be focused: + if (note && note->isGroup()) + note = note->firstRealChild(); + // The first time a note is focused, it becomes the start of the Shift selection: + if (m_startOfShiftSelectionNote == 0) + m_startOfShiftSelectionNote = note; + // Unfocus the old focused note: + if (m_focusedNote != 0L) + m_focusedNote->setFocused(false); + // Notify the new one to draw a focus rectangle... only if the basket is focused: + if (hasFocus() && note != 0L) + note->setFocused(true); + // Save the new focused note: + m_focusedNote = note; +} + +/** If no shown note is currently focused, try to find a shown note and focus it + * Also update m_focusedNote to the new one (or null if there isn't) + */ +void Basket::focusANote() +{ + if (countFounds() == 0) { // No note to focus + setFocusedNote(0L); +// m_startOfShiftSelectionNote = 0; + return; + } + + if (m_focusedNote == 0L) { // No focused note yet : focus the first shown + Note *toFocus = (isFreeLayout() ? noteOnHome() : firstNoteShownInStack()); + setFocusedNote(toFocus); +// m_startOfShiftSelectionNote = m_focusedNote; + return; + } + + // Search a visible note to focus if the focused one isn't shown : + Note *toFocus = m_focusedNote; + if (toFocus && !toFocus->isShown()) + toFocus = toFocus->nextShownInStack(); + if (!toFocus && m_focusedNote) + toFocus = m_focusedNote->prevShownInStack(); + setFocusedNote(toFocus); +// m_startOfShiftSelectionNote = toFocus; +} + +Note* Basket::firstNoteInStack() +{ + if (!firstNote()) + return 0; + + if (firstNote()->content()) + return firstNote(); + else + return firstNote()->nextInStack(); +} + +Note* Basket::lastNoteInStack() +{ + Note *note = lastNote(); + while (note) { + if (note->content()) + return note; + Note *possibleNote = note->lastRealChild(); + if (possibleNote && possibleNote->content()) + return possibleNote; + note = note->prev(); + } + return 0; +} + +Note* Basket::firstNoteShownInStack() +{ + Note *first = firstNoteInStack(); + while (first && !first->isShown()) + first = first->nextInStack(); + return first; +} + +Note* Basket::lastNoteShownInStack() +{ + Note *last = lastNoteInStack(); + while (last && !last->isShown()) + last = last->prevInStack(); + return last; +} + +inline int abs(int n) +{ + return (n < 0 ? -n : n); +} + +Note* Basket::noteOn(NoteOn side) +{ + Note *bestNote = 0; + int distance = -1; + int bestDistance = contentsWidth() * contentsHeight() * 10; + + Note *note = firstNoteShownInStack(); + Note *primary = m_focusedNote->parentPrimaryNote(); + while (note) { + switch (side) { + case LEFT_SIDE: distance = m_focusedNote->distanceOnLeftRight(note, LEFT_SIDE); break; + case RIGHT_SIDE: distance = m_focusedNote->distanceOnLeftRight(note, RIGHT_SIDE); break; + case TOP_SIDE: distance = m_focusedNote->distanceOnTopBottom(note, TOP_SIDE); break; + case BOTTOM_SIDE: distance = m_focusedNote->distanceOnTopBottom(note, BOTTOM_SIDE); break; + } + if ((side == TOP_SIDE || side == BOTTOM_SIDE || primary != note->parentPrimaryNote()) && note != m_focusedNote && distance > 0 && distance < bestDistance) { + bestNote = note; + bestDistance = distance; + } + note = note ->nextShownInStack(); + } + + return bestNote; +} + +Note* Basket::firstNoteInGroup() +{ + Note *child = m_focusedNote; + Note *parent = (m_focusedNote ? m_focusedNote->parentNote() : 0); + while (parent) { + if (parent->firstChild() != child && !parent->isColumn()) + return parent->firstRealChild(); + child = parent; + parent = parent->parentNote(); + } + return 0; +} + +Note* Basket::noteOnHome() +{ + // First try to find the first note of the group containing the focused note: + Note *child = m_focusedNote; + Note *parent = (m_focusedNote ? m_focusedNote->parentNote() : 0); + while (parent) { + if (parent->nextShownInStack() != m_focusedNote) + return parent->nextShownInStack(); + child = parent; + parent = parent->parentNote(); + } + + // If it was not found, then focus the very first note in the basket: + if (isFreeLayout()) { + Note *first = firstNoteShownInStack(); // The effective first note found + Note *note = first; // The current note, to conpare with the previous first note, if this new note is more on top + if (note) + note = note->nextShownInStack(); + while (note) { + if (note->finalY() < first->finalY() || (note->finalY() == first->finalY() && note->finalX() < first->finalX())) + first = note; + note = note->nextShownInStack(); + } + return first; + } else + return firstNoteShownInStack(); +} + +Note* Basket::noteOnEnd() +{ + Note *child = m_focusedNote; + Note *parent = (m_focusedNote ? m_focusedNote->parentNote() : 0); + Note *lastChild; + while (parent) { + lastChild = parent->lastRealChild(); + if (lastChild && lastChild != m_focusedNote) { + if (lastChild->isShown()) + return lastChild; + lastChild = lastChild->prevShownInStack(); + if (lastChild && lastChild->isShown() && lastChild != m_focusedNote) + return lastChild; + } + child = parent; + parent = parent->parentNote(); + } + if (isFreeLayout()) { + Note *last; + Note *note; + last = note = firstNoteShownInStack(); + note = note->nextShownInStack(); + while (note) { + if (note->finalBottom() > last->finalBottom() || (note->finalBottom() == last->finalBottom() && note->finalX() > last->finalX())) + last = note; + note = note->nextShownInStack(); + } + return last; + } else + return lastNoteShownInStack(); +} + + +void Basket::keyPressEvent(QKeyEvent *event) +{ + if (isDuringEdit() && event->key() == Qt::Key_Return) { + //if (m_editor->lineEdit()) + // closeEditor(); + //else + m_editor->widget()->setFocus(); + } else if (event->key() == Qt::Key_Escape) { + if (isDuringEdit()) + closeEditor(); + else if (decoration()->filterData().isFiltering) + cancelFilter(); + else + unselectAll(); + } + + if (countFounds() == 0) + return; + + if (!m_focusedNote) + return; + + Note *toFocus = 0L; + + switch (event->key()) { + case Qt::Key_Down: + toFocus = (isFreeLayout() ? noteOn(BOTTOM_SIDE) : m_focusedNote->nextShownInStack()); + if (toFocus) + break; + scrollBy(0, 30); // This cases do not move focus to another note... + return; + case Qt::Key_Up: + toFocus = (isFreeLayout() ? noteOn(TOP_SIDE) : m_focusedNote->prevShownInStack()); + if (toFocus) + break; + scrollBy(0, -30); // This cases do not move focus to another note... + return; + case Qt::Key_PageDown: + if (isFreeLayout()) { + Note *lastFocused = m_focusedNote; + for (int i = 0; i < 10 && m_focusedNote; ++i) + m_focusedNote = noteOn(BOTTOM_SIDE); + toFocus = m_focusedNote; + m_focusedNote = lastFocused; + } else { + toFocus = m_focusedNote; + for (int i = 0; i < 10 && toFocus; ++i) + toFocus = toFocus->nextShownInStack(); + } + if (toFocus == 0L) + toFocus = (isFreeLayout() ? noteOnEnd() : lastNoteShownInStack()); + if (toFocus && toFocus != m_focusedNote) + break; + scrollBy(0, visibleHeight() / 2); // This cases do not move focus to another note... + return; + case Qt::Key_PageUp: + if (isFreeLayout()) { + Note *lastFocused = m_focusedNote; + for (int i = 0; i < 10 && m_focusedNote; ++i) + m_focusedNote = noteOn(TOP_SIDE); + toFocus = m_focusedNote; + m_focusedNote = lastFocused; + } else { + toFocus = m_focusedNote; + for (int i = 0; i < 10 && toFocus; ++i) + toFocus = toFocus->prevShownInStack(); + } + if (toFocus == 0L) + toFocus = (isFreeLayout() ? noteOnHome() : firstNoteShownInStack()); + if (toFocus && toFocus != m_focusedNote) + break; + scrollBy(0, - visibleHeight() / 2); // This cases do not move focus to another note... + return; + case Qt::Key_Home: + toFocus = noteOnHome(); + break; + case Qt::Key_End: + toFocus = noteOnEnd(); + break; + case Qt::Key_Left: + if (m_focusedNote->tryFoldParent()) + return; + if ( (toFocus = noteOn(LEFT_SIDE)) ) + break; + if ( (toFocus = firstNoteInGroup()) ) + break; + scrollBy(-30, 0); // This cases do not move focus to another note... + return; + case Qt::Key_Right: + if (m_focusedNote->tryExpandParent()) + return; + if ( (toFocus = noteOn(RIGHT_SIDE)) ) + break; + scrollBy(30, 0); // This cases do not move focus to another note... + return; + case Qt::Key_Space: // This case do not move focus to another note... + if (m_focusedNote) { + m_focusedNote->setSelected( ! m_focusedNote->isSelected() ); + event->accept(); + } else + event->ignore(); + return; // ... so we return after the process + default: + return; + } + + if (toFocus == 0L) { // If no direction keys have been pressed OR reached out the begin or end + event->ignore(); // Important !! + return; + } + + if (event->state() & Qt::ShiftButton) { // Shift+arrowKeys selection + if (m_startOfShiftSelectionNote == 0L) + m_startOfShiftSelectionNote = toFocus; + ensureNoteVisible(toFocus); // Important: this line should be before the other ones because else repaint would be done on the wrong part! + selectRange(m_startOfShiftSelectionNote, toFocus); + setFocusedNote(toFocus); + event->accept(); + return; + } else /*if (toFocus != m_focusedNote)*/ { // Move focus to ANOTHER note... + ensureNoteVisible(toFocus); // Important: this line should be before the other ones because else repaint would be done on the wrong part! + setFocusedNote(toFocus); + m_startOfShiftSelectionNote = toFocus; + if ( ! (event->state() & Qt::ControlButton) ) // ... select only current note if Control + unselectAllBut(m_focusedNote); + event->accept(); + return; + } + + event->ignore(); // Important !! +} + +/** Select a range of notes and deselect the others. + * The order between start and end has no importance (end could be before start) + */ +void Basket::selectRange(Note *start, Note *end, bool unselectOthers /*= true*/) +{ + Note *cur; + Note *realEnd = 0L; + + // Avoid crash when start (or end) is null + if (start == 0L) + start = end; + else if (end == 0L) + end = start; + // And if *both* are null + if (start == 0L) { + if (unselectOthers) + unselectAll(); + return; + } + // In case there is only one note to select + if (start == end) { + if (unselectOthers) + unselectAllBut(start); + else + start->setSelected(true); + return; + } + + // Free layout baskets should select range as if we were drawing a rectangle between start and end: + if (isFreeLayout()) { + QRect startRect( start->finalX(), start->finalY(), start->width(), start->finalHeight() ); + QRect endRect( end->finalX(), end->finalY(), end->width(), end->finalHeight() ); + QRect toSelect = startRect.unite(endRect); + selectNotesIn(toSelect, /*invertSelection=*/false, unselectOthers); + return; + } + + // Search the REAL first (and deselect the others before it) : + for (cur = firstNoteInStack(); cur != 0L; cur = cur->nextInStack()) { + if (cur == start || cur == end) + break; + if (unselectOthers) + cur->setSelected(false); + } + + // Select the notes after REAL start, until REAL end : + if (cur == start) + realEnd = end; + else if (cur == end) + realEnd = start; + + for (/*cur = cur*/; cur != 0L; cur = cur->nextInStack()) { + cur->setSelected(cur->isShown()); // Select all notes in the range, but only if they are shown + if (cur == realEnd) + break; + } + + if (!unselectOthers) + return; + + // Deselect the remaining notes : + if (cur) + cur = cur->nextInStack(); + for (/*cur = cur*/; cur != 0L; cur = cur->nextInStack()) + cur->setSelected(false); +} + +void Basket::focusInEvent(QFocusEvent*) +{ + // Focus cannot be get with Tab when locked, but a click can focus the basket! + if (isLocked()) { + if (m_button) + QTimer::singleShot( 0, m_button, SLOT(setFocus()) ); + } else + focusANote(); // hasFocus() is true at this stage, note will be focused +} + +void Basket::focusOutEvent(QFocusEvent*) +{ + if (m_focusedNote != 0L) + m_focusedNote->setFocused(false); +} + +void Basket::ensureNoteVisible(Note *note) +{ + if (!note->isShown()) // Logical! + return; + + if (note == editedNote()) // HACK: When filtering while editing big notes, etc... cause unwanted scrolls + return; + + int finalBottom = note->finalY() + QMIN(note->finalHeight(), visibleHeight()); + int finalRight = note->finalX() + QMIN(note->width() + (note->hasResizer() ? Note::RESIZER_WIDTH : 0), visibleWidth()); + ensureVisible( finalRight, finalBottom, 0,0 ); + ensureVisible( note->finalX(), note->finalY(), 0,0 ); +} + +void Basket::addWatchedFile(const QString &fullPath) +{ +// DEBUG_WIN << "Watcher>Add Monitoring Of : " + fullPath + ""; + m_watcher->addFile(fullPath); +} + +void Basket::removeWatchedFile(const QString &fullPath) +{ +// DEBUG_WIN << "Watcher>Remove Monitoring Of : " + fullPath + ""; + m_watcher->removeFile(fullPath); +} + +void Basket::watchedFileModified(const QString &fullPath) +{ + if (!m_modifiedFiles.contains(fullPath)) + m_modifiedFiles.append(fullPath); + // If a big file is saved by an application, notifications are send several times. + // We wait they are not sent anymore to considere the file complete! + m_watcherTimer.start(200/*ms*/, true); + DEBUG_WIN << "Watcher>Modified : " + fullPath + ""; +} + +void Basket::watchedFileDeleted(const QString &fullPath) +{ + Note *note = noteForFullPath(fullPath); + removeWatchedFile(fullPath); + if (note) { + NoteSelection *selection = selectedNotes(); + unselectAllBut(note); + noteDeleteWithoutConfirmation(); + while (selection) { + selection->note->setSelected(true); + selection = selection->nextStacked(); + } + } + DEBUG_WIN << "Watcher>Removed : " + fullPath + ""; +} + +void Basket::updateModifiedNotes() +{ + for (QValueList::iterator it = m_modifiedFiles.begin(); it != m_modifiedFiles.end(); ++it) { + Note *note = noteForFullPath(*it); + if (note) + note->content()->loadFromFile(/*lazyLoad=*/false); + } + m_modifiedFiles.clear(); +} + +bool Basket::setProtection(int type, QString key) +{ +#ifdef HAVE_LIBGPGME + if(type == PasswordEncryption || // Ask a new password + m_encryptionType != type || m_encryptionKey != key) + { + int savedType = m_encryptionType; + QString savedKey = m_encryptionKey; + + m_encryptionType = type; + m_encryptionKey = key; + m_gpg->clearCache(); + + if(saveAgain()) + { + emit propertiesChanged(this); + } + else + { + m_encryptionType = savedType; + m_encryptionKey = savedKey; + m_gpg->clearCache(); + return false; + } + } + return true; +#else + m_encryptionType = type; + m_encryptionKey = key; + return false; +#endif +} + +bool Basket::saveAgain() +{ + bool result = false; + + m_watcher->stopScan(); + // Re-encrypt basket file: + result = save(); + // Re-encrypt every note files recursively: + if(result) + { + FOR_EACH_NOTE (note) + { + result = note->saveAgain(); + if(!result) + break; + } + } + m_watcher->startScan(); + return result; +} + +bool Basket::loadFromFile(const QString &fullPath, QString *string, bool isLocalEncoding) +{ + QByteArray array; + + if(loadFromFile(fullPath, &array)){ + if (isLocalEncoding) + *string = QString::fromLocal8Bit(array.data(), array.size()); + else + *string = QString::fromUtf8(array.data(), array.size()); + return true; + } + else + return false; +} + +bool Basket::isEncrypted() +{ + return (m_encryptionType != NoEncryption); +} + +bool Basket::isFileEncrypted() +{ + QFile file(fullPath() + ".basket"); + + if (file.open(IO_ReadOnly)){ + QString line; + + file.readLine(line, 32); + if(line.startsWith("-----BEGIN PGP MESSAGE-----")) + return true; + } + return false; +} + +bool Basket::loadFromFile(const QString &fullPath, QByteArray *array) +{ + QFile file(fullPath); + bool encrypted = false; + + if (file.open(IO_ReadOnly)){ + *array = file.readAll(); + const char* magic = "-----BEGIN PGP MESSAGE-----"; + uint i = 0; + + if(array->size() > strlen(magic)) + for (i = 0; array->at(i) == magic[i]; ++i) + ; + if (i == strlen(magic)) + { + encrypted = true; + } + file.close(); +#ifdef HAVE_LIBGPGME + if(encrypted) + { + QByteArray tmp(*array); + + tmp.detach(); + // Only use gpg-agent for private key encryption since it doesn't + // cache password used in symmetric encryption. + m_gpg->setUseGnuPGAgent(Settings::useGnuPGAgent() && m_encryptionType == PrivateKeyEncryption); + if(m_encryptionType == PrivateKeyEncryption) + m_gpg->setText(i18n("Please enter the password for the following private key:"), false); + else + m_gpg->setText(i18n("Please enter the password for the basket %1:").arg(basketName()), false); // Used when decrypting + return m_gpg->decrypt(tmp, array); + } +#else + if(encrypted) + { + return false; + } +#endif + return true; + } else + return false; +} + +bool Basket::saveToFile(const QString& fullPath, const QString& string, bool isLocalEncoding) +{ + QCString bytes = (isLocalEncoding ? string.local8Bit() : string.utf8()); + return saveToFile(fullPath, bytes, bytes.length()); +} + +bool Basket::saveToFile(const QString& fullPath, const QByteArray& array) +{ + return saveToFile(fullPath, array, array.size()); +} + +bool Basket::saveToFile(const QString& fullPath, const QByteArray& array, Q_ULONG length) +{ + bool success = true; + QByteArray tmp; + +#ifdef HAVE_LIBGPGME + if(isEncrypted()) + { + QString key = QString::null; + + // We only use gpg-agent for private key encryption and saving without + // public key doesn't need one. + m_gpg->setUseGnuPGAgent(false); + if(m_encryptionType == PrivateKeyEncryption) + { + key = m_encryptionKey; + // public key doesn't need password + m_gpg->setText("", false); + } + else + m_gpg->setText(i18n("Please assign a password to the basket %1:").arg(basketName()), true); // Used when defining a new password + + success = m_gpg->encrypt(array, length, &tmp, key); + length = tmp.size(); + } + else + tmp = array; + +#else + success = !isEncrypted(); + if(success) + tmp = array; +#endif + /*if (success && (success = file.open(IO_WriteOnly))){ + success = (file.writeBlock(tmp) == (Q_LONG)tmp.size()); + file.close(); + }*/ + + if (success) + return safelySaveToFile(fullPath, tmp, length); + else + return false; +} + +/** Same as saveToFile(), but it is static, and does not crypt the data if needed. + * Basically, to save a file owned by a basket (a basket or a note file), use saveToFile(). + * But to save another file (eg. the basket hierarchy), use this safelySaveToFile() static method. + */ +/*static*/ bool Basket::safelySaveToFile(const QString& fullPath, const QByteArray& array, Q_ULONG length) +{ + // Here, we take a double protection: + // - We use KSaveFile to write atomically to the file (either it's a success or the file is untouched) + // - We show a modal dialog to the user when no disk space is left or access is denied and retry every couple of seconds + + // Static, because safelySaveToFile() can be called a second time while blocked. + // Example: + // User type something and press Enter: safelySaveToFile() is called and block. + // Three seconds later, a timer ask to save changes, and this second safelySaveToFile() block too. + // Do not show the dialog twice in this case! + static DiskErrorDialog *dialog = 0; + + //std::cout << "---------- Saving " << fullPath << ":" << std::endl; + bool openSuccess; + bool closeSuccess; + bool errorWhileWritting; + do { + KSaveFile saveFile(fullPath); + //std::cout << "==>>" << std::endl << "SAVE FILE CREATED: " << strerror(saveFile.status()) << std::endl; + openSuccess = (saveFile.status() == 0 && saveFile.file() != 0); + if (openSuccess) { + saveFile.file()->writeBlock(array, length); + //std::cout << "FILE WRITTEN: " << strerror(saveFile.status()) << std::endl; + closeSuccess = saveFile.close(); + //std::cout << "FILE CLOSED: " << (closeSuccess ? "well" : "erroneous") << std::endl; + } + errorWhileWritting = (!openSuccess || !closeSuccess || saveFile.status() != 0); + if (errorWhileWritting) { + //std::cout << "ERROR DETECTED" << std::endl; + if (dialog == 0) { + //std::cout << "Opening dialog for " << fullPath << std::endl; + dialog = new DiskErrorDialog( + (openSuccess + ? i18n("Insufficient Disk Space to Save Basket Data") + : i18n("Wrong Basket File Permissions") + ), + (openSuccess + ? i18n("Please remove files on the disk %1 to let the application safely save your changes.") + .arg(KIO::findPathMountPoint(fullPath)) + : i18n("File permissions are bad for %1. Please check that you have write access to it and the parent folders.") + .arg(fullPath) + ), + kapp->activeWindow() + ); + } + if (!dialog->isShown()) + dialog->show(); + const int retryDelay = 1000/*ms*/; + const int sleepDelay = 50/*ms*/; + for (int i = 0; i < retryDelay / sleepDelay; ++i) { + kapp->processEvents(); + usleep(sleepDelay); + } + } + } while (errorWhileWritting); + if (dialog) { + delete dialog; + dialog = 0; + } + + return true; // Hum...?! +} + +/*static*/ bool Basket::safelySaveToFile(const QString& fullPath, const QString& string, bool isLocalEncoding) +{ + QCString bytes = (isLocalEncoding ? string.local8Bit() : string.utf8()); + return safelySaveToFile(fullPath, bytes, bytes.length() - 1); +} + +/*static*/ bool Basket::safelySaveToFile(const QString& fullPath, const QByteArray& array) +{ + return safelySaveToFile(fullPath, array, array.size()); +} + +DiskErrorDialog::DiskErrorDialog(const QString &titleMessage, const QString &message, QWidget *parent) + : KDialogBase(KDialogBase::Plain, i18n("Save Error"), + (KDialogBase::ButtonCode)0, (KDialogBase::ButtonCode)0, parent, /*name=*/"DiskError") +{ + //enableButtonCancel(false); + //enableButtonClose(false); + //enableButton(Close, false); + //enableButtonOK(false); + setModal(true); + QHBoxLayout *layout = new QHBoxLayout(plainPage(), /*margin=*/0, spacingHint()); + QPixmap icon = kapp->iconLoader()->loadIcon("hdd_unmount", KIcon::NoGroup, 64, KIcon::DefaultState, /*path_store=*/0L, /*canReturnNull=*/true); + QLabel *iconLabel = new QLabel(plainPage()); + iconLabel->setPixmap(icon); + iconLabel->setFixedSize(iconLabel->sizeHint()); + QLabel *label = new QLabel("

      " + titleMessage + "

      " + message + "

      ", plainPage()); + if (!icon.isNull()) + layout->addWidget(iconLabel); + layout->addWidget(label); +} + +DiskErrorDialog::~DiskErrorDialog() +{ +} + +void DiskErrorDialog::closeEvent(QCloseEvent *event) +{ + event->ignore(); +} + +void DiskErrorDialog::keyPressEvent(QKeyEvent*) +{ + // Escape should not close the window... +} + +void Basket::lock() +{ +#ifdef HAVE_LIBGPGME + closeEditor(); + m_gpg->clearCache(); + m_locked = true; + enableActions(); + deleteNotes(); + m_loaded = false; + m_loadingLaunched = false; + updateContents(); +#endif +} + +#if 0 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "kdirwatch.h" +#include +#include + +#include +#include + +#include "basket.h" +#include "note.h" +#include "notefactory.h" +#include "variouswidgets.h" +#include "linklabel.h" +#include "global.h" +#include "container.h" +#include "xmlwork.h" +#include "settings.h" +#include "popupmenu.h" +#include "debugwindow.h" +#include "exporterdialog.h" + + +/** Basket */ + +const int Basket::c_updateTime = 200; + + + +// Remove the note from the basket and delete the associated file +// If the note mirror a file, it will ask before deleting or not the file +// But if askForMirroredFile is false, it willn't ask NOR delete the MIRRORED file +// (it will anyway delete the file if it is not a mirror) +void Basket::delNote(Note *note, bool askForMirroredFile) +{ +//... + if (hasFocus()) + focusANote(); // We need note->next() and note->previous() here [BUT deleted note should be hidden] + if (note->isSelected()) + note->setSelected(false); //removeSelectedNote(); + + relayoutNotes(); + recolorizeNotes(); + resetInsertTo(); // If we delete the first or the last, pointer to it is invalid + save(); + + if (note == m_startOfShiftSelectionNote) + m_startOfShiftSelectionNote = 0L; + + if (isDuringEdit() && m_editor->editedNote() == note) + closeEditor(false); +//... +} + + +// Calculate where to paste or drop +void Basket::computeInsertPlace(const QPoint &cursorPosition) +{ + int y = cursorPosition.y(); + + if (countShown() == 0) + return; + + // TODO: Memorize the last hovered note to avoid a new computation on dragMoveEvent !! + // If the mouse is not over the last note, compute which new is : + // TODO: Optimization : start from m_insertAtNote and compare y position to search before or after (or the same) + for (Note *it = firstNote(); it != 0L; it = it->next()) + if ( (it->isShown()) && (it->y() + it->height() >= y) && (it->y() < y) ) { + int center = it->y() + (it->height() / 2); + m_insertAtNote = it; + m_insertAfter = y > center; + return; + } + // Else, there is at least one shown note but cursor hover NO note, so we are after the last shown note + m_insertAtNote = lastShownNote(); + m_insertAfter = true; + + // Code for rectangular notes : + /*QRect globalRect = it->rect(); + globalRect.moveTopLeft(it->pos() + contentsY()); + if ( globalRect.contains(curPos) ) { + it->doInterestingThing(); + }*/ +} + +void Basket::dragMoveEvent(QDragMoveEvent* event) +{ +// m_isDuringDrag = true; + + if (isLocked()) + return; + +// FIXME: viewportToContents does NOT work !!! +// QPoint pos = viewportToContents(event->pos()); + QPoint pos( event->pos().x() + contentsX(), event->pos().y() + contentsY() ); + +// if (insertAtCursorPos()) + computeInsertPlace(pos); + + showFrameInsertTo(); + acceptDropEvent(event); + + // A workarround since QScrollView::dragAutoScroll seem to have no effect : + ensureVisible(event->pos().x() + contentsX(), event->pos().y() + contentsY(), 30, 30); +// QScrollView::dragMoveEvent(event); +} + +void Basket::dropEvent(QDropEvent *event) +{ + QPoint pos = event->pos(); + std::cout << "Drop Event at position " << pos.x() << ":" << pos.y() << std::endl; + m_isDuringDrag = false; + emit resetStatusBarText(); + + if (isLocked()) + return; + + NoteFactory::dropNote( event, this, true, event->action(), dynamic_cast(event->source()) ); + // TODO: need to know if we really inserted an (or several!!!!) note !!! + ensureNoteVisible(lastInsertedNote()); + unselectAllBut(lastInsertedNote()); + setFocusedNote(lastInsertedNote()); + + resetInsertTo(); +} + +void Basket::moveOnTop() +{ + if (m_countSelecteds == 0) + return; + + Note *endOfBrowse = firstShownNote(); + Note *topNote = firstNote(); + Note *prev; + for (Note *it = lastShownNote(); it != 0L; ) { + prev = it->previous(); + if (it->isSelected()) { + m_insertAtNote = topNote; + m_insertAfter = false; + changeNotePlace(it); + topNote = it; + } + if (it == endOfBrowse) + break; + it = prev; + } + ensureNoteVisible(firstShownNote()); + ensureNoteVisible(m_focusedNote); +} + +void Basket::moveOnBottom() +{ + if (m_countSelecteds == 0) + return; + + Note *endOfBrowse = lastShownNote(); + Note *bottomNote = lastNote(); + Note *next; + for (Note *it = firstShownNote(); it != 0L; ) { + next = it->next(); + if (it->isSelected()) { + m_insertAtNote = bottomNote; + m_insertAfter = true; + changeNotePlace(it); + bottomNote = it; + } + if (it == endOfBrowse) + break; + it = next; + } + ensureNoteVisible(lastShownNote()); + ensureNoteVisible(m_focusedNote); +} + +void Basket::moveNoteUp() +{ + if (m_countSelecteds == 0) + return; + + // Begin from the top (important move all selected notes one note up + // AND to quit early if a selected note is the first shown one + for (Note *it = firstShownNote(); it != 0L; it = it->next()) { + if (it->isSelected() && it->isShown()) { // it->isShown() not necessary, but in case... + if (it == firstShownNote()) + return; // No way... + m_insertAtNote = nextShownNoteFrom(it, -1); // Previous shown note + if (m_insertAtNote == 0L) { // Should not appends, since it's not the first shown note, + resetInsertTo(); // there SHOULD be one before + return; + } + m_insertAfter = false; + changeNotePlace(it); + } + if (it == lastShownNote()) + break; + } + ensureNoteVisible(m_focusedNote); +} + +void Basket::moveNoteDown() +{ + if (m_countSelecteds == 0) + return; + + // Begin from the bottom (important move all selected notes one note down + // AND to quit early if a selected note is the last shown one + for (Note *it = lastShownNote(); it != 0L; it = it->previous()) { + if (it->isSelected() && it->isShown()) { // it->isShown() not necessary, but in case... + if (it == lastShownNote()) + return; // No way... + m_insertAtNote = nextShownNoteFrom(it, 1); // Next shown note + if (m_insertAtNote == 0L) { // Should not appends, since it's not the last shown note, + resetInsertTo(); // there SHOULD be one before + return; + } + m_insertAfter = true; + changeNotePlace(it); + } + if (it == firstShownNote()) + break; + } + ensureNoteVisible(m_focusedNote); +} + +#endif // #if 0 + +#include "basket.moc" diff --git a/src/basket.desktop b/src/basket.desktop new file mode 100644 index 0000000..5fcf3ef --- /dev/null +++ b/src/basket.desktop @@ -0,0 +1,34 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Application + +Exec=basket %f +MimeType=application/x-basket-archive;application/x-basket-template +Icon=basket + +Name=BasKet Note Pads +Name[de]=BasKet Notizblätter +Name[es]=Blocs de notas BasKet +Name[fr]=Blocs notes BasKet +Name[it]=Blocco appunti BasKet +Name[ja]=BasKet メモパッド +Name[nb]=Kurvnotat +Name[nn]=Korgnotat +Name[pt]=Bloco de Notas BasKet +Name[ru]=Ðльбом заметок BasKet +Name[xx]=xxBasKet Note Padsxx +Name[tr]=BasKet + +Comment=Taking care of your ideas. +Comment[de]=Bewahren Sie Ihre Ideen. +Comment[es]=Cuidando de sus ideas. +Comment[fr]=Prendre soin de vos idées. +Comment[it]=Ci prendiamo cura delle tue idee +Comment[nb]=Ta vare pÃ¥ tankene dine. +Comment[nn]=Ta vare pÃ¥ tankane dine. +Comment[ja]=ã‚ãªãŸã®ã‚¢ã‚¤ãƒ‡ã‚¢ã®ãŠä¸–話をã—ã¾ã™ã€‚ +Comment[pt]=Cuidando das suas ideias. +Comment[ru]=ЗаботимÑÑ Ð¾ ваших идеÑÑ…. +Comment[xx]=xxTaking care of your ideas.xx +Comment[tr]=Not Tutma Aracı +Categories=KDE;Application;Utility;TextEditor; diff --git a/src/basket.h b/src/basket.h new file mode 100644 index 0000000..4e0331f --- /dev/null +++ b/src/basket.h @@ -0,0 +1,835 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BASKET_H +#define BASKET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "filter.h" +#include "note.h" // For Note::Zone +#include "config.h" + +class QVBoxLayout; +class QDomDocument; +class QDomElement; + +class Basket; +class Note; +class NoteEditor; +class Tag; +#ifdef HAVE_LIBGPGME +class KGpgMe; +#endif + +/** Provide a dialog to avert the user the disk is full. + * This dialog is modal and is shown until the user has made space on the disk. + * @author S�astien Laot + */ +class DiskErrorDialog : public KDialogBase +{ + Q_OBJECT + public: + DiskErrorDialog(const QString &titleMessage, const QString &message, QWidget *parent = 0); + ~DiskErrorDialog(); + protected: + void closeEvent(QCloseEvent *event); + void keyPressEvent(QKeyEvent*); +}; + + +/** A list of flags to set how notes are inserted/plugged in the basket + * Declare a varible with the type PlugOptions::Flags and assign a value like PlugOptions::DoSelection... + * @author S�astien Laot + */ +namespace PlugOptions +{ + enum Flags { + SelectOnlyNewNotes = 0x01, /// << Unselect every notes in the basket and select the newly inserted ones + DoTagsInheriting = 0x02 /// << The new notes inherit the tags of the sibbling note + }; + // TODO: FocusLastInsertedNote (last visible!), EnsureVisibleAddedNotes, PopupFeebackBaloon (if not called by hand), AnimateNewPosition, FeedbackUnmatched + // TODO: moveNoteInTree(bool animate); +} + +/** This represent a hierarchy of the selected classes. + * If this is null, then there is no selected note. + */ +class NoteSelection +{ + public: + NoteSelection() : note(0), parent(0), firstChild(0), next(0), fullPath() {} + NoteSelection(Note *n) : note(n), parent(0), firstChild(0), next(0), fullPath() {} + + Note *note; + NoteSelection *parent; + NoteSelection *firstChild; + NoteSelection *next; + QString fullPath; // Needeed for 'Cut' code to store temporary path of the cutted note. + + NoteSelection* firstStacked(); + NoteSelection* nextStacked(); + void append(NoteSelection *node); + int count(); + + QValueList parentGroups(); +}; + +/** This store all needed information when exporting to HTML + */ +class HtmlExportData +{ + public: + QString iconsFolderPath; + QString iconsFolderName; + QString imagesFolderPath; + QString imagesFolderName; + QString dataFolderPath; + QString dataFolderName; + bool formatForImpression; + bool embedLinkedFiles; + bool embedLinkedFolders; +}; + +/** This class handle Basket and add a FilterWidget on top of it. + * @author S�astien Laot + */ +class DecoratedBasket : public QWidget +{ + Q_OBJECT + public: + DecoratedBasket(QWidget *parent, const QString &folderName, const char *name = 0, WFlags fl = 0); + ~DecoratedBasket(); + void setFilterBarPosition(bool onTop); + void resetFilter(); + void setFilterBarShown(bool show, bool switchFocus = true); + bool isFilterBarShown() { return m_filter->isShown(); } + const FilterData& filterData() { return m_filter->filterData(); } + FilterBar* filterBar() { return m_filter; } + Basket* basket() { return m_basket; } + private: + QVBoxLayout *m_layout; + FilterBar *m_filter; + Basket *m_basket; +}; + +class TransparentWidget : public QWidget +{ + Q_OBJECT + public: + TransparentWidget(Basket *basket); + void setPosition(int x, int y); + //void reparent(QWidget *parent, WFlags f, const QPoint &p, bool showIt = FALSE); + protected: + void paintEvent(QPaintEvent*); + void mouseMoveEvent(QMouseEvent *event); + bool eventFilter(QObject *object, QEvent *event); + private: + Basket *m_basket; + int m_x; + int m_y; +}; + +/** + * @author S�astien Laot + */ +class Basket : public QScrollView, public QToolTip +{ +/// CONSTRUCTOR AND DESTRUCTOR: + Q_OBJECT + public: + enum EncryptionTypes { + NoEncryption = 0, + PasswordEncryption = 1, + PrivateKeyEncryption = 2 + }; + + public: + Basket(QWidget *parent, const QString &folderName); + ~Basket(); + +/// USER INTERACTION: + private: + bool m_noActionOnMouseRelease; + bool m_ignoreCloseEditorOnNextMouseRelease; + QPoint m_pressPos; + bool m_canDrag; + public: + void viewportResizeEvent(QResizeEvent *); + void drawContents(QPainter *painter, int clipX, int clipY, int clipWidth, int clipHeight); + void enterEvent(QEvent *); + void leaveEvent(QEvent *); + void contentsMouseMoveEvent(QMouseEvent *event); + void contentsMousePressEvent(QMouseEvent *event); + void contentsMouseReleaseEvent(QMouseEvent *event); + void contentsMouseDoubleClickEvent(QMouseEvent *event); + void contentsContextMenuEvent(QContextMenuEvent *event); + void updateNote(Note *note); + void clickedToInsert(QMouseEvent *event, Note *clicked = 0, int zone = 0); + private slots: + void setFocusIfNotInPopupMenu(); + +/// LAYOUT: + private: + Note *m_firstNote; + int m_columnsCount; + bool m_mindMap; + Note *m_resizingNote; + int m_pickedResizer; + Note *m_movingNote; + QPoint m_pickedHandle; + public: + int tmpWidth; + int tmpHeight; + public: + void unsetNotesWidth(); + void relayoutNotes(bool animate); + Note* noteAt(int x, int y); + inline Note* firstNote() { return m_firstNote; } + inline int columnsCount() { return m_columnsCount; } + inline bool isColumnsLayout() { return m_columnsCount > 0; } + inline bool isFreeLayout() { return m_columnsCount <= 0; } + inline bool isMindMap() { return isFreeLayout() && m_mindMap; } + Note* resizingNote() { return m_resizingNote; } + void deleteNotes(); + Note* lastNote(); + void setDisposition(int disposition, int columnCount); + void equalizeColumnSizes(); + +/// NOTES INSERTION AND REMOVAL: + public: + /// The following methods assume that the note(s) to insert already all have 'this' as the parent basket: + void prependNoteIn( Note *note, Note *in); /// << Add @p note (and the next linked notes) as the first note(s) of the group @p in. + void appendNoteIn( Note *note, Note *in); /// << Add @p note (and the next linked notes) as the last note(s) of the group @p in. + void appendNoteAfter( Note *note, Note *after); /// << Add @p note (and the next linked notes) just after (just below) the note @p after. + void appendNoteBefore(Note *note, Note *before); /// << Add @p note (and the next linked notes) just before (just above) the note @p before. + void groupNoteAfter( Note *note, Note *with); /// << Add a group at @p with place, move @p with in it, and add @p note (and the next linked notes) just after the group. + void groupNoteBefore( Note *note, Note *with); /// << Add a group at @p with place, move @p with in it, and add @p note (and the next linked notes) just before the group. + void unplugNote( Note *note); /// << Unplug @p note (and its child notes) from the basket (and also decrease counts...). + /// << After that, you should delete the notes yourself. Do not call prepend/append/group... functions two times: unplug and ok + void ungroupNote( Note *group); /// << Unplug @p group but put child notes at its place. + /// And this one do almost all the above methods depending on the context: + void insertNote(Note *note, Note *clicked, int zone, const QPoint &pos = QPoint(), bool animateNewPosition = false); + void insertCreatedNote(Note *note); + /// And working with selections: + void unplugSelection(NoteSelection *selection); + void insertSelection(NoteSelection *selection, Note *after); + void selectSelection(NoteSelection *selection); + private: + void preparePlug(Note *note); + private: + Note *m_clickedToInsert; + int m_zoneToInsert; + QPoint m_posToInsert; + Note *m_savedClickedToInsert; + int m_savedZoneToInsert; + QPoint m_savedPosToInsert; + bool m_isInsertPopupMenu; + public: + void saveInsertionData(); + void restoreInsertionData(); + void resetInsertionData(); + public slots: + void insertEmptyNote(int type); + void insertWizard(int type); + void insertColor(const QColor &color); + void insertImage(const QPixmap &image); + void pasteNote(QClipboard::Mode mode = QClipboard::Clipboard); + void delayedCancelInsertPopupMenu(); + void setInsertPopupMenu() { m_isInsertPopupMenu = true; } + void cancelInsertPopupMenu() { m_isInsertPopupMenu = false; } + private slots: + void hideInsertPopupMenu(); + void timeoutHideInsertPopupMenu(); + +/// TOOL TIPS: + protected: + void maybeTip(const QPoint &pos); + +/// ANIMATIONS: + private: + QValueList m_animatedNotes; + QTimer m_animationTimer; + int m_deltaY; + QTime m_lastFrameTime; + static const int FRAME_DELAY; + private slots: + void animateObjects(); + public slots: + void animateLoad(); + public: + void addAnimatedNote(Note *note); + +/// LOAD AND SAVE: + private: + bool m_loaded; + bool m_loadingLaunched; + bool m_locked; + bool m_shouldConvertPlainTextNotes; + QFrame* m_decryptBox; + QPushButton* m_button; + int m_encryptionType; + QString m_encryptionKey; +#ifdef HAVE_LIBGPGME + KGpgMe* m_gpg; +#endif + QTimer m_inactivityAutoLockTimer; + void enableActions(); + + private slots: + void loadNotes(const QDomElement ¬es, Note *parent); + void saveNotes(QDomDocument &document, QDomElement &element, Note *parent); + void unlock(); +protected slots: + void inactivityAutoLockTimeout(); +public slots: + void load(); + void loadProperties(const QDomElement &properties); + void saveProperties(QDomDocument &document, QDomElement &properties); + bool save(); + public: + bool isEncrypted(); + bool isFileEncrypted(); + bool isLocked() { return m_locked; }; + void lock(); + bool isLoaded() { return m_loaded; }; + bool loadingLaunched() { return m_loadingLaunched; }; + bool loadFromFile(const QString &fullPath, QString* string, bool isLocalEncoding = false); + bool loadFromFile(const QString &fullPath, QByteArray* array); + bool saveToFile(const QString& fullPath, const QByteArray& array); + bool saveToFile(const QString& fullPath, const QByteArray& array, Q_ULONG length); + bool saveToFile(const QString& fullPath, const QString& string, bool isLocalEncoding = false); + static bool safelySaveToFile(const QString& fullPath, const QByteArray& array); + static bool safelySaveToFile(const QString& fullPath, const QByteArray& array, Q_ULONG length); + static bool safelySaveToFile(const QString& fullPath, const QString& string, bool isLocalEncoding = false); + bool setProtection(int type, QString key); + int encryptionType() { return m_encryptionType; }; + QString encryptionKey(){ return m_encryptionKey; }; + bool saveAgain(); + +/// BACKGROUND: + private: + QColor m_backgroundColorSetting; + QString m_backgroundImageName; + QPixmap *m_backgroundPixmap; + QPixmap *m_opaqueBackgroundPixmap; + QPixmap *m_selectedBackgroundPixmap; + bool m_backgroundTiled; + QColor m_textColorSetting; + public: + inline bool hasBackgroundImage() { return m_backgroundPixmap != 0; } + inline const QPixmap* backgroundPixmap() { return m_backgroundPixmap; } + inline bool isTiledBackground() { return m_backgroundTiled; } + inline QString backgroundImageName() { return m_backgroundImageName; } + inline QColor backgroundColorSetting() { return m_backgroundColorSetting; } + inline QColor textColorSetting() { return m_textColorSetting; } + QColor backgroundColor(); + QColor textColor(); + void setAppearance(const QString &icon, const QString &name, const QString &backgroundImage, const QColor &backgroundColor, const QColor &textColor); + void blendBackground(QPainter &painter, const QRect &rect, int xPainter = -1, int yPainter = -1, bool opaque = false, QPixmap *bg = 0); + void unbufferizeAll(); + void subscribeBackgroundImages(); + void unsubscribeBackgroundImages(); + +/// KEYBOARD SHORTCUT: + public: // Temporar: for deletion purpose + KAction *m_action; + private: + int m_shortcutAction; + private slots: + void activatedShortcut(); + public: + KShortcut shortcut() { return m_action->shortcut(); } + int shortcutAction() { return m_shortcutAction; } + void setShortcut(KShortcut shortcut, int action); + +/// USER INTERACTION: + private: + Note *m_hoveredNote; + int m_hoveredZone; + bool m_lockedHovering; + bool m_underMouse; + QRect m_inserterRect; + bool m_inserterShown; + bool m_inserterSplit; + bool m_inserterTop; + bool m_inserterGroup; + void placeInserter(Note *note, int zone); + void removeInserter(); + public: +// bool inserterShown() { return m_inserterShown; } + bool inserterSplit() { return m_inserterSplit; } + bool inserterGroup() { return m_inserterGroup; } + public slots: + void doHoverEffects(Note *note, Note::Zone zone, const QPoint &pos = QPoint(0, 0)); /// << @p pos is optionnal and only used to show the link target in the statusbar + void doHoverEffects(const QPoint &pos); + void doHoverEffects(); // The same, but using the current cursor position + void mouseEnteredEditorWidget(); + public: + void popupTagsMenu(Note *note); + void popupEmblemMenu(Note *note, int emblemNumber); + void addTagToSelectedNotes(Tag *tag); + void removeTagFromSelectedNotes(Tag *tag); + void removeAllTagsFromSelectedNotes(); + void addStateToSelectedNotes(State *state); + void changeStateOfSelectedNotes(State *state); + bool selectedNotesHaveTags(); + const QRect& inserterRect() { return m_inserterRect; } + bool inserterShown() { return m_inserterShown; } + void drawInserter(QPainter &painter, int xPainter, int yPainter); + DecoratedBasket* decoration(); + State *stateForTagFromSelectedNotes(Tag *tag); + public slots: + void activatedTagShortcut(Tag *tag); + void recomputeAllStyles(); + void removedStates(const QValueList &deletedStates); + private slots: + void toggledTagInMenu(int id); + void toggledStateInMenu(int id); + void unlockHovering(); + void disableNextClick(); + void contentsMoved(); + public: + Note *m_tagPopupNote; + private: + Tag *m_tagPopup; + QTime m_lastDisableClick; + +/// SELECTION: + private: + bool m_isSelecting; + bool m_selectionStarted; + bool m_selectionInvert; + QPoint m_selectionBeginPoint; + QPoint m_selectionEndPoint; + QRect m_selectionRect; + QTimer m_autoScrollSelectionTimer; + void stopAutoScrollSelection(); + private slots: + void doAutoScrollSelection(); + public: + inline bool isSelecting() { return m_isSelecting; } + inline const QRect& selectionRect() { return m_selectionRect; } + void selectNotesIn(const QRect &rect, bool invertSelection, bool unselectOthers = true); + void resetWasInLastSelectionRect(); + void selectAll(); + void unselectAll(); + void invertSelection(); + void unselectAllBut(Note *toSelect); + void invertSelectionOf(Note *toSelect); + QColor selectionRectInsideColor(); + Note* theSelectedNote(); + NoteSelection* selectedNotes(); + +/// BLANK SPACES DRAWING: + private: + QValueList m_blankAreas; + void recomputeBlankRects(); + QWidget *m_cornerWidget; + +/// COMMUNICATION WITH ITS CONTAINER: + signals: + void postMessage(const QString &message); /// << Post a temporar message in the statusBar. + void setStatusBarText(const QString &message); /// << Set the permanent statusBar text or reset it if message isEmpty(). + void resetStatusBarText(); /// << Equivalent to setStatusBarText(""). + void propertiesChanged(Basket *basket); + void countsChanged(Basket *basket); + public slots: + void linkLookChanged(); + void signalCountsChanged(); + private: + QTimer m_timerCountsChanged; + private slots: + void countsChangedTimeOut(); + +/// NOTES COUNTING: + public: + void addSelectedNote() { ++m_countSelecteds; signalCountsChanged(); } + void removeSelectedNote() { --m_countSelecteds; signalCountsChanged(); } + void resetSelectedNote() { m_countSelecteds = 0; signalCountsChanged(); } // FIXME: Useful ??? + int count() { return m_count; } + int countFounds() { return m_countFounds; } + int countSelecteds() { return m_countSelecteds; } + private: + int m_count; + int m_countFounds; + int m_countSelecteds; + +/// PROPERTIES: + public: + QString basketName() { return m_basketName; } + QString icon() { return m_icon; } + QString folderName() { return m_folderName; } + QString fullPath(); + QString fullPathForFileName(const QString &fileName); // Full path of an [existing or not] note in this basket + static QString fullPathForFolderName(const QString &folderName); + private: + QString m_basketName; + QString m_icon; + QString m_folderName; + +/// ACTIONS ON SELECTED NOTES FROM THE INTERFACE: + public slots: + void noteEdit(Note *note = 0L, bool justAdded = false, const QPoint &clickedPoint = QPoint()); + void showEditedNoteWhileFiltering(); + void noteDelete(); + void noteDeleteWithoutConfirmation(bool deleteFilesToo = true); + void noteCopy(); + void noteCut(); + void noteOpen(Note *note = 0L); + void noteOpenWith(Note *note = 0L); + void noteSaveAs(); + void noteGroup(); + void noteUngroup(); + void noteMoveOnTop(); + void noteMoveOnBottom(); + void noteMoveNoteUp(); + void noteMoveNoteDown(); + void moveSelectionTo(Note *here, bool below); + public: + enum CopyMode { CopyToClipboard, CopyToSelection, CutToClipboard }; + void doCopy(CopyMode copyMode); + bool selectionIsOneGroup(); + Note* selectedGroup(); + Note* firstSelected(); + Note* lastSelected(); + +/// NOTES EDITION: + private: + NoteEditor *m_editor; + //QWidget *m_rightEditorBorder; + TransparentWidget *m_leftEditorBorder; + TransparentWidget *m_rightEditorBorder; + bool m_redirectEditActions; + int m_editorWidth; + int m_editorHeight; + QTimer m_inactivityAutoSaveTimer; + bool m_doNotCloseEditor; + int m_editParagraph; + int m_editIndex; + public: + bool isDuringEdit() { return m_editor; } + bool redirectEditActions() { return m_redirectEditActions; } + bool hasTextInEditor(); + bool hasSelectedTextInEditor(); + bool selectedAllTextInEditor(); + Note* editedNote(); + protected slots: + void selectionChangedInEditor(); + void contentChangedInEditor(); + void inactivityAutoSaveTimeout(); + public slots: + void editorCursorPositionChanged(); + private: + int m_editorX; + int m_editorY; + public slots: + void placeEditor(bool andEnsureVisible = false); + void placeEditorAndEnsureVisible(); + bool closeEditor(); + void closeEditorDelayed(); + void updateEditorAppearance(); + void editorPropertiesChanged(); + void openBasket(); + void closeBasket(); + +/// FILTERING: + public slots: + void newFilter(const FilterData &data, bool andEnsureVisible = true); + void cancelFilter(); + void validateFilter(); + void filterAgain(bool andEnsureVisible = true); + void filterAgainDelayed(); + bool isFiltering(); + +/// DRAG AND DROP: + private: + bool m_isDuringDrag; + QValueList m_draggedNotes; + public: + static void acceptDropEvent(QDropEvent *event, bool preCond = true); + void contentsDropEvent(QDropEvent *event); + void blindDrop(QDropEvent* event); + bool isDuringDrag() { return m_isDuringDrag; } + QValueList draggedNotes() { return m_draggedNotes; } + protected: + void contentsDragEnterEvent(QDragEnterEvent*); + void contentsDragMoveEvent(QDragMoveEvent *event); + void contentsDragLeaveEvent(QDragLeaveEvent*); + public slots: + void slotCopyingDone2(KIO::Job *job); + public: + Note* noteForFullPath(const QString &path); + +/// EXPORTATION: + public: + QValueList usedStates(); + static QString saveGradientBackground(const QColor &color, const QFont &font, const QString &folder); + + public: + void listUsedTags(QValueList &list); + +/// MANAGE FOCUS: + private: + Note *m_focusedNote; + public: + void setFocusedNote(Note *note); + void focusANote(); + void focusANonSelectedNoteAbove(bool inSameColumn); + void focusANonSelectedNoteBelow(bool inSameColumn); + void focusANonSelectedNoteBelowOrThenAbove(); + void focusANonSelectedNoteAboveOrThenBelow(); + Note* focusedNote() { return m_focusedNote; } + Note* firstNoteInStack(); + Note* lastNoteInStack(); + Note* firstNoteShownInStack(); + Note* lastNoteShownInStack(); + void selectRange(Note *start, Note *end, bool unselectOthers = true); /// FIXME: Not really a focus related method! + void ensureNoteVisible(Note *note); + virtual void keyPressEvent(QKeyEvent *event); + virtual void focusInEvent(QFocusEvent*); + virtual void focusOutEvent(QFocusEvent*); + QRect noteVisibleRect(Note *note); // clipped global (desktop as origin) rectangle + Note* firstNoteInGroup(); + Note *noteOnHome(); + Note *noteOnEnd(); + + enum NoteOn { LEFT_SIDE = 1, RIGHT_SIDE, TOP_SIDE, BOTTOM_SIDE }; + Note* noteOn(NoteOn side); + +/// REIMPLEMENTED: + public: + void deleteFiles(); + bool convertTexts(); + + + public: + void wheelEvent(QWheelEvent *event); + + + + public: + Note *m_startOfShiftSelectionNote; + + +/// THE NEW FILE WATCHER: + private: + KDirWatch *m_watcher; + QTimer m_watcherTimer; + QValueList m_modifiedFiles; + public: + void addWatchedFile(const QString &fullPath); + void removeWatchedFile(const QString &fullPath); + private slots: + void watchedFileModified(const QString &fullPath); + void watchedFileDeleted(const QString &fullPath); + void updateModifiedNotes(); + + +/// FROM OLD ARCHITECTURE ********************** + +public slots: + + void showFrameInsertTo() {} + void resetInsertTo() {} + + void computeInsertPlace(const QPoint &/*cursorPosition*/) { } + public: + + friend class SystemTray; + +/// SPEED OPTIMIZATION + private: + bool m_finishLoadOnFirstShow; + bool m_relayoutOnNextShow; + public: + void aboutToBeActivated(); +}; + + + + + + + + + +#if 0 + +#include +#include +#include +#include +#include +#include +#include + +#include "filter.h" + +class QFrame; +class QVBoxLayout; +class QCheckBox; +class QString; +class QColor; +class QPixmap; +class QAction; +class QStringList; +class QRect; + +class QDomElement; + +class KDirWatch; + +class Basket; +class Note; +class NoteEditorBase; + +/** Used to enqueue a file path when the Basket receive a file modification / creation / deletion + * It associate the file name with an event. + * All this queue will be treated later. + * TODO: rename to class WatcherEvent ? + * @author S�astien Laot + */ +class FileEvent +{ + public: + enum Event { Modified = 1, Created, Deleted, Renamed }; + FileEvent(Event evt, const QString &path) + : event(evt), filePath(path) + { } + public: // Because it must be fast and theire is no need to be private + Event event; + QString filePath; +}; + +/** Basket that contain some Notes. + * @author S�astien Laot + */ +clas s Bas ket : public QScrollView +{ + Q_OBJECT + public: + /** Construtor and destructor */ + Bask et(QWidget *parent, const QString &folderName, const char *name = "", WFlags fl = 0); + public: + protected: + virtual void contentsContextMenuEvent(QContextMenuEvent *event); + virtual void contentsMousePressEvent(QMouseEvent *event); // For redirected event !! + virtual void showEvent(QShowEvent *); + /** Drag and drop functions */ + virtual void dragEnterEvent(QDragEnterEvent*); + virtual void dragMoveEvent(QDragMoveEvent* event); + virtual void dragLeaveEvent(QDragLeaveEvent*); + public: + virtual void dropEvent(QDropEvent *event); + static void acceptDropEvent(QDropEvent *event, bool preCond = true); + bool canDragNote() { return !isEmpty(); } + void computeInsertPlace(const QPoint &cursorPosition); + Note* noteAtPosition(const QPoint &pos); + Note* duplicatedOf(Note *note); + void checkClipboard(); + void processActionAsYouType(QKeyEvent *event); + void exportToHTML(); + signals: + void nameChanged(Basket *basket, const QString &name); + void iconChanged(Basket *basket, const QString &icon); + void notesNumberChanged(Basket *basket); + public slots: + void linkLookChanged(); + void showNotesToolTipChanged(); + /** Notes manipulation */ + void insertNote(Note *note); + void delNote(Note *note, bool askForMirroredFile = true); + void changeNotePlace(Note *note); + void pasteNote(QClipboard::Mode mode = QClipboard::Clipboard); + void recolorizeNotes(); + void reloadMirroredFolder(); + void showMirrorOnlyOnceInfo(); + /** Selection of note(s) */ + void selectAll(); + void unselectAll(); + void unselectAllBut(Note *toSelect); + void invertSelection(); + void selectRange(Note *start, Note *end); + void clicked(Note *note, bool controlPressed, bool shiftPressed); + void setFocusedNote(Note *note); + void focusANote(); + void ensureVisibleNote(Note *note); + QRect noteRect(Note *note); // clipped global (desktop as origin) rectangle + /** Travel the list to find the next shown note, or the previous if step == -1, or the next after 10 if step == 10... */ + Note* nextShownNoteFrom(Note *note, int step); + /** Actions on (selected) notes */ + void editNote(Note *note, bool editAnnotations = false); + void editNote(); + void delNote(); + void copyNote(); + void cutNote(); + void openNote(); + void openNoteWith(); + void saveNoteAs(); + void moveOnTop(); + void moveOnBottom(); + void moveNoteUp(); + void moveNoteDown(); + public: + void dontCareOfCreation(const QString &path); + QString copyIcon(const QString &iconName, int size, const QString &destFolder); + QString copyFile(const QString &srcPath, const QString &destFolder, bool createIt = false); + protected slots: + void slotModifiedFile(const QString &path); + void slotCreatedFile(const QString &path); + void slotDeletedFile(const QString &path); + void slotUpdateNotes(); + void placeEditor(); + void closeEditor(bool save = true); + void clipboardChanged(bool selectionMode = false); + void selectionChanged(); + private: + QTimer m_updateTimer; + QPtrList m_updateQueue; + QStringList m_dontCare; + static const int c_updateTime; + private: + void load(); // Load is performed only once, during contructor + void loadNotes(const QDomElement ¬es); + bool importLauncher(const QString &type, const QDomElement &content, const QString &runCommand, + const QString &annotations/*, bool checked*/); + void computeShownNotes(); + + private: + KDirWatch *m_watcher; + NoteEditorBase *m_editor; + QKeyEvent *m_stackedKeyEvent; +}; + +#endif // #if 0 + +#endif // BASKET_H diff --git a/src/basket.lsm b/src/basket.lsm new file mode 100644 index 0000000..4ca358b --- /dev/null +++ b/src/basket.lsm @@ -0,0 +1,16 @@ +Begin3 +Title: BasKet Note Pads -- Taking care of your ideas. +Version: 1.0.3.1 +Entered-date: +Description: +Keywords: KDE Qt Basket Note Pad Item Drop Paste Checklist Stack +Author: Sébastien Laoût +Maintained-by: Sébastien Laoût +Home-page: http://basket.kde.org/ +Alternate-site: +Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils + xxxxxx basket-1.0.3.1.tar.gz + xxx basket-1.0.3.1.lsm +Platform: Linux. Needs KDE +Copying-policy: GPL +End diff --git a/src/basket_config_apps.desktop b/src/basket_config_apps.desktop new file mode 100644 index 0000000..66b0955 --- /dev/null +++ b/src/basket_config_apps.desktop @@ -0,0 +1,37 @@ +[Desktop Entry] +Encoding=UTF-8 +Icon=run +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=basket +X-KDE-FactoryName=basket_config_apps +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=basket +X-KDE-ParentComponents=basket,kontact_basketplugin +X-KDE-CfgDlgHierarchy=Basket +X-KDE-Weight=30 + +Name=Applications +Name[de]=Anwendungen +Name[es]=Aplicaciones +Name[fr]=Applications +Name[it]=Applicazioni +Name[ja]=アプリケーション +Name[nb]=Programmer +Name[nn]=Program +Name[pt]=Aplicações +Name[ru]=ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +Name[tr]=Uygulamalar +Comment=Applications +Comment[de]=Anwendungen +Comment[es]=Aplicaciones +Comment[fr]=Applications +Comment[it]=Applicazioni +Comment[ja]=アプリケーション +Comment[nb]=Programmer +Comment[nn]=Program +Comment[pt]=Aplicações +Comment[ru]=ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ +Comment[tr]=Uygulamalar diff --git a/src/basket_config_baskets.desktop b/src/basket_config_baskets.desktop new file mode 100644 index 0000000..11f2242 --- /dev/null +++ b/src/basket_config_baskets.desktop @@ -0,0 +1,37 @@ +[Desktop Entry] +Encoding=UTF-8 +Icon=basket +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=basket +X-KDE-FactoryName=basket_config_baskets +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=basket +X-KDE-ParentComponents=basket,kontact_basketplugin +X-KDE-CfgDlgHierarchy=Basket +X-KDE-Weight=10 + +Name=Baskets +Name[de]=Körbe +Name[es]=Cestas +Name[fr]=Paniers +Name[it]=Canestri +Name[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆ +Name[nb]=Kurver +Name[nn]=Korger +Name[pt]=Cestos +Name[ru]=Корзины +Name[tr]=Sepetler +Comment=Baskets +Comment[de]=Körbe +Comment[es]=Cestas +Comment[fr]=Paniers +Comment[it]=Canestri +Comment[ja]=ãƒã‚¹ã‚±ãƒƒãƒˆ +Comment[nb]=Kurver +Comment[nn]=Korger +Comment[pt]=Cestos +Comment[ru]=Корзины +Comment[tr]=Sepetler \ No newline at end of file diff --git a/src/basket_config_features.desktop b/src/basket_config_features.desktop new file mode 100644 index 0000000..dceae61 --- /dev/null +++ b/src/basket_config_features.desktop @@ -0,0 +1 @@ +# Was there in 0.6.0 Beta versions. Should not be used anymore. diff --git a/src/basket_config_general.desktop b/src/basket_config_general.desktop new file mode 100644 index 0000000..24d8534 --- /dev/null +++ b/src/basket_config_general.desktop @@ -0,0 +1,37 @@ +[Desktop Entry] +Encoding=UTF-8 +Icon=configure +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=basket +X-KDE-FactoryName=basket_config_general +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=basket +X-KDE-ParentComponents=basket,kontact_basketplugin +X-KDE-CfgDlgHierarchy=Basket +X-KDE-Weight=10 + +Name=General +Name[de]=Allgemein +Name[es]=General +Name[fr]=Général +Name[it]=Generale +Name[ja]=全般 +Name[nb]=Generelt +Name[nn]=Generelt +Name[pt]=Geral +Name[ru]=Общие +Name[tr]=Genel +Comment=General +Comment[de]=Allgemein +Comment[es]=General +Comment[fr]=Général +Comment[it]=Generale +Comment[ja]=全般 +Comment[nb]=Generelt +Comment[nn]=Generelt +Comment[pt]=Geral +Comment[ru]=Общие +Comment[de]=Genel \ No newline at end of file diff --git a/src/basket_config_new_notes.desktop b/src/basket_config_new_notes.desktop new file mode 100644 index 0000000..87474e9 --- /dev/null +++ b/src/basket_config_new_notes.desktop @@ -0,0 +1,37 @@ +[Desktop Entry] +Encoding=UTF-8 +Icon=filenew +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=basket +X-KDE-FactoryName=basket_config_new_notes +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=basket +X-KDE-ParentComponents=basket,kontact_basketplugin +X-KDE-CfgDlgHierarchy=Basket +X-KDE-Weight=10 + +Name=New Notes +Name[de]=Neue Notizen +Name[es]=Notas nuevas +Name[fr]=Nouvelles notes +Name[it]=Nuove note +Name[ja]=æ–°ã—ã„メモ +Name[nb]=Nye notat +Name[nn]=Nye notat +Name[pt]=Anotações novas +Name[ru]=Ðовые заметки +Name[tr]=Yeni Notlar +Comment=New Notes +Comment[de]=Neue Notizen +Comment[es]=Notas nuevas +Comment[fr]=Nouvelles notes +Comment[it]=Nuove note +Comment[ja]=æ–°ã—ã„メモ +Comment[nb]=Nye notat +Comment[nn]=Nye notat +Comment[pt]=Anotações novas +Comment[ru]=Ðовые заметки +Comment[tr]=Yeni Notlar \ No newline at end of file diff --git a/src/basket_config_notes.desktop b/src/basket_config_notes.desktop new file mode 100644 index 0000000..dceae61 --- /dev/null +++ b/src/basket_config_notes.desktop @@ -0,0 +1 @@ +# Was there in 0.6.0 Beta versions. Should not be used anymore. diff --git a/src/basket_config_notes_appearance.desktop b/src/basket_config_notes_appearance.desktop new file mode 100644 index 0000000..676cac4 --- /dev/null +++ b/src/basket_config_notes_appearance.desktop @@ -0,0 +1,35 @@ +[Desktop Entry] +Encoding=UTF-8 +Icon=colorize +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=basket +X-KDE-FactoryName=basket_config_notes_appearance +X-KDE-HasReadOnlyMode=false +X-KDE-ParentApp=basket +X-KDE-ParentComponents=basket,kontact_basketplugin +X-KDE-CfgDlgHierarchy=Basket +X-KDE-Weight=10 + +Name=Notes Appearance +Name[de]=Erscheinungsbild +Name[es]=Apariencia de las notas +Name[fr]=Apparence des notes +Name[it]=Aspetto delle note +Name[ja]=メモã®å¤–観 +Name[nb]=Notatutseende +Name[nn]=NotatutsjÃ¥nad +Name[ru]=Вид +Name[tr]=Not Görünümleri +Comment=Notes Appearance +Comment[de]=Erscheinungsbild der Notizen +Comment[es]=Apariencia de las notas +Comment[fr]=Apparence des notes +Comment[it]=Aspetto delle note +Comment[ja]=メモã®å¤–観 +Comment[nb]=Notatutseende +Comment[nn]=NotatutsjÃ¥nad +Comment[ru]=Вид +Comment[tr]=Not Görünümleri \ No newline at end of file diff --git a/src/basket_options.h b/src/basket_options.h new file mode 100644 index 0000000..f8bbf82 --- /dev/null +++ b/src/basket_options.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BASKET_OPTIONS_H +#define BASKET_OPTIONS_H + +#include +#include + +KCmdLineOptions basket_options[] = +{ + { "d", 0, 0 }, + { "debug", I18N_NOOP("Show the debug window"), 0 }, + { "f", 0, 0 }, + { "data-folder ", I18N_NOOP("Custom folder where to load and save basket data and application data (useful for debugging purpose)"), 0 }, + { "h", 0, 0 }, + { "start-hidden", I18N_NOOP("Hide the main window in the system tray icon on startup"), 0 }, + { "k", 0, 0 }, + { "use-drkonquy", I18N_NOOP("When crashing, use the standard KDE report dialog instead of sending an email"), 0 }, + { "+[file]", I18N_NOOP("Open basket archive or template"), 0 }, + KCmdLineLastOption +}; + +#endif // BASKET_OPTIONS_H diff --git a/src/basket_part.cpp b/src/basket_part.cpp new file mode 100644 index 0000000..0ba1e50 --- /dev/null +++ b/src/basket_part.cpp @@ -0,0 +1,102 @@ +/*************************************************************************** + * Copyright (C) 2003 by Petri Damsten * + * petri.damsten@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#include "basket_part.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "basketstatusbar.h" + +typedef KParts::GenericFactory< BasketPart > BasketFactory; +K_EXPORT_COMPONENT_FACTORY( libbasketpart, BasketFactory ) + +BasketPart::BasketPart( QWidget *parentWidget, const char *, + QObject *parent, const char *name, const QStringList & ) + : KParts::ReadWritePart(parent, name) +{ + // we need an instance + setInstance( BasketFactory::instance() ); + + BasketStatusBar* bar = new BasketStatusBar(new KParts::StatusBarExtension(this)); + // this should be your custom internal widget + m_view = new BNPView(parentWidget, "BNPViewPart", this, actionCollection(), bar); + connect(m_view, SIGNAL(setWindowCaption(const QString &)), this, SLOT(setCaption(const QString &))); + connect(m_view, SIGNAL(showPart()), this, SIGNAL(showPart())); + m_view->setFocusPolicy(QWidget::ClickFocus); + + // notify the part that this is our internal widget + setWidget(m_view); + + // set our XML-UI resource file + setXMLFile("basket_part.rc"); + + // we are read-write by default + setReadWrite(true); + + // we are not modified since we haven't done anything yet + setModified(false); +} + +BasketPart::~BasketPart() +{} + +void BasketPart::setReadWrite(bool rw) +{ + // TODO: notify your internal widget of the read-write state + ReadWritePart::setReadWrite(rw); +} + +void BasketPart::setModified(bool modified) +{ + // in any event, we want our parent to do it's thing + ReadWritePart::setModified(modified); +} + +bool BasketPart::openFile() +{ + // TODO + return false; +} + +bool BasketPart::saveFile() +{ + //TODO + return false; +} + +KAboutData *BasketPart::createAboutData() +{ + return new AboutData(); +} + +void BasketPart::setCaption(const QString &caption) +{ + emit setWindowCaption(caption); +} + +#include "basket_part.moc" diff --git a/src/basket_part.desktop b/src/basket_part.desktop new file mode 100644 index 0000000..789474d --- /dev/null +++ b/src/basket_part.desktop @@ -0,0 +1,21 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=basketPart +Name[br]=Perzhbasket +Name[ca]=Part per a basket +Name[el]=Τμήμαbasket +Name[es]=Componente de Basket +Name[et]=basket komponent +Name[it]=Componente basket +Name[ja]=basket パート +Name[nb]=kurvDel +Name[nn]=korgDel +Name[pt_BR]=Parte basket +Name[sv]=basket-del +Name[ta]=basketபாகம௠+Name[tr]=basket BileÅŸeni +Name[ru]=Модуль basket +MimeType=application/x-basket; +ServiceTypes=KParts/ReadOnlyPart,KParts/ReadWritePart +X-KDE-Library=libbasketpart +Type=Service diff --git a/src/basket_part.h b/src/basket_part.h new file mode 100644 index 0000000..6d9dc70 --- /dev/null +++ b/src/basket_part.h @@ -0,0 +1,91 @@ +/*************************************************************************** + * Copyright (C) 2003 by Petri Damsten * + * petri.damsten@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#ifndef _BASKETPART_H_ +#define _BASKETPART_H_ + +#include +#include + +class QWidget; +class QPainter; +class KURL; +class QMultiLineEdit; +class BNPView; + +/** + * This is a "Part". It that does all the real work in a KPart + * application. + * + * @short Main Part + * @author Petri Damsten + * @version 0.1 + */ +class BasketPart : public KParts::ReadWritePart +{ + Q_OBJECT +public: + /** + * Default constructor + */ + BasketPart(QWidget *parentWidget, const char *widgetName, + QObject *parent, const char *name, const QStringList &); + + /** + * Destructor + */ + virtual ~BasketPart(); + + /** + * This is a virtual function inherited from KParts::ReadWritePart. + * A shell will use this to inform this Part if it should act + * read-only + */ + virtual void setReadWrite(bool rw); + + /** + * Reimplemented to disable and enable Save action + */ + virtual void setModified(bool modified); + + static KAboutData *createAboutData(); + + signals: + void showPart(); + + protected: + /** + * This must be implemented by each part + */ + virtual bool openFile(); + + /** + * This must be implemented by each read-write part + */ + virtual bool saveFile(); + + protected slots: + void setCaption(const QString &caption); + + private: + BNPView *m_view; +}; + +#endif // _BASKETPART_H_ diff --git a/src/basket_part.rc b/src/basket_part.rc new file mode 100644 index 0000000..a73a0fe --- /dev/null +++ b/src/basket_part.rc @@ -0,0 +1,229 @@ + + + + + &Basket + + + + + &Export + + + + + + + + + + &Import + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + + + + + &Go + + + + + + + &Note + + + + + + + + + + + + + + + &Tags + + + &Insert + + + + + + + + + + + + + + + &Settings + + + + + + + + + + + &Help + + + + + + + + + + + + + + + Main Toolbar + + + + + + + + + + + Text Formating Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + &Export + + + + + + + + + + &Import + + + + + + + + + + + + + + + + + + &Import + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/basketdcopiface.h b/src/basketdcopiface.h new file mode 100644 index 0000000..718bcf9 --- /dev/null +++ b/src/basketdcopiface.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2003 by Petri Damsten * + * petri.damsten@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#ifndef BASKETDCOPINTERFACE_H +#define BASKETDCOPINTERFACE_H + +#include + +/** + @author Petri Damsten +*/ +class BasketDcopInterface : virtual public DCOPObject +{ + K_DCOP + k_dcop: + virtual ASYNC newBasket() = 0; + virtual void handleCommandLine() = 0; +}; + +#endif diff --git a/src/basketfactory.cpp b/src/basketfactory.cpp new file mode 100644 index 0000000..4006fbb --- /dev/null +++ b/src/basketfactory.cpp @@ -0,0 +1,159 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include + +#include "basketfactory.h" +#include "global.h" +#include "basket.h" +#include "xmlwork.h" +#include "note.h" // For balanced column width computation +#include "bnpview.h" + +/** BasketFactory */ + +// TODO: Don't create a basket with a name that already exists! + +QString BasketFactory::newFolderName() +{ + QString folderName; + QString fullPath; + QDir dir; + + for (int i = 1; ; ++i) { + folderName = "basket" + QString::number(i) + "/"; + fullPath = Global::basketsFolder() + folderName; + dir = QDir(fullPath); + if ( ! dir.exists() ) // OK : The folder do not yet exists : + break; // We've found one ! + } + + return folderName; +} + +QString BasketFactory::unpackTemplate(const QString &templateName) +{ + // Find a name for a new folder and create it: + QString folderName = newFolderName(); + QString fullPath = Global::basketsFolder() + folderName; + QDir dir; + if (!dir.mkdir(fullPath)) { + KMessageBox::error(/*parent=*/0, i18n("Sorry, but the folder creation for this new basket has failed."), i18n("Basket Creation Failed")); + return ""; + } + + // Unpack the template file to that folder: + // TODO: REALLY unpack (this hand-creation is temporary, or it could be used in case the template can't be found) + QFile file(fullPath + "/.basket"); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + int nbColumns = (templateName == "mindmap" || templateName == "free" ? 0 : templateName.left(1).toInt()); + Basket *currentBasket = Global::bnpView->currentBasket(); + int columnWidth = (currentBasket && nbColumns > 0 ? (currentBasket->visibleWidth() - (nbColumns-1)*Note::RESIZER_WIDTH) / nbColumns : 0); + stream << QString( "\n" + "\n" + "\n" + " \n" + " \n" + " \n" + " \n" ).arg( (templateName == "mindmap" ? "true" : "false"), + QString::number(nbColumns), + (templateName == "free" || templateName == "mindmap" ? "true" : "false") ); + if (nbColumns > 0) + for (int i = 0; i < nbColumns; ++i) + stream << QString(" \n").arg(columnWidth); + stream << " \n" + "\n"; + file.close(); + return folderName; + } else { + KMessageBox::error(/*parent=*/0, i18n("Sorry, but the template copying for this new basket has failed."), i18n("Basket Creation Failed")); + return ""; + } +} + +void BasketFactory::newBasket(const QString &icon, + const QString &name, + const QString &backgroundImage, + const QColor &backgroundColor, + const QColor &textColor, + const QString &templateName, + Basket *parent) +{ + // Unpack the templateName file to a new basket folder: + QString folderName = unpackTemplate(templateName); + if (folderName.isEmpty()) + return; + + // Read the properties, change those that should be customized and save the result: + QDomDocument *document = XMLWork::openFile("basket", Global::basketsFolder() + folderName + "/.basket"); + if (!document) { + KMessageBox::error(/*parent=*/0, i18n("Sorry, but the template customization for this new basket has failed."), i18n("Basket Creation Failed")); + return; + } + QDomElement properties = XMLWork::getElement(document->documentElement(), "properties"); + + if (!icon.isEmpty()) { + QDomElement iconElement = XMLWork::getElement(properties, "icon"); + if (!iconElement.tagName().isEmpty()) // If there is already an icon, remove it since we will add our own value below + iconElement.removeChild(iconElement.firstChild()); + XMLWork::addElement(*document, properties, "icon", icon); + } + + if (!name.isEmpty()) { + QDomElement nameElement = XMLWork::getElement(properties, "name"); + if (!nameElement.tagName().isEmpty()) // If there is already a name, remove it since we will add our own value below + nameElement.removeChild(nameElement.firstChild()); + XMLWork::addElement(*document, properties, "name", name); + } + + if (backgroundColor.isValid()) { + QDomElement appearanceElement = XMLWork::getElement(properties, "appearance"); + if (appearanceElement.tagName().isEmpty()) { // If there is not already an appearance tag, add it since we will access it below + appearanceElement = document->createElement("appearance"); + properties.appendChild(appearanceElement); + } + appearanceElement.setAttribute("backgroundColor", backgroundColor.name()); + } + + if (!backgroundImage.isEmpty()) { + QDomElement appearanceElement = XMLWork::getElement(properties, "appearance"); + if (appearanceElement.tagName().isEmpty()) { // If there is not already an appearance tag, add it since we will access it below + appearanceElement = document->createElement("appearance"); + properties.appendChild(appearanceElement); + } + appearanceElement.setAttribute("backgroundImage", backgroundImage); + } + + if (textColor.isValid()) { + QDomElement appearanceElement = XMLWork::getElement(properties, "appearance"); + if (appearanceElement.tagName().isEmpty()) { // If there is not already an appearance tag, add it since we will access it below + appearanceElement = document->createElement("appearance"); + properties.appendChild(appearanceElement); + } + appearanceElement.setAttribute("textColor", textColor.name()); + } + + // Load it in the parent basket (it will save the tree and switch to this new basket): + Global::bnpView->loadNewBasket(folderName, properties, parent); +} diff --git a/src/basketfactory.h b/src/basketfactory.h new file mode 100644 index 0000000..26ae8ed --- /dev/null +++ b/src/basketfactory.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BASKETFACTORY_H +#define BASKETFACTORY_H + +class QString; + +class Basket; + +/** Methods to create various baskets (mkdir, init the properties and load it). + * @author Sébastien Laoût + */ +namespace BasketFactory +{ + /** You should use this method to create a new basket: */ + void newBasket(const QString &icon, + const QString &name, + const QString &backgroundImage, + const QColor &backgroundColor, + const QColor &textColor, + const QString &templateName, + Basket *parent); + /** Internal tool methods to process the method above: */ + QString newFolderName(); + QString unpackTemplate(const QString &templateName); +} + +#endif // BASKETFACTORY_H diff --git a/src/basketlistview.cpp b/src/basketlistview.cpp new file mode 100644 index 0000000..51b9747 --- /dev/null +++ b/src/basketlistview.cpp @@ -0,0 +1,807 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "basketlistview.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "global.h" +#include "bnpview.h" +#include "basket.h" +#include "tools.h" +#include "settings.h" +#include "notedrag.h" + +/** class BasketListViewItem: */ + +BasketListViewItem::BasketListViewItem(QListView *parent, Basket *basket) + : QListViewItem(parent), m_basket(basket) + , m_isUnderDrag(false) + , m_isAbbreviated(false) +{ + setDropEnabled(true); +} + +BasketListViewItem::BasketListViewItem(QListViewItem *parent, Basket *basket) + : QListViewItem(parent), m_basket(basket) + , m_isUnderDrag(false) + , m_isAbbreviated(false) +{ + setDropEnabled(true); +} + +BasketListViewItem::BasketListViewItem(QListView *parent, QListViewItem *after, Basket *basket) + : QListViewItem(parent, after), m_basket(basket) + , m_isUnderDrag(false) + , m_isAbbreviated(false) +{ + setDropEnabled(true); +} + +BasketListViewItem::BasketListViewItem(QListViewItem *parent, QListViewItem *after, Basket *basket) + : QListViewItem(parent, after), m_basket(basket) + , m_isUnderDrag(false) + , m_isAbbreviated(false) +{ + setDropEnabled(true); +} + +BasketListViewItem::~BasketListViewItem() +{ +} + +bool BasketListViewItem::acceptDrop(const QMimeSource *) const +{ + std::cout << "accept" << std::endl; + return true; +} + +void BasketListViewItem::dropped(QDropEvent *event) +{ + std::cout << "Dropping into basket " << m_basket->name() << std::endl; + m_basket->contentsDropEvent(event); + //Global::bnpView->currentBasket()->contentsDropEvent(event); // FIXME +} + +int BasketListViewItem::width(const QFontMetrics &/* fontMetrics */, const QListView */*listView*/, int /* column */) const +{ + return listView()->visibleWidth() + 100; +/* + int BASKET_ICON_SIZE = 16; + int MARGIN = 1; + + QRect textRect = fontMetrics.boundingRect(0, 0, / *width=* /1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::ShowPrefix, text(column)); + + return MARGIN + BASKET_ICON_SIZE + MARGIN + textRect.width() + BASKET_ICON_SIZE/2 + MARGIN; +*/ +} + +QString BasketListViewItem::escapedName(const QString &string) +{ + // Underlining the Alt+Letter shortcut (and escape all other '&' characters), if any: + QString basketName = string; + basketName.replace('&', "&&"); // First escape all the amperstamp + QString letter; // Find the letter + QString altKey = /*i18n(*/"Alt"/*)*/; //i18n("The [Alt] key, as shown in shortcuts like Alt+C...", "Alt"); + QString shiftKey = /*i18n(*/"Shift"/*)*/; //i18n("The [Shift] key, as shown in shortcuts like Alt+Shift+1...", "Shift"); + QRegExp altLetterExp( QString("^%1\\+(.)$").arg(altKey) ); + QRegExp altShiftLetterExp( QString("^%1\\+%2\\+(.)$").arg(altKey, shiftKey) ); + if (altLetterExp.search(m_basket->shortcut().toStringInternal()) != -1) + letter = altLetterExp.cap(1); + if (letter.isEmpty() && altShiftLetterExp.search(m_basket->shortcut().toStringInternal()) != -1) + letter = altShiftLetterExp.cap(1); + if (!letter.isEmpty()) { + int index = basketName.find(letter, /*index=*/0, /*caseSensitive=*/false); + if (index != -1) + basketName.insert(index, '&'); + } + return basketName; +} + +void BasketListViewItem::setup() +{ + int BASKET_ICON_SIZE = 16; + int MARGIN = 1; + + setText(/*column=*/0, escapedName(m_basket->basketName())); + + widthChanged(); + QRect textRect = listView()->fontMetrics().boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::ShowPrefix, text(/*column=*/0)); + + int height = MARGIN + QMAX(BASKET_ICON_SIZE, textRect.height()) + MARGIN; + setHeight(height); + + QPixmap icon = kapp->iconLoader()->loadIcon(m_basket->icon(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/false); + + setPixmap(/*column=*/0, icon); + + repaint(); +} + +BasketListViewItem* BasketListViewItem::lastChild() +{ + QListViewItem *child = firstChild(); + while (child) { + if (child->nextSibling()) + child = child->nextSibling(); + else + return (BasketListViewItem*)child; + } + return 0; +} + +BasketListViewItem* BasketListViewItem::prevSibling() +{ + BasketListViewItem *item = this; + while (item) { + if (item->nextSibling() == this) + return item; + item = (BasketListViewItem*)(item->itemAbove()); + } + return 0; +} + +BasketListViewItem* BasketListViewItem::shownItemAbove() +{ + BasketListViewItem *item = (BasketListViewItem*)itemAbove(); + while (item) { + if (item->isShown()) + return item; + item = (BasketListViewItem*)(item->itemAbove()); + } + return 0; +} + +BasketListViewItem* BasketListViewItem::shownItemBelow() +{ + BasketListViewItem *item = (BasketListViewItem*)itemBelow(); + while (item) { + if (item->isShown()) + return item; + item = (BasketListViewItem*)(item->itemBelow()); + } + return 0; +} + +QStringList BasketListViewItem::childNamesTree(int deep) +{ + QStringList result; + for (QListViewItem *child = firstChild(); child; child = child->nextSibling()) { + BasketListViewItem *item = (BasketListViewItem*)child; + // Compute indentation spaces: + QString spaces; + for (int i = 0; i < deep; ++i) + spaces += " "; + // Append the name: + result.append(spaces + item->basket()->basketName()); + // Append the childs: + if (child->firstChild()) { + QStringList childs = item->childNamesTree(deep + 1); + for (QStringList::iterator it = childs.begin(); it != childs.end(); ++it) + result.append(*it); + } + } + return result; +} + +void BasketListViewItem::moveChildsBaskets() +{ + QListViewItem *insertAfterThis = this; + QListViewItem *nextOne; + for (QListViewItem *child = firstChild(); child; child = nextOne) { + nextOne = child->nextSibling(); + // Re-insert the item with the good parent: + takeItem(child); + if (parent()) + parent()->insertItem(child); + else + listView()->insertItem(child); + // And move it at the good place: + child->moveItem(insertAfterThis); + insertAfterThis = child; + } +} + +void BasketListViewItem::ensureVisible() +{ + BasketListViewItem *item = this; + while (item->parent()) { + item = (BasketListViewItem*)(item->parent()); + item->setOpen(true); + } +} + +bool BasketListViewItem::isShown() +{ + QListViewItem *item = parent(); + while (item) { + if (!item->isOpen()) + return false; + item = item->parent(); + } + return true; +} + +bool BasketListViewItem::isCurrentBasket() +{ + return basket() == Global::bnpView->currentBasket(); +} + +// TODO: Move this function from item.cpp to class Tools: +extern void drawGradient( QPainter *p, const QColor &colorTop, const QColor & colorBottom, + int x, int y, int w, int h, + bool sunken, bool horz, bool flat ); /*const*/ + +QPixmap BasketListViewItem::circledTextPixmap(const QString &text, int height, const QFont &font, const QColor &color) +{ + QString key = QString("BLI-%1.%2.%3.%4") + .arg(text).arg(height).arg(font.toString()).arg(color.rgb()); + if (QPixmap* cached=QPixmapCache::find(key)) { + return *cached; + } + + // Compute the sizes of the image components: + QRect textRect = QFontMetrics(font).boundingRect(0, 0, /*width=*/1, height, Qt::AlignAuto | Qt::AlignTop, text); + int xMargin = height / 6; + int width = xMargin + textRect.width() + xMargin; + + // Create the gradient image: + QPixmap gradient(3 * width, 3 * height); // We double the size to be able to smooth scale down it (== antialiased curves) + QPainter gradientPainter(&gradient); +#if 1 // Enable the new look of the gradient: + QColor topColor = KGlobalSettings::highlightColor().light(130); //120 + QColor topMidColor = KGlobalSettings::highlightColor().light(105); //105 + QColor bottomMidColor = KGlobalSettings::highlightColor().dark(130); //120 + QColor bottomColor = KGlobalSettings::highlightColor(); + drawGradient(&gradientPainter, topColor, topMidColor, + 0, 0, gradient.width(), gradient.height() / 2, /*sunken=*/false, /*horz=*/true, /*flat=*/false); + drawGradient(&gradientPainter, bottomMidColor, bottomColor, + 0, gradient.height() / 2, gradient.width(), gradient.height() - gradient.height() / 2, /*sunken=*/false, /*horz=*/true, /*flat=*/false); + gradientPainter.fillRect(0, 0, gradient.width(), 3, KGlobalSettings::highlightColor()); +#else + drawGradient(&gradientPainter, KGlobalSettings::highlightColor(), KGlobalSettings::highlightColor().dark(), + 0, 0, gradient.width(), gradient.height(), /*sunken=*/false, /*horz=*/true, /*flat=*/false); +#endif + gradientPainter.end(); + + // Draw the curved rectangle: + QBitmap curvedRectangle(3 * width, 3 * height); + curvedRectangle.fill(Qt::color0); + QPainter curvePainter(&curvedRectangle); + curvePainter.setPen(Qt::color1); + curvePainter.setBrush(Qt::color1); + curvePainter.setClipRect(0, 0, 3*(height / 5), 3*(height)); // If the width is small, don't fill the right part of the pixmap + curvePainter.drawEllipse(0, 3*(-height / 4), 3*(height), 3*(height * 3 / 2)); // Don't forget we double the sizes + curvePainter.setClipRect(3*(width - height / 5), 0, 3*(height / 5), 3*(height)); + curvePainter.drawEllipse(3*(width - height), 3*(-height / 4), 3*(height), 3*(height * 3 / 2)); + curvePainter.setClipping(false); + curvePainter.fillRect(3*(height / 6), 0, 3*(width - 2 * height / 6), 3*(height), curvePainter.brush()); + curvePainter.end(); + + // Apply the curved rectangle as the mask of the gradient: + gradient.setMask(curvedRectangle); + QImage resultImage = gradient.convertToImage(); + resultImage.setAlphaBuffer(true); + + // Scale down the image smoothly to get anti-aliasing: + QPixmap pmScaled; + pmScaled.convertFromImage(resultImage.smoothScale(width, height)); + + // Draw the text, and return the result: + QPainter painter(&pmScaled); + painter.setPen(color); + painter.setFont(font); + painter.drawText(0+1, 0, width, height, Qt::AlignHCenter | Qt::AlignVCenter, text); + painter.end(); + + QPixmapCache::insert(key, pmScaled); + + return pmScaled; +} + +QPixmap BasketListViewItem::foundCountPixmap(bool isLoading, int countFound, bool childsAreLoading, int countChildsFound, const QFont &font, int height) +{ + if (isLoading) + return QPixmap(); + + QFont boldFont(font); + boldFont.setBold(true); + + QString text; + if (childsAreLoading) { + if (countChildsFound > 0) + text = i18n("%1+%2+").arg(QString::number(countFound), QString::number(countChildsFound)); + else + text = i18n("%1+").arg(QString::number(countFound)); + } else { + if (countChildsFound > 0) + text = i18n("%1+%2").arg(QString::number(countFound), QString::number(countChildsFound)); + else if (countFound > 0) + text = QString::number(countFound); + else + return QPixmap(); + } + + return circledTextPixmap(text, height, boldFont, KGlobalSettings::highlightedTextColor()); +} + +bool BasketListViewItem::haveChildsLoading() +{ + QListViewItem *child = firstChild(); + while (child) { + BasketListViewItem *childItem = (BasketListViewItem*)child; + if (!childItem->basket()->isLoaded() && !childItem->basket()->isLocked()) + return true; + if (childItem->haveChildsLoading()) + return true; + child = child->nextSibling(); + } + return false; +} + +bool BasketListViewItem::haveHiddenChildsLoading() +{ + if (isOpen()) + return false; + return haveChildsLoading(); +} + +bool BasketListViewItem::haveChildsLocked() +{ + QListViewItem *child = firstChild(); + while (child) { + BasketListViewItem *childItem = (BasketListViewItem*)child; + if (/*!*/childItem->basket()->isLocked()) + return true; + if (childItem->haveChildsLocked()) + return true; + child = child->nextSibling(); + } + return false; +} + +bool BasketListViewItem::haveHiddenChildsLocked() +{ + if (isOpen()) + return false; + return haveChildsLocked(); +} + +int BasketListViewItem::countChildsFound() +{ + int count = 0; + QListViewItem *child = firstChild(); + while (child) { + BasketListViewItem *childItem = (BasketListViewItem*)child; + count += childItem->basket()->countFounds(); + count += childItem->countChildsFound(); + child = child->nextSibling(); + } + return count; +} + +int BasketListViewItem::countHiddenChildsFound() +{ + if (isOpen()) + return 0; + return countChildsFound(); +} + +void BasketListViewItem::paintCell(QPainter *painter, const QColorGroup &/*colorGroup*/, int /*column*/, int width, int /*align*/) +{ + // Workaround a Qt bug: + // When the splitter is moved to hide the tree view and then the application is restarted, + // Qt try to draw items with a negative size! + if (width <= 0) { + std::cout << "width <= 0" << std::endl; + return; + } + + int BASKET_ICON_SIZE = 16; + int MARGIN = 1; + + + // If we are filtering all baskets, and are effectively filtering on something: + bool showLoadingIcon = false; + bool showEncryptedIcon = false; + QPixmap countPixmap; + bool showCountPixmap = Global::bnpView->isFilteringAllBaskets() && + Global::bnpView->currentBasket()->decoration()->filterBar()->filterData().isFiltering; + if (showCountPixmap) { + showLoadingIcon = (!m_basket->isLoaded() && !m_basket->isLocked()) || haveHiddenChildsLoading(); + showEncryptedIcon = m_basket->isLocked() || haveHiddenChildsLocked(); + countPixmap = foundCountPixmap(!m_basket->isLoaded(), m_basket->countFounds(), haveHiddenChildsLoading() || haveHiddenChildsLocked(), + countHiddenChildsFound(), listView()->font(), height() - 2 * MARGIN); + } + int effectiveWidth = width - (countPixmap.isNull() ? 0 : countPixmap.width() + MARGIN) + - (showLoadingIcon || showEncryptedIcon ? BASKET_ICON_SIZE + MARGIN : 0)/* + - (showEncryptedIcon ? BASKET_ICON_SIZE + MARGIN : 0)*/; + + + bool drawRoundRect = m_basket->backgroundColorSetting().isValid() || m_basket->textColorSetting().isValid(); + QColor textColor = (drawRoundRect ? m_basket->textColor() : (isCurrentBasket() ? KGlobalSettings::highlightedTextColor() : KGlobalSettings::textColor())); + + BasketListViewItem *shownAbove = shownItemAbove(); + BasketListViewItem *shownBelow = shownItemBelow(); + + // Don't forget to update the key computation if parameters + // affecting the rendering logic change + QString key = QString("BLVI::pC-%1.%2.%3.%4.%5.%6.%7.%8.%9.%10.%11.%12.%13.%14.%15") + .arg(effectiveWidth) + .arg(drawRoundRect) + .arg(textColor.rgb()) + .arg(m_basket->backgroundColor().rgb()) + .arg(isCurrentBasket()) + .arg(shownBelow && shownBelow->isCurrentBasket()) + .arg(shownAbove && shownAbove->isCurrentBasket()) + .arg(showLoadingIcon) + .arg(showEncryptedIcon) + .arg(showCountPixmap) + .arg(m_basket->countFounds()) + .arg(countHiddenChildsFound()) + .arg(m_isUnderDrag) + .arg(m_basket->basketName()) + .arg(m_basket->icon()); + if (QPixmap* cached = QPixmapCache::find(key)) { + // Qt's documentation recommends copying the pointer + // into a QPixmap immediately + QPixmap cachedBuffer = *cached; + painter->drawPixmap(0, 0, cachedBuffer); + return; + } + + // Bufferize the drawing of items (otherwize, resizing the splitter make the tree act like a Christmas Tree ;-D ): + QPixmap theBuffer(width, height()); + QPainter thePainter(&theBuffer); + + // Fill with the basket background color: + QColor background = (isCurrentBasket() ? KGlobalSettings::highlightColor() : listView()->paletteBackgroundColor()); + thePainter.fillRect(0, 0, width, height(), background); + + int textWidth = effectiveWidth - MARGIN - BASKET_ICON_SIZE - MARGIN - MARGIN; + + // Draw the rounded rectangle: + if (drawRoundRect) { + QRect textRect = listView()->fontMetrics().boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::ShowPrefix, text(/*column=*/0)); + int xRound = MARGIN; + int yRound = MARGIN; + int hRound = height() - 2 * MARGIN; + int wRound = QMIN(BASKET_ICON_SIZE + MARGIN + textRect.width() + hRound/2, effectiveWidth - MARGIN - MARGIN); + if (wRound > 0) { // Do not crash if there is no space anymore to draw the rounded rectangle: + QPixmap buffer(wRound * 2, hRound * 2); + buffer.fill(background); + QPainter pBuffer(&buffer); + QColor colorRound = m_basket->backgroundColor(); + pBuffer.setPen(colorRound); + pBuffer.setBrush(colorRound); + if (wRound > hRound) { // If the rectangle is smaller in width than in height, don't overlap ellipses... + pBuffer.drawEllipse(0, 0, hRound * 2, hRound * 2); + pBuffer.drawEllipse(wRound * 2 - hRound * 2, 0, hRound * 2, hRound * 2); + pBuffer.fillRect(hRound*2/2, 0, wRound * 2 - hRound * 2, hRound * 2, colorRound); + } else + pBuffer.drawEllipse(0, 0, wRound * 2, hRound * 2); + pBuffer.end(); + QImage imageToScale = buffer.convertToImage(); + QPixmap pmScaled; + pmScaled.convertFromImage(imageToScale.smoothScale(wRound, hRound)); + thePainter.drawPixmap(xRound, yRound, pmScaled); + textWidth -= hRound/2; + } + } + + QColor bgColor = listView()->paletteBackgroundColor(); + QColor selColor = KGlobalSettings::highlightColor(); + QColor midColor = Tools::mixColor(bgColor, selColor); + // Draw the left selection roundings: + if (isCurrentBasket()) { + thePainter.setPen(bgColor); + thePainter.drawPoint(0, 0); + thePainter.drawPoint(1, 0); + thePainter.drawPoint(0, 1); + thePainter.drawPoint(0, height() - 1); + thePainter.drawPoint(1, height() - 1); + thePainter.drawPoint(0, height() - 2); + thePainter.setPen(midColor); + thePainter.drawPoint(2, 0); + thePainter.drawPoint(0, 2); + thePainter.drawPoint(2, height() - 1); + thePainter.drawPoint(0, height() - 3); + } + // Draw the bottom-right selection roundings: + //BasketListViewItem *shownBelow = shownItemBelow(); + if (shownBelow && shownBelow->isCurrentBasket()) { + thePainter.setPen(selColor); + thePainter.drawPoint(width - 1, height() - 1); + thePainter.drawPoint(width - 2, height() - 1); + thePainter.drawPoint(width - 1, height() - 2); + thePainter.setPen(midColor); + thePainter.drawPoint(width - 3, height() - 1); + thePainter.drawPoint(width - 1, height() - 3); + } + // Draw the top-right selection roundings: + // BasketListViewItem *shownAbove = shownItemAbove(); + if (shownAbove && shownAbove->isCurrentBasket()) { + thePainter.setPen(selColor); + thePainter.drawPoint(width - 1, 0); + thePainter.drawPoint(width - 2, 0); + thePainter.drawPoint(width - 1, 1); + thePainter.setPen(midColor); + thePainter.drawPoint(width - 3, 0); + thePainter.drawPoint(width - 1, 2); + } + + // Draw the icon and text: + int yPixmap = (height() - BASKET_ICON_SIZE) / 2; + thePainter.drawPixmap(MARGIN, yPixmap, *pixmap(/*column=*/0)); + thePainter.setPen(textColor); + if (textWidth > 0) { // IF there is space left to draw the text: + int xText = MARGIN + BASKET_ICON_SIZE + MARGIN; + QString theText = m_basket->basketName(); + if (painter->fontMetrics().width(theText) > textWidth) { + theText = KStringHandler::rPixelSqueeze(theText, painter->fontMetrics(), textWidth); + m_isAbbreviated = true; + } + else { + m_isAbbreviated = false; + } + theText = escapedName(theText); + thePainter.drawText(xText, 0, textWidth, height(), Qt::AlignAuto | Qt::AlignVCenter | Qt::ShowPrefix, theText); + } + + // If we are filtering all baskets, and are effectively filtering on something: + if (!countPixmap.isNull()) + { + thePainter.drawPixmap(effectiveWidth, 1, countPixmap); + effectiveWidth += countPixmap.width() + MARGIN; + } + if (showLoadingIcon) { + QPixmap icon = kapp->iconLoader()->loadIcon("find", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/false); + thePainter.drawPixmap(effectiveWidth, 0, icon); + effectiveWidth += BASKET_ICON_SIZE + MARGIN; + } + if (showEncryptedIcon && !showLoadingIcon) { + QPixmap icon = kapp->iconLoader()->loadIcon("encrypted", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/false); + thePainter.drawPixmap(effectiveWidth, 0, icon); + } + + if (m_isUnderDrag) { + thePainter.drawWinFocusRect(0, 0, width, height()); + } + thePainter.end(); + + QPixmapCache::insert(key, theBuffer); + // Apply the buffer: + painter->drawPixmap(0, 0, theBuffer); +} + +void BasketListViewItem::setUnderDrag(bool underDrag) +{ + m_isUnderDrag = underDrag; +} + +bool BasketListViewItem::isAbbreviated() +{ + return m_isAbbreviated; +} + +/** class BasketListViewToolTip: */ + +class BasketTreeListView_ToolTip : public QToolTip { +public: + BasketTreeListView_ToolTip(BasketTreeListView* basketView) + : QToolTip(basketView->viewport()) + , m_basketView(basketView) + {} +public: + void maybeTip(const QPoint& pos) + { + QListViewItem *item = m_basketView->itemAt(m_basketView->contentsToViewport(pos)); + BasketListViewItem* bitem = dynamic_cast(item); + if (bitem && bitem->isAbbreviated()) { + tip(m_basketView->itemRect(bitem), bitem->basket()->basketName()); + } + } +private: + BasketTreeListView* m_basketView; +}; + +/** class BasketTreeListView: */ + +BasketTreeListView::BasketTreeListView(QWidget *parent, const char *name) + : KListView(parent, name), m_autoOpenItem(0) + , m_itemUnderDrag(0) +{ + setWFlags(Qt::WStaticContents | WNoAutoErase); + clearWFlags(Qt::WStaticContents | WNoAutoErase); + //viewport()->clearWFlags(Qt::WStaticContents); + connect( &m_autoOpenTimer, SIGNAL(timeout()), this, SLOT(autoOpen()) ); + + new BasketTreeListView_ToolTip(this); +} + +void BasketTreeListView::viewportResizeEvent(QResizeEvent *event) +{ + KListView::viewportResizeEvent(event); + triggerUpdate(); +} + +void BasketTreeListView::contentsDragEnterEvent(QDragEnterEvent *event) +{ + if (event->provides("application/x-qlistviewitem")) { + QListViewItemIterator it(this); // TODO: Don't show expanders if it's not a basket drag... + while (it.current()) { + QListViewItem *item = it.current(); + if (!item->firstChild()) { + item->setExpandable(true); + item->setOpen(true); + } + ++it; + } + update(); + } + + KListView::contentsDragEnterEvent(event); +} + +void BasketTreeListView::removeExpands() +{ + QListViewItemIterator it(this); + while (it.current()) { + QListViewItem *item = it.current(); + if (!item->firstChild()) + item->setExpandable(false); + ++it; + } + viewport()->update(); +} + +void BasketTreeListView::contentsDragLeaveEvent(QDragLeaveEvent *event) +{ + std::cout << "BasketTreeListView::contentsDragLeaveEvent" << std::endl; + m_autoOpenItem = 0; + m_autoOpenTimer.stop(); + setItemUnderDrag(0); + removeExpands(); + KListView::contentsDragLeaveEvent(event); +} + +void BasketTreeListView::contentsDropEvent(QDropEvent *event) +{ + std::cout << "BasketTreeListView::contentsDropEvent()" << std::endl; + if (event->provides("application/x-qlistviewitem")) + { + KListView::contentsDropEvent(event); + } + else { + std::cout << "Forwarding dropped data to the basket" << std::endl; + QListViewItem *item = itemAt(contentsToViewport(event->pos())); + BasketListViewItem* bitem = dynamic_cast(item); + if (bitem) { + bitem->basket()->blindDrop(event); + } + else { + std::cout << "Forwarding failed: no bitem found" << std::endl; + } + } + + m_autoOpenItem = 0; + m_autoOpenTimer.stop(); + setItemUnderDrag(0); + removeExpands(); + + Global::bnpView->save(); // TODO: Don't save if it was not a basket drop... +} + +void BasketTreeListView::contentsDragMoveEvent(QDragMoveEvent *event) +{ + std::cout << "BasketTreeListView::contentsDragMoveEvent" << std::endl; + if (event->provides("application/x-qlistviewitem")) + KListView::contentsDragMoveEvent(event); + else { + QListViewItem *item = itemAt(contentsToViewport(event->pos())); + BasketListViewItem* bitem = dynamic_cast(item); + if (m_autoOpenItem != item) { + m_autoOpenItem = item; + m_autoOpenTimer.start(1700, /*singleShot=*/true); + } + if (item) { + event->acceptAction(true); + event->accept(true); + } + setItemUnderDrag(bitem); + + KListView::contentsDragMoveEvent(event); // FIXME: ADDED + } +} + +void BasketTreeListView::setItemUnderDrag(BasketListViewItem* item) +{ + if (m_itemUnderDrag != item) { + if (m_itemUnderDrag) { + // Remove drag status from the old item + m_itemUnderDrag->setUnderDrag(false); + repaintItem(m_itemUnderDrag); + } + + m_itemUnderDrag = item; + + if (m_itemUnderDrag) { + // add drag status to the new item + m_itemUnderDrag->setUnderDrag(true); + repaintItem(m_itemUnderDrag); + } + } +} + +void BasketTreeListView::autoOpen() +{ + BasketListViewItem *item = (BasketListViewItem*)m_autoOpenItem; + if (item) + Global::bnpView->setCurrentBasket(item->basket()); +} + +void BasketTreeListView::resizeEvent(QResizeEvent *event) +{ + KListView::resizeEvent(event); +} + +void BasketTreeListView::paintEmptyArea(QPainter *painter, const QRect &rect) +{ + QListView::paintEmptyArea(painter, rect); + + BasketListViewItem *last = Global::bnpView->lastListViewItem(); + if (last && !last->isShown()) + last = last->shownItemAbove(); + if (last && last->isCurrentBasket()) { + int y = last->itemPos() + last->height(); + QColor bgColor = paletteBackgroundColor(); + QColor selColor = KGlobalSettings::highlightColor(); + QColor midColor = Tools::mixColor(bgColor, selColor); + painter->setPen(selColor); + painter->drawPoint(visibleWidth() - 1, y); + painter->drawPoint(visibleWidth() - 2, y); + painter->drawPoint(visibleWidth() - 1, y + 1); + painter->setPen(midColor); + painter->drawPoint(visibleWidth() - 3, y); + painter->drawPoint(visibleWidth() - 1, y + 2); + } +} + +/** We should NEVER get focus (because of QWidget::NoFocus focusPolicy()) + * but KListView can programatically give us the focus. + * So we give it to the basket. + */ +void BasketTreeListView::focusInEvent(QFocusEvent*) +{ + //KListView::focusInEvent(event); + Basket *basket = Global::bnpView->currentBasket(); + if (basket) + basket->setFocus(); +} + +#include "basketlistview.moc" diff --git a/src/basketlistview.h b/src/basketlistview.h new file mode 100644 index 0000000..9a6a918 --- /dev/null +++ b/src/basketlistview.h @@ -0,0 +1,103 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BASKETLISTVIEW_H +#define BASKETLISTVIEW_H + +#include +#include + +class Basket; + +class BasketListViewItem : public QListViewItem +{ + public: + /// CONSTRUCTOR AND DESTRUCTOR: + BasketListViewItem(QListView *parent, Basket *basket); + BasketListViewItem(QListViewItem *parent, Basket *basket); + BasketListViewItem(QListView *parent, QListViewItem *after, Basket *basket); + BasketListViewItem(QListViewItem *parent, QListViewItem *after, Basket *basket); + ~BasketListViewItem(); + /// + bool acceptDrop(const QMimeSource *mime) const; + void dropped(QDropEvent *event); + Basket *basket() { return m_basket; } + void setup(); + int width(const QFontMetrics &fontMetrics, const QListView *listView, int column) const; + BasketListViewItem* lastChild(); + BasketListViewItem* prevSibling(); + BasketListViewItem* shownItemAbove(); + BasketListViewItem* shownItemBelow(); + QStringList childNamesTree(int deep = 0); + void moveChildsBaskets(); + void ensureVisible(); + bool isShown(); + bool isCurrentBasket(); + void paintCell(QPainter *painter, const QColorGroup &colorGroup, int column, int width, int align); + QString escapedName(const QString &string); + /// + QPixmap circledTextPixmap(const QString &text, int height, const QFont &font, const QColor &color); + QPixmap foundCountPixmap(bool isLoading, int countFound, bool childsAreLoading, int countChildsFound, const QFont &font, int height); + bool haveChildsLoading(); + bool haveHiddenChildsLoading(); + bool haveChildsLocked(); + bool haveHiddenChildsLocked(); + int countChildsFound(); + int countHiddenChildsFound(); + + void setUnderDrag(bool); + bool isAbbreviated(); + /// +// QDragObject* dragObject(); +// bool acceptDrop ( const QMimeSource * mime ) const; + private: + Basket *m_basket; + int m_width; + bool m_isUnderDrag; + bool m_isAbbreviated; +}; + +class BasketTreeListView : public KListView +{ + Q_OBJECT + public: + BasketTreeListView(QWidget *parent = 0, const char *name = 0); + void contentsDragEnterEvent(QDragEnterEvent *event); + void removeExpands(); + void contentsDragLeaveEvent(QDragLeaveEvent *event); + void contentsDragMoveEvent(QDragMoveEvent *event); + void contentsDropEvent(QDropEvent *event); + void resizeEvent(QResizeEvent *event); + void paintEmptyArea(QPainter *painter, const QRect &rect); + protected: + void focusInEvent(QFocusEvent*); + void viewportResizeEvent(QResizeEvent *event); + private: + QTimer m_autoOpenTimer; + QListViewItem *m_autoOpenItem; + private slots: + void autoOpen(); + private: + void setItemUnderDrag(BasketListViewItem* item); + BasketListViewItem* m_itemUnderDrag; + +}; + +#endif // BASKETLISTVIEW_H diff --git a/src/basketproperties.cpp b/src/basketproperties.cpp new file mode 100644 index 0000000..911be2a --- /dev/null +++ b/src/basketproperties.cpp @@ -0,0 +1,203 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "basketproperties.h" +#include "basket.h" +#include "kcolorcombo2.h" +#include "variouswidgets.h" +#include "global.h" +#include "backgroundmanager.h" + +BasketPropertiesDialog::BasketPropertiesDialog(Basket *basket, QWidget *parent) + : KDialogBase(KDialogBase::Swallow, i18n("Basket Properties"), KDialogBase::Ok | KDialogBase::Apply | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"BasketProperties", /*modal=*/true, /*separator=*/false), + m_basket(basket) +{ + QWidget *page = new QWidget(this); + QVBoxLayout *topLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + // Icon and Name: + QHBoxLayout *nameLayout = new QHBoxLayout(0, marginHint()*2/3, spacingHint()); + m_icon = new KIconButton(page); + m_icon->setIconType(KIcon::NoGroup, KIcon::Action); + m_icon->setIconSize(16); + m_icon->setIcon(m_basket->icon()); + int size = QMAX(m_icon->sizeHint().width(), m_icon->sizeHint().height()); + m_icon->setFixedSize(size, size); // Make it square! + QToolTip::add(m_icon, i18n("Icon")); + m_name = new QLineEdit(m_basket->basketName(), page); + m_name->setMinimumWidth(m_name->fontMetrics().maxWidth()*20); + QToolTip::add(m_name, i18n("Name")); + nameLayout->addWidget(m_icon); + nameLayout->addWidget(m_name); + topLayout->addLayout(nameLayout); + + // Appearance: + QGroupBox *appearance = new QGroupBox(1, Qt::Horizontal, i18n("Appearance"), page); + QWidget *appearanceWidget = new QWidget(appearance); + QGridLayout *grid = new QGridLayout(appearanceWidget, /*nRows=*/3, /*nCols=*/2, /*margin=*/0, spacingHint()); + m_backgroundImage = new QComboBox(appearanceWidget); + m_backgroundColor = new KColorCombo2(m_basket->backgroundColorSetting(), KGlobalSettings::baseColor(), appearanceWidget); + m_textColor = new KColorCombo2(m_basket->textColorSetting(), KGlobalSettings::textColor(), appearanceWidget); + QLabel *label1 = new QLabel(m_backgroundImage, i18n("Background &image:"), appearanceWidget); + QLabel *label2 = new QLabel(m_backgroundColor, i18n("&Background color:"), appearanceWidget); + QLabel *label3 = new QLabel(m_textColor, i18n("&Text color:"), appearanceWidget); + grid->addWidget(label1, 0, 0, Qt::AlignVCenter); + grid->addWidget(label2, 1, 0, Qt::AlignVCenter); + grid->addWidget(label3, 2, 0, Qt::AlignVCenter); + grid->addWidget(m_backgroundImage, 0, 1, Qt::AlignVCenter); + grid->addWidget(m_backgroundColor, 1, 1, Qt::AlignVCenter); + grid->addWidget(m_textColor, 2, 1, Qt::AlignVCenter); + topLayout->addWidget(appearance); + + m_backgroundImage->insertItem(i18n("(None)"), 0); + m_backgroundImagesMap.insert(0, ""); + QStringList backgrounds = Global::backgroundManager->imageNames(); + int index = 1; + for (QStringList::Iterator it = backgrounds.begin(); it != backgrounds.end(); ++it) { + QPixmap *preview = Global::backgroundManager->preview(*it); + if (preview) { + m_backgroundImagesMap.insert(index, *it); + m_backgroundImage->insertItem(*preview, index); + if (m_basket->backgroundImageName() == *it) + m_backgroundImage->setCurrentItem(index); + index++; + } + } +// m_backgroundImage->insertItem(i18n("Other..."), -1); + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); + m_backgroundImage->setSizeLimit(50/*75 * 6 / m_backgroundImage->sizeHint().height()*/); + m_backgroundImage->setMinimumHeight(75 + 2 * BUTTON_MARGIN); + + // Disposition: + m_disposition = new QVButtonGroup(i18n("Disposition"), page); + QWidget *columnsWidget = new QWidget(m_disposition); + QHBoxLayout *dispoLayout = new QHBoxLayout(columnsWidget, /*margin=*/0, spacingHint()); + QRadioButton *radio = new QRadioButton(i18n("Col&umns:"), columnsWidget); + m_columnCount = new KIntNumInput(m_basket->columnsCount(), columnsWidget); + m_columnCount->setRange(1, 20, /*step=*/1, /*slider=*/false); + m_columnCount->setValue(m_basket->columnsCount()); + connect( m_columnCount, SIGNAL(valueChanged(int)), this, SLOT(selectColumnsLayout()) ); + dispoLayout->addWidget(radio); + dispoLayout->addWidget(m_columnCount); + m_disposition->insert(radio); + new QRadioButton(i18n("&Free-form"), m_disposition); + QRadioButton *mindMap = new QRadioButton(i18n("&Mind map"), m_disposition); // TODO: "Learn more..." + int height = QMAX(mindMap->sizeHint().height(), m_columnCount->sizeHint().height()); // Make all radioButtons vertically equaly-spaced! + mindMap->setMinimumSize(mindMap->sizeHint().width(), height); // Because the m_columnCount can be heigher, and make radio1 and radio2 more spaced than radio2 and radio3. + m_disposition->setButton(m_basket->isFreeLayout() ? (m_basket->isMindMap() ? 2 : 1) : 0); + topLayout->addWidget(m_disposition); + + mindMap->hide(); + + // Keyboard Shortcut: + m_shortcutRole = new QVButtonGroup(i18n("&Keyboard Shortcut"), page); + QWidget *shortcutWidget = new QWidget(m_shortcutRole); + QHBoxLayout *shortcutLayout = new QHBoxLayout(shortcutWidget, /*margin=*/0, spacingHint()); + m_shortcut = new KKeyButton(shortcutWidget); + m_shortcut->setShortcut(m_basket->shortcut(), /*bQtShortcut=*/true); + HelpLabel *helpLabel = new HelpLabel(i18n("Learn some tips..."), i18n( + "

      Easily Remember your Shortcuts:
      " + "With the first option, giving the basket a shortcut of the form Alt+Letter will underline that letter in the basket tree.
      " + "For instance, if you are assigning the shortcut Alt+T to a basket named Tips, the basket will be displayed as Tips in the tree. " + "It helps you visualize the shortcuts to remember them more quickly.

      " + "

      Local vs Global:
      " + "The first option allows to show the basket while the main window is active. " + "Global shortcuts are valid from anywhere, even if the window is hidden.

      " + "

      Show vs Switch:
      " + "The last option makes this basket the current one without opening the main window. " + "It is useful in addition to the configurable global shortcuts, eg. to paste the clipboard or the selection into the current basket from anywhere.

      "), + shortcutWidget); + shortcutLayout->addWidget(m_shortcut); + shortcutLayout->addStretch(); + shortcutLayout->addWidget(helpLabel); + connect( m_shortcut, SIGNAL(capturedShortcut(const KShortcut&)), this, SLOT(capturedShortcut(const KShortcut&)) ); + new QRadioButton(i18n("S&how this basket"), m_shortcutRole); + new QRadioButton(i18n("Show this basket (&global shortcut)"), m_shortcutRole); + new QRadioButton(i18n("S&witch to this basket (global shortcut)"), m_shortcutRole); + m_shortcutRole->setButton(m_basket->shortcutAction()/* + 1*/); // Id 0 is the KKeyButton! + topLayout->addWidget(m_shortcutRole); + + topLayout->addSpacing(marginHint()); + topLayout->addStretch(10); + + setMainWidget(page); +} + +BasketPropertiesDialog::~BasketPropertiesDialog() +{ +} + +void BasketPropertiesDialog::polish() +{ + KDialogBase::polish(); + m_name->setFocus(); +} + +void BasketPropertiesDialog::applyChanges() +{ + m_basket->setDisposition(m_disposition->selectedId(), m_columnCount->value()); + m_basket->setShortcut(m_shortcut->shortcut(), m_shortcutRole->selectedId()); + // Should be called LAST, because it will emit the propertiesChanged() signal and the tree will be able to show the newly set Alt+Letter shortcut: + m_basket->setAppearance(m_icon->icon(), m_name->text(), m_backgroundImagesMap[m_backgroundImage->currentItem()], m_backgroundColor->color(), m_textColor->color()); + m_basket->save(); +} + +void BasketPropertiesDialog::slotApply() +{ + applyChanges(); + KDialogBase::slotApply(); +} + +void BasketPropertiesDialog::slotOk() +{ + applyChanges(); + KDialogBase::slotOk(); +} + +void BasketPropertiesDialog::capturedShortcut(const KShortcut &shortcut) +{ + // TODO: Validate it! + m_shortcut->setShortcut(shortcut, /*bQtShortcut=*/true); +} + +void BasketPropertiesDialog::selectColumnsLayout() +{ + m_disposition->setButton(0); +} + +#include "basketproperties.moc" diff --git a/src/basketproperties.h b/src/basketproperties.h new file mode 100644 index 0000000..033aff9 --- /dev/null +++ b/src/basketproperties.h @@ -0,0 +1,69 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BASKETPROPERTIES_H +#define BASKETPROPERTIES_H + +#include +#include +#include + +class KIconButton; +class QLineEdit; +class QComboBox; +class QVButtonGroup; +class KIntNumInput; +class KKeyButton; +class KShortcut; + +class Basket; +class KColorCombo2; + +/** The dialog that hold basket settings. + * @author Sébastien Laoût + */ +class BasketPropertiesDialog : public KDialogBase +{ + Q_OBJECT + public: + BasketPropertiesDialog(Basket *basket, QWidget *parent = 0); + ~BasketPropertiesDialog(); + void polish(); + void applyChanges(); + protected slots: + void slotApply(); + void slotOk(); + void capturedShortcut(const KShortcut &shortcut); + void selectColumnsLayout(); + private: + Basket *m_basket; + KIconButton *m_icon; + QLineEdit *m_name; + QComboBox *m_backgroundImage; + KColorCombo2 *m_backgroundColor; + KColorCombo2 *m_textColor; + QVButtonGroup *m_disposition; + KIntNumInput *m_columnCount; + KKeyButton *m_shortcut; + QVButtonGroup *m_shortcutRole; + QMap m_backgroundImagesMap; +}; + +#endif // BASKETPROPERTIES_H diff --git a/src/basketstatusbar.cpp b/src/basketstatusbar.cpp new file mode 100644 index 0000000..02e18f5 --- /dev/null +++ b/src/basketstatusbar.cpp @@ -0,0 +1,176 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "basketstatusbar.h" +#include "clickablelabel.h" +#include "global.h" +#include "bnpview.h" +#include "basket.h" +#include "tools.h" +#include +#include + +BasketStatusBar::BasketStatusBar(KStatusBar *bar) + : m_bar(bar), m_extension(0), m_selectionStatus(0), m_lockStatus(0), m_basketStatus(0), m_savedStatus(0) +{ +} + +BasketStatusBar::BasketStatusBar(KParts::StatusBarExtension *extension) + : m_bar(0), m_extension(extension), m_selectionStatus(0), m_lockStatus(0), m_basketStatus(0), m_savedStatus(0) +{ +} + +BasketStatusBar::~BasketStatusBar() +{ + //delete m_extension; +} + +KStatusBar *BasketStatusBar::statusBar () const +{ + if(m_extension) + return m_extension->statusBar(); + else + return m_bar; +} + +void BasketStatusBar::addWidget(QWidget * widget, int stretch, bool permanent) +{ + if(m_extension) + m_extension->addStatusBarItem(widget, stretch, permanent); + else + m_bar->addWidget(widget, stretch, permanent); +} + +void BasketStatusBar::setupStatusBar() +{ + QWidget* parent = statusBar(); + QObjectList* lst = parent->queryList("KRSqueezedTextLabel"); + + //Tools::printChildren(parent); + if(lst->count() == 0) + { + m_basketStatus = new QLabel(parent); + m_basketStatus->setSizePolicy( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored, 0, 0, false) ); + addWidget( m_basketStatus, 1, false ); // Fit all extra space and is hiddable + } + else + m_basketStatus = static_cast(lst->at(0)); + delete lst; + + m_selectionStatus = new QLabel(i18n("Loading..."), parent); + addWidget( m_selectionStatus, 0, true ); + + m_lockStatus = new ClickableLabel(0/*this*/); + m_lockStatus->setMinimumSize(18, 18); + m_lockStatus->setAlignment(Qt::AlignCenter); +// addWidget( m_lockStatus, 0, true ); + connect( m_lockStatus, SIGNAL(clicked()), Global::bnpView, SLOT(lockBasket()) ); + + m_savedStatusPixmap = SmallIcon("filesave"); + m_savedStatus = new QLabel(parent); + m_savedStatus->setPixmap(m_savedStatusPixmap); + m_savedStatus->setFixedSize(m_savedStatus->sizeHint()); + m_savedStatus->clear(); + //m_savedStatus->setPixmap(m_savedStatusIconSet.pixmap(QIconSet::Small, QIconSet::Disabled)); + //m_savedStatus->setEnabled(false); + addWidget( m_savedStatus, 0, true ); + QToolTip::add(m_savedStatus, "

      " + i18n("Shows if there are changes that have not yet been saved.")); +} + +void BasketStatusBar::postStatusbarMessage(const QString& text) +{ + if(statusBar()) + statusBar()->message(text, 2000); +} + +void BasketStatusBar::setStatusText(const QString &txt) +{ + if(m_basketStatus && m_basketStatus->text() != txt) + m_basketStatus->setText(txt); +} + +void BasketStatusBar::setStatusBarHint(const QString &hint) +{ + if (hint.isEmpty()) + updateStatusBarHint(); + else + setStatusText(hint); +} + +void BasketStatusBar::updateStatusBarHint() +{ + QString message = ""; + + if (Global::bnpView->currentBasket()->isDuringDrag()) + message = i18n("Ctrl+drop: copy, Shift+drop: move, Shift+Ctrl+drop: link."); +// Too much noise information: +// else if (currentBasket()->inserterShown() && currentBasket()->inserterSplit() && !currentBasket()->inserterGroup()) +// message = i18n("Click to insert a note, right click for more options. Click on the right of the line to group instead of insert."); +// else if (currentBasket()->inserterShown() && currentBasket()->inserterSplit() && currentBasket()->inserterGroup()) +// message = i18n("Click to group a note, right click for more options. Click on the left of the line to group instead of insert."); + else if (Global::debugWindow) + message = "DEBUG: " + Global::bnpView->currentBasket()->folderName(); + + setStatusText(message); +} + +void BasketStatusBar::setLockStatus(bool isLocked) +{ + if(!m_lockStatus) + return; + + if (isLocked) { + m_lockStatus->setPixmap(SmallIcon("encrypted.png")); + QToolTip::add(m_lockStatus, i18n( + "

      This basket is locked.
      Click to unlock it.

      ").replace(" ", " ") ); +// QToolTip::add(m_lockStatus, i18n("This basket is locked.\nClick to unlock it.")); + } else { + m_lockStatus->clear(); + QToolTip::add(m_lockStatus, i18n( + "

      This basket is unlocked.
      Click to lock it.

      ").replace(" ", " ") ); +// QToolTip::add(m_lockStatus, i18n("This basket is unlocked.\nClick to lock it.")); + } +} + +void BasketStatusBar::setSelectionStatus(const QString &s) +{ + if (m_selectionStatus) + m_selectionStatus->setText(s); +} + +void BasketStatusBar::setUnsavedStatus(bool isUnsaved) +{ + if (!m_savedStatus) + return; + + if (isUnsaved) { + if (m_savedStatus->pixmap() == 0) + m_savedStatus->setPixmap(m_savedStatusPixmap); + } else + m_savedStatus->clear(); +} + +#include "basketstatusbar.moc" diff --git a/src/basketstatusbar.h b/src/basketstatusbar.h new file mode 100644 index 0000000..f9d8714 --- /dev/null +++ b/src/basketstatusbar.h @@ -0,0 +1,68 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef BASKETSTATUSBAR_H +#define BASKETSTATUSBAR_H + +#include +#include + +class KStatusBar; +namespace KParts { class StatusBarExtension; } +class QWidget; +class QLabel; +class ClickableLabel; + +/** + @author Sébastien Laoût +*/ +class BasketStatusBar : public QObject +{ + Q_OBJECT + public: + BasketStatusBar(KStatusBar *bar); + BasketStatusBar(KParts::StatusBarExtension *extension); + ~BasketStatusBar(); + + public slots: + /** GUI Main Window actions **/ + void setStatusBarHint(const QString &hint); /// << Set a specific message or update if hint is empty + void updateStatusBarHint(); /// << Display the current state message (dragging, editing) or reset the startsbar message + void postStatusbarMessage(const QString &text); + void setSelectionStatus(const QString &s); + void setLockStatus(bool isLocked); + void setupStatusBar(); + void setUnsavedStatus(bool isUnsaved); + + protected: + KStatusBar *statusBar () const; + void addWidget(QWidget * widget, int stretch = 0, bool permanent = false); + void setStatusText(const QString &txt); + + private: + KStatusBar *m_bar; + KParts::StatusBarExtension *m_extension; + QLabel *m_selectionStatus; + ClickableLabel *m_lockStatus; + QLabel *m_basketStatus; + QLabel *m_savedStatus; + QPixmap m_savedStatusPixmap; +}; + +#endif diff --git a/src/basketui.rc b/src/basketui.rc new file mode 100644 index 0000000..de64c2a --- /dev/null +++ b/src/basketui.rc @@ -0,0 +1,233 @@ + + + + + &Basket + + + + + &Export + + + + + + + + + + &Import + + + + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + + + + + &Go + + + + + + + &Note + + + + + + + + + + + + + + + &Tags + + + &Insert + + + + + + + + + + + + + + + &Settings + + + + + + + + + + + &Help + + + + + + + + + + + + + + + Main Toolbar + + + + + + + + + + + + Text Formating Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + &Export + + + + + + + + + + &Import + + + + + + + + + + + + + + + + + + &Import + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/bnpview.cpp b/src/bnpview.cpp new file mode 100644 index 0000000..b0d83f7 --- /dev/null +++ b/src/bnpview.cpp @@ -0,0 +1,2390 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + + /// NEW: + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "bnpview.h" +#include "basket.h" +#include "tools.h" +#include "settings.h" +#include "debugwindow.h" +#include "xmlwork.h" +#include "basketfactory.h" +#include "softwareimporters.h" +#include "colorpicker.h" +#include "regiongrabber.h" +#include "basketlistview.h" +#include "basketproperties.h" +#include "password.h" +#include "newbasketdialog.h" +#include "notedrag.h" +#include "formatimporter.h" +#include "basketstatusbar.h" +#include "backgroundmanager.h" +#include "noteedit.h" // To launch InlineEditors::initToolBars() +#include "archive.h" +#include "htmlexporter.h" +#include "crashhandler.h" +#include "likeback.h" +#include "backup.h" + +/** class BNPView: */ + +const int BNPView::c_delayTooltipTime = 275; + +BNPView::BNPView(QWidget *parent, const char *name, KXMLGUIClient *aGUIClient, + KActionCollection *actionCollection, BasketStatusBar *bar) + : DCOPObject("BasketIface"), QSplitter(Qt::Horizontal, parent, name), m_actLockBasket(0), m_actPassBasket(0), + m_loading(true), m_newBasketPopup(false), m_firstShow(true), + m_regionGrabber(0), m_passiveDroppedSelection(0), m_passivePopup(0), m_actionCollection(actionCollection), + m_guiClient(aGUIClient), m_statusbar(bar), m_tryHideTimer(0), m_hideTimer(0) +{ + /* Settings */ + Settings::loadConfig(); + + Global::bnpView = this; + + // Needed when loading the baskets: + Global::globalAccel = new KGlobalAccel(this); // FIXME: might be null (KPart case)! + Global::backgroundManager = new BackgroundManager(); + + setupGlobalShortcuts(); + initialize(); + QTimer::singleShot(0, this, SLOT(lateInit())); +} + +BNPView::~BNPView() +{ + int treeWidth = Global::bnpView->sizes()[Settings::treeOnLeft() ? 0 : 1]; + + Settings::setBasketTreeWidth(treeWidth); + + if (currentBasket() && currentBasket()->isDuringEdit()) + currentBasket()->closeEditor(); + + Settings::saveConfig(); + + Global::bnpView = 0; + + delete Global::systemTray; + Global::systemTray = 0; + delete m_colorPicker; + delete m_statusbar; + + NoteDrag::createAndEmptyCuttingTmpFolder(); // Clean the temporary folder we used +} + +void BNPView::lateInit() +{ +/* + InlineEditors* instance = InlineEditors::instance(); + + if(instance) + { + KToolBar* toolbar = instance->richTextToolBar(); + + if(toolbar) + toolbar->hide(); + } +*/ + if(!isPart()) + { + if (Settings::useSystray() && KCmdLineArgs::parsedArgs() && KCmdLineArgs::parsedArgs()->isSet("start-hidden")) + if(Global::mainWindow()) Global::mainWindow()->hide(); + else if (Settings::useSystray() && kapp->isRestored()) + if(Global::mainWindow()) Global::mainWindow()->setShown(!Settings::startDocked()); + else + showMainWindow(); + } + + // If the main window is hidden when session is saved, Container::queryClose() + // isn't called and the last value would be kept + Settings::setStartDocked(true); + Settings::saveConfig(); + + /* System tray icon */ + Global::systemTray = new SystemTray(Global::mainWindow()); + connect( Global::systemTray, SIGNAL(showPart()), this, SIGNAL(showPart()) ); + if (Settings::useSystray()) + Global::systemTray->show(); + + // Load baskets + DEBUG_WIN << "Baskets are loaded from " + Global::basketsFolder(); + + NoteDrag::createAndEmptyCuttingTmpFolder(); // If last exec hasn't done it: clean the temporary folder we will use + Tag::loadTags(); // Tags should be ready before loading baskets, but tags need the mainContainer to be ready to create KActions! + load(); + + // If no basket has been found, try to import from an older version, + if (!firstListViewItem()) { + QDir dir; + dir.mkdir(Global::basketsFolder()); + if (FormatImporter::shouldImportBaskets()) { + FormatImporter::importBaskets(); + load(); + } + if (!firstListViewItem()) { + // Create first basket: + BasketFactory::newBasket(/*icon=*/"", /*name=*/i18n("General"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + } + } + + // Load the Welcome Baskets if it is the First Time: + if (!Settings::welcomeBasketsAdded()) { + addWelcomeBaskets(); + Settings::setWelcomeBasketsAdded(true); + Settings::saveConfig(); + } + + m_tryHideTimer = new QTimer(this); + m_hideTimer = new QTimer(this); + connect( m_tryHideTimer, SIGNAL(timeout()), this, SLOT(timeoutTryHide()) ); + connect( m_hideTimer, SIGNAL(timeout()), this, SLOT(timeoutHide()) ); + + // Preload every baskets for instant filtering: +/*StopWatch::start(100); + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + item->basket()->load(); + kapp->processEvents(); + ++it; + } +StopWatch::check(100);*/ +} + +void BNPView::addWelcomeBaskets() +{ + // Possible paths where to find the welcome basket archive, trying the translated one, and falling back to the English one: + QStringList possiblePaths; + if (QString(KGlobal::locale()->encoding()) == QString("UTF-8")) { // Welcome baskets are encoded in UTF-8. If the system is not, then use the English version: + possiblePaths.append(KGlobal::dirs()->findResource("data", "basket/welcome/Welcome_" + KGlobal::locale()->language() + ".baskets")); + possiblePaths.append(KGlobal::dirs()->findResource("data", "basket/welcome/Welcome_" + QStringList::split("_", KGlobal::locale()->language())[0] + ".baskets")); + } + possiblePaths.append(KGlobal::dirs()->findResource("data", "basket/welcome/Welcome_en_US.baskets")); + + // Take the first EXISTING basket archive found: + QDir dir; + QString path; + for (QStringList::Iterator it = possiblePaths.begin(); it != possiblePaths.end(); ++it) { + if (dir.exists(*it)) { + path = *it; + break; + } + } + + // Extract: + if (!path.isEmpty()) + Archive::open(path); +} + +void BNPView::onFirstShow() +{ + // Don't enable LikeBack until bnpview is shown. This way it works better with kontact. + /* LikeBack */ +/* Global::likeBack = new LikeBack(LikeBack::AllButtons, / *showBarByDefault=* /true, Global::config(), Global::about()); + Global::likeBack->setServer("basket.linux62.org", "/likeback/send.php"); + Global:likeBack->setAcceptedLanguages(QStringList::split(";", "en;fr"), i18n("Only english and french languages are accepted.")); + if (isPart()) + Global::likeBack->disableBar(); // See BNPView::shown() and BNPView::hide(). +*/ + + if (isPart()) + Global::likeBack->disableBar(); // See BNPView::shown() and BNPView::hide(). + +/* + LikeBack::init(Global::config(), Global::about(), LikeBack::AllButtons); + LikeBack::setServer("basket.linux62.org", "/likeback/send.php"); +// LikeBack::setServer("localhost", "/~seb/basket/likeback/send.php"); + LikeBack::setCustomLanguageMessage(i18n("Only english and french languages are accepted.")); +// LikeBack::setWindowNamesListing(LikeBack:: / *NoListing* / / *WarnUnnamedWindows* / AllWindows); +*/ + + // In late init, because we need kapp->mainWidget() to be set! + if (!isPart()) + connectTagsMenu(); + + m_statusbar->setupStatusBar(); + + int treeWidth = Settings::basketTreeWidth(); + if (treeWidth < 0) + treeWidth = m_tree->fontMetrics().maxWidth() * 11; + QValueList splitterSizes; + splitterSizes.append(treeWidth); + setSizes(splitterSizes); +} + +void BNPView::setupGlobalShortcuts() +{ + /* Global shortcuts */ + KGlobalAccel *globalAccel = Global::globalAccel; // Better for the following lines + + // Ctrl+Shift+W only works when started standalone: + QWidget *basketMainWindow = (QWidget*) (Global::bnpView->parent()->inherits("MainWindow") ? Global::bnpView->parent() : 0); + + if (basketMainWindow) { + globalAccel->insert( "global_show_hide_main_window", i18n("Show/hide main window"), + i18n("Allows you to show main Window if it is hidden, and to hide it if it is shown."), + Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_W, Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_W, + basketMainWindow, SLOT(changeActive()), true, true ); + } + globalAccel->insert( "global_paste", i18n("Paste clipboard contents in current basket"), + i18n("Allows you to paste clipboard contents in the current basket without having to open the main window."), + Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V, Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V, + Global::bnpView, SLOT(globalPasteInCurrentBasket()), true, true ); + globalAccel->insert( "global_show_current_basket", i18n("Show current basket name"), + i18n("Allows you to know basket is current without opening the main window."), + "", "", + Global::bnpView, SLOT(showPassiveContentForced()), true, true ); + globalAccel->insert( "global_paste_selection", i18n("Paste selection in current basket"), + i18n("Allows you to paste clipboard selection in the current basket without having to open the main window."), + Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S, Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S, + Global::bnpView, SLOT(pasteSelInCurrentBasket()), true, true ); + globalAccel->insert( "global_new_basket", i18n("Create a new basket"), + i18n("Allows you to create a new basket without having to open the main window (you then can use the other global shortcuts to add a note, paste clipboard or paste selection in this new basket)."), + "", "", + Global::bnpView, SLOT(askNewBasket()), true, true ); + globalAccel->insert( "global_previous_basket", i18n("Go to previous basket"), + i18n("Allows you to change current basket to the previous one without having to open the main window."), + "", "", + Global::bnpView, SLOT(goToPreviousBasket()), true, true ); + globalAccel->insert( "global_next_basket", i18n("Go to next basket"), + i18n("Allows you to change current basket to the next one without having to open the main window."), + "", "", + Global::bnpView, SLOT(goToNextBasket()), true, true ); +// globalAccel->insert( "global_note_add_text", i18n("Insert plain text note"), +// i18n("Add a plain text note to the current basket without having to open the main window."), +// "", "", //Qt::CTRL+Qt::ALT+Qt::Key_T, Qt::CTRL+Qt::ALT+Qt::Key_T, +// Global::bnpView, SLOT(addNoteText()), true, true ); + globalAccel->insert( "global_note_add_html", i18n("Insert text note"), + i18n("Add a text note to the current basket without having to open the main window."), + Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_T, Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_T, //"", "", + Global::bnpView, SLOT(addNoteHtml()), true, true ); + globalAccel->insert( "global_note_add_image", i18n("Insert image note"), + i18n("Add an image note to the current basket without having to open the main window."), + "", "", + Global::bnpView, SLOT(addNoteImage()), true, true ); + globalAccel->insert( "global_note_add_link", i18n("Insert link note"), + i18n("Add a link note to the current basket without having to open the main window."), + "", "", + Global::bnpView, SLOT(addNoteLink()), true, true ); + globalAccel->insert( "global_note_add_color", i18n("Insert color note"), + i18n("Add a color note to the current basket without having to open the main window."), + "", "", + Global::bnpView, SLOT(addNoteColor()), true, true ); + globalAccel->insert( "global_note_pick_color", i18n("Pick color from screen"), + i18n("Add a color note picked from one pixel on screen to the current basket without " + "having to open the main window."), + "", "", + Global::bnpView, SLOT(slotColorFromScreenGlobal()), true, true ); + globalAccel->insert( "global_note_grab_screenshot", i18n("Grab screen zone"), + i18n("Grab a screen zone as an image in the current basket without " + "having to open the main window."), + "", "", + Global::bnpView, SLOT(grabScreenshotGlobal()), true, true ); + globalAccel->readSettings(); + globalAccel->updateConnections(); +} + +void BNPView::initialize() +{ + /// Configure the List View Columns: + m_tree = new BasketTreeListView(this); + m_tree->addColumn(i18n("Baskets")); + m_tree->setColumnWidthMode(0, QListView::Maximum); + m_tree->setFullWidth(true); + m_tree->setSorting(-1/*Disabled*/); + m_tree->setRootIsDecorated(true); + m_tree->setTreeStepSize(16); + m_tree->setLineWidth(1); + m_tree->setMidLineWidth(0); + m_tree->setFocusPolicy(QWidget::NoFocus); + + /// Configure the List View Drag and Drop: + m_tree->setDragEnabled(true); + m_tree->setAcceptDrops(true); + m_tree->setItemsMovable(true); + m_tree->setDragAutoScroll(true); + m_tree->setDropVisualizer(true); + m_tree->setDropHighlighter(true); + + /// Configure the Splitter: + m_stack = new QWidgetStack(this); + + setOpaqueResize(true); + + setCollapsible(m_tree, true); + setCollapsible(m_stack, false); + setResizeMode(m_tree, QSplitter::KeepSize); + setResizeMode(m_stack, QSplitter::Stretch); + + /// Configure the List View Signals: + connect( m_tree, SIGNAL(returnPressed(QListViewItem*)), this, SLOT(slotPressed(QListViewItem*)) ); + connect( m_tree, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotPressed(QListViewItem*)) ); + connect( m_tree, SIGNAL(pressed(QListViewItem*)), this, SLOT(slotPressed(QListViewItem*)) ); + connect( m_tree, SIGNAL(expanded(QListViewItem*)), this, SLOT(needSave(QListViewItem*)) ); + connect( m_tree, SIGNAL(collapsed(QListViewItem*)), this, SLOT(needSave(QListViewItem*)) ); + connect( m_tree, SIGNAL(contextMenu(KListView*, QListViewItem*, const QPoint&)), this, SLOT(slotContextMenu(KListView*, QListViewItem*, const QPoint&)) ); + connect( m_tree, SIGNAL(mouseButtonPressed(int, QListViewItem*, const QPoint&, int)), this, SLOT(slotMouseButtonPressed(int, QListViewItem*, const QPoint&, int)) ); + connect( m_tree, SIGNAL(doubleClicked(QListViewItem*, const QPoint&, int)), this, SLOT(slotShowProperties(QListViewItem*, const QPoint&, int)) ); + + connect( m_tree, SIGNAL(expanded(QListViewItem*)), this, SIGNAL(basketChanged()) ); + connect( m_tree, SIGNAL(collapsed(QListViewItem*)), this, SIGNAL(basketChanged()) ); + connect( this, SIGNAL(basketNumberChanged(int)), this, SIGNAL(basketChanged()) ); + + connect( this, SIGNAL(basketNumberChanged(int)), this, SLOT(slotBasketNumberChanged(int)) ); + connect( this, SIGNAL(basketChanged()), this, SLOT(slotBasketChanged()) ); + + /* LikeBack */ + Global::likeBack = new LikeBack(LikeBack::AllButtons, /*showBarByDefault=*/false, Global::config(), Global::about()); + Global::likeBack->setServer("basket.linux62.org", "/likeback/send.php"); + +// There are too much comments, and people reading comments are more and more international, so we accept only English: +// Global::likeBack->setAcceptedLanguages(QStringList::split(";", "en;fr"), i18n("Please write in English or French.")); + +// if (isPart()) +// Global::likeBack->disableBar(); // See BNPView::shown() and BNPView::hide(). + + Global::likeBack->sendACommentAction(actionCollection()); // Just create it! + setupActions(); + + /// What's This Help for the tree: + QWhatsThis::add(m_tree, i18n( + "

      Basket Tree

      " + "Here is the list of your baskets. " + "You can organize your data by putting them in different baskets. " + "You can group baskets by subject by creating new baskets inside others. " + "You can browse between them by clicking a basket to open it, or reorganize them using drag and drop.")); + + setTreePlacement(Settings::treeOnLeft()); +} + +void BNPView::setupActions() +{ + m_actSaveAsArchive = new KAction( i18n("&Basket Archive..."), "baskets", 0, + this, SLOT(saveAsArchive()), actionCollection(), "basket_export_basket_archive" ); + m_actOpenArchive = new KAction( i18n("&Basket Archive..."), "baskets", 0, + this, SLOT(openArchive()), actionCollection(), "basket_import_basket_archive" ); + + m_actHideWindow = new KAction( i18n("&Hide Window"), "", KStdAccel::shortcut(KStdAccel::Close), + this, SLOT(hideOnEscape()), actionCollection(), "window_hide" ); + m_actHideWindow->setEnabled(Settings::useSystray()); // Init here ! + + m_actExportToHtml = new KAction( i18n("&HTML Web Page..."), "html", 0, + this, SLOT(exportToHTML()), actionCollection(), "basket_export_html" ); + new KAction( i18n("K&Notes"), "knotes", 0, + this, SLOT(importKNotes()), actionCollection(), "basket_import_knotes" ); + new KAction( i18n("K&Jots"), "kjots", 0, + this, SLOT(importKJots()), actionCollection(), "basket_import_kjots" ); + new KAction( i18n("&KnowIt..."), "knowit", 0, + this, SLOT(importKnowIt()), actionCollection(), "basket_import_knowit" ); + new KAction( i18n("Tux&Cards..."), "tuxcards", 0, + this, SLOT(importTuxCards()), actionCollection(), "basket_import_tuxcards" ); + new KAction( i18n("&Sticky Notes"), "gnome", 0, + this, SLOT(importStickyNotes()), actionCollection(), "basket_import_sticky_notes" ); + new KAction( i18n("&Tomboy"), "tintin", 0, + this, SLOT(importTomboy()), actionCollection(), "basket_import_tomboy" ); + new KAction( i18n("Text &File..."), "txt", 0, + this, SLOT(importTextFile()), actionCollection(), "basket_import_text_file" ); + + new KAction( i18n("&Backup && Restore..."), "", 0, + this, SLOT(backupRestore()), actionCollection(), "basket_backup_restore" ); + + /** Note : ****************************************************************/ + + m_actDelNote = new KAction( i18n("D&elete"), "editdelete", "Delete", + this, SLOT(delNote()), actionCollection(), "edit_delete" ); + m_actCutNote = KStdAction::cut( this, SLOT(cutNote()), actionCollection() ); + m_actCopyNote = KStdAction::copy( this, SLOT(copyNote()), actionCollection() ); + + m_actSelectAll = KStdAction::selectAll( this, SLOT( slotSelectAll() ), actionCollection() ); + m_actSelectAll->setStatusText( i18n( "Selects all notes" ) ); + m_actUnselectAll = new KAction( i18n( "U&nselect All" ), "", this, SLOT( slotUnselectAll() ), + actionCollection(), "edit_unselect_all" ); + m_actUnselectAll->setStatusText( i18n( "Unselects all selected notes" ) ); + m_actInvertSelection = new KAction( i18n( "&Invert Selection" ), CTRL+Key_Asterisk, + this, SLOT( slotInvertSelection() ), + actionCollection(), "edit_invert_selection" ); + m_actInvertSelection->setStatusText( i18n( "Inverts the current selection of notes" ) ); + + m_actEditNote = new KAction( i18n("Verb; not Menu", "&Edit..."), "edit", "Return", + this, SLOT(editNote()), actionCollection(), "note_edit" ); + + m_actOpenNote = KStdAction::open( this, SLOT(openNote()), actionCollection(), "note_open" ); + m_actOpenNote->setIcon("window_new"); + m_actOpenNote->setText(i18n("&Open")); + m_actOpenNote->setShortcut("F9"); + + m_actOpenNoteWith = new KAction( i18n("Open &With..."), "", "Shift+F9", + this, SLOT(openNoteWith()), actionCollection(), "note_open_with" ); + m_actSaveNoteAs = KStdAction::saveAs( this, SLOT(saveNoteAs()), actionCollection(), "note_save_to_file" ); + m_actSaveNoteAs->setIcon(""); + m_actSaveNoteAs->setText(i18n("&Save to File...")); + m_actSaveNoteAs->setShortcut("F10"); + + m_actGroup = new KAction( i18n("&Group"), "attach", "Ctrl+G", + this, SLOT(noteGroup()), actionCollection(), "note_group" ); + m_actUngroup = new KAction( i18n("U&ngroup"), "", "Ctrl+Shift+G", + this, SLOT(noteUngroup()), actionCollection(), "note_ungroup" ); + + m_actMoveOnTop = new KAction( i18n("Move on &Top"), "2uparrow", "Ctrl+Shift+Home", + this, SLOT(moveOnTop()), actionCollection(), "note_move_top" ); + m_actMoveNoteUp = new KAction( i18n("Move &Up"), "1uparrow", "Ctrl+Shift+Up", + this, SLOT(moveNoteUp()), actionCollection(), "note_move_up" ); + m_actMoveNoteDown = new KAction( i18n("Move &Down"), "1downarrow", "Ctrl+Shift+Down", + this, SLOT(moveNoteDown()), actionCollection(), "note_move_down" ); + m_actMoveOnBottom = new KAction( i18n("Move on &Bottom"), "2downarrow", "Ctrl+Shift+End", + this, SLOT(moveOnBottom()), actionCollection(), "note_move_bottom" ); +#if KDE_IS_VERSION( 3, 1, 90 ) // KDE 3.2.x + m_actPaste = KStdAction::pasteText( this, SLOT(pasteInCurrentBasket()), actionCollection() ); +#else + m_actPaste = KStdAction::paste( this, SLOT(pasteInCurrentBasket()), actionCollection() ); +#endif + + /** Insert : **************************************************************/ + + QSignalMapper *insertEmptyMapper = new QSignalMapper(this); + QSignalMapper *insertWizardMapper = new QSignalMapper(this); + connect( insertEmptyMapper, SIGNAL(mapped(int)), this, SLOT(insertEmpty(int)) ); + connect( insertWizardMapper, SIGNAL(mapped(int)), this, SLOT(insertWizard(int)) ); + +// m_actInsertText = new KAction( i18n("Plai&n Text"), "text", "Ctrl+T", actionCollection(), "insert_text" ); + m_actInsertHtml = new KAction( i18n("&Text"), "html", "Insert", actionCollection(), "insert_html" ); + m_actInsertLink = new KAction( i18n("&Link"), "link", "Ctrl+Y", actionCollection(), "insert_link" ); + m_actInsertImage = new KAction( i18n("&Image"), "image", "", actionCollection(), "insert_image" ); + m_actInsertColor = new KAction( i18n("&Color"), "colorset", "", actionCollection(), "insert_color" ); + m_actInsertLauncher=new KAction( i18n("L&auncher"), "launch", "", actionCollection(), "insert_launcher" ); + + m_actImportKMenu = new KAction( i18n("Import Launcher from &KDE Menu..."), "kmenu", "", actionCollection(), "insert_kmenu" ); + m_actImportIcon = new KAction( i18n("Im&port Icon..."), "icons", "", actionCollection(), "insert_icon" ); + m_actLoadFile = new KAction( i18n("Load From &File..."), "fileimport", "", actionCollection(), "insert_from_file" ); + +// connect( m_actInsertText, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); + connect( m_actInsertHtml, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); + connect( m_actInsertImage, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); + connect( m_actInsertLink, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); + connect( m_actInsertColor, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); + connect( m_actInsertLauncher, SIGNAL(activated()), insertEmptyMapper, SLOT(map()) ); +// insertEmptyMapper->setMapping(m_actInsertText, NoteType::Text ); + insertEmptyMapper->setMapping(m_actInsertHtml, NoteType::Html ); + insertEmptyMapper->setMapping(m_actInsertImage, NoteType::Image ); + insertEmptyMapper->setMapping(m_actInsertLink, NoteType::Link ); + insertEmptyMapper->setMapping(m_actInsertColor, NoteType::Color ); + insertEmptyMapper->setMapping(m_actInsertLauncher, NoteType::Launcher); + + connect( m_actImportKMenu, SIGNAL(activated()), insertWizardMapper, SLOT(map()) ); + connect( m_actImportIcon, SIGNAL(activated()), insertWizardMapper, SLOT(map()) ); + connect( m_actLoadFile, SIGNAL(activated()), insertWizardMapper, SLOT(map()) ); + insertWizardMapper->setMapping(m_actImportKMenu, 1 ); + insertWizardMapper->setMapping(m_actImportIcon, 2 ); + insertWizardMapper->setMapping(m_actLoadFile, 3 ); + + m_colorPicker = new DesktopColorPicker(); + m_actColorPicker = new KAction( i18n("C&olor from Screen"), "kcolorchooser", "", + this, SLOT(slotColorFromScreen()), actionCollection(), "insert_screen_color" ); + connect( m_colorPicker, SIGNAL(pickedColor(const QColor&)), this, SLOT(colorPicked(const QColor&)) ); + connect( m_colorPicker, SIGNAL(canceledPick()), this, SLOT(colorPickingCanceled()) ); + + m_actGrabScreenshot = new KAction( i18n("Grab Screen &Zone"), "ksnapshot", "", + this, SLOT(grabScreenshot()), actionCollection(), "insert_screen_capture" ); + //connect( m_actGrabScreenshot, SIGNAL(regionGrabbed(const QPixmap&)), this, SLOT(screenshotGrabbed(const QPixmap&)) ); + //connect( m_colorPicker, SIGNAL(canceledPick()), this, SLOT(colorPickingCanceled()) ); + +// m_insertActions.append( m_actInsertText ); + m_insertActions.append( m_actInsertHtml ); + m_insertActions.append( m_actInsertLink ); + m_insertActions.append( m_actInsertImage ); + m_insertActions.append( m_actInsertColor ); + m_insertActions.append( m_actImportKMenu ); + m_insertActions.append( m_actInsertLauncher ); + m_insertActions.append( m_actImportIcon ); + m_insertActions.append( m_actLoadFile ); + m_insertActions.append( m_actColorPicker ); + m_insertActions.append( m_actGrabScreenshot ); + + /** Basket : **************************************************************/ + + // At this stage, main.cpp has not set kapp->mainWidget(), so Global::runInsideKontact() + // returns true. We do it ourself: + bool runInsideKontact = true; + QWidget *parentWidget = (QWidget*) parent(); + while (parentWidget) { + if (parentWidget->inherits("MainWindow")) + runInsideKontact = false; + parentWidget = (QWidget*) parentWidget->parent(); + } + + // Use the "basket" incon in Kontact so it is consistent with the Kontact "New..." icon + actNewBasket = new KAction( i18n("&New Basket..."), (runInsideKontact ? "basket" : "filenew"), KStdAccel::shortcut(KStdAccel::New), + this, SLOT(askNewBasket()), actionCollection(), "basket_new" ); + actNewSubBasket = new KAction( i18n("New &Sub-Basket..."), "", "Ctrl+Shift+N", + this, SLOT(askNewSubBasket()), actionCollection(), "basket_new_sub" ); + actNewSiblingBasket = new KAction( i18n("New Si&bling Basket..."), "", "", + this, SLOT(askNewSiblingBasket()), actionCollection(), "basket_new_sibling" ); + + KActionMenu *newBasketMenu = new KActionMenu(i18n("&New"), "filenew", actionCollection(), "basket_new_menu"); + newBasketMenu->insert(actNewBasket); + newBasketMenu->insert(actNewSubBasket); + newBasketMenu->insert(actNewSiblingBasket); + connect( newBasketMenu, SIGNAL(activated()), this, SLOT(askNewBasket()) ); + + m_actPropBasket = new KAction( i18n("&Properties..."), "misc", "F2", + this, SLOT(propBasket()), actionCollection(), "basket_properties" ); + m_actDelBasket = new KAction( i18n("Remove Basket", "&Remove"), "", 0, + this, SLOT(delBasket()), actionCollection(), "basket_remove" ); +#ifdef HAVE_LIBGPGME + m_actPassBasket = new KAction( i18n("Password protection", "Pass&word..."), "", 0, + this, SLOT(password()), actionCollection(), "basket_password" ); + m_actLockBasket = new KAction( i18n("Lock Basket", "&Lock"), "", "Ctrl+L", + this, SLOT(lockBasket()), actionCollection(), "basket_lock" ); +#endif + /** Edit : ****************************************************************/ + + //m_actUndo = KStdAction::undo( this, SLOT(undo()), actionCollection() ); + //m_actUndo->setEnabled(false); // Not yet implemented ! + //m_actRedo = KStdAction::redo( this, SLOT(redo()), actionCollection() ); + //m_actRedo->setEnabled(false); // Not yet implemented ! + + m_actShowFilter = new KToggleAction( i18n("&Filter"), "filter", KStdAccel::shortcut(KStdAccel::Find), + actionCollection(), "edit_filter" ); + connect( m_actShowFilter, SIGNAL(toggled(bool)), this, SLOT(showHideFilterBar(bool)) ); + + m_actFilterAllBaskets = new KToggleAction( i18n("Filter all &Baskets"), "find", "Ctrl+Shift+F", + actionCollection(), "edit_filter_all_baskets" ); + connect( m_actFilterAllBaskets, SIGNAL(toggled(bool)), this, SLOT(toggleFilterAllBaskets(bool)) ); + + m_actResetFilter = new KAction( i18n( "&Reset Filter" ), "locationbar_erase", "Ctrl+R", + this, SLOT( slotResetFilter() ), actionCollection(), "edit_filter_reset" ); + + /** Go : ******************************************************************/ + + m_actPreviousBasket = new KAction( i18n( "&Previous Basket" ), "up", "Alt+Up", + this, SLOT(goToPreviousBasket()), actionCollection(), "go_basket_previous" ); + m_actNextBasket = new KAction( i18n( "&Next Basket" ), "down", "Alt+Down", + this, SLOT(goToNextBasket()), actionCollection(), "go_basket_next" ); + m_actFoldBasket = new KAction( i18n( "&Fold Basket" ), "back", "Alt+Left", + this, SLOT(foldBasket()), actionCollection(), "go_basket_fold" ); + m_actExpandBasket = new KAction( i18n( "&Expand Basket" ), "forward", "Alt+Right", + this, SLOT(expandBasket()), actionCollection(), "go_basket_expand" ); + // FOR_BETA_PURPOSE: +// m_convertTexts = new KAction( i18n("Convert text notes to rich text notes"), "compfile", "", +// this, SLOT(convertTexts()), actionCollection(), "beta_convert_texts" ); + + InlineEditors::instance()->initToolBars(actionCollection()); + + actConfigGlobalShortcuts = KStdAction::keyBindings(this, SLOT(showGlobalShortcutsSettingsDialog()), + actionCollection(), "options_configure_global_keybinding"); + actConfigGlobalShortcuts->setText(i18n("Configure &Global Shortcuts...")); + + /** Help : ****************************************************************/ + + new KAction( i18n("&Welcome Baskets"), "", "", this, SLOT(addWelcomeBaskets()), actionCollection(), "help_welcome_baskets" ); +} + +QListViewItem* BNPView::firstListViewItem() +{ + return m_tree->firstChild(); +} + +void BNPView::slotShowProperties(QListViewItem *item, const QPoint&, int) +{ + if (item) + propBasket(); +} + +void BNPView::slotMouseButtonPressed(int button, QListViewItem *item, const QPoint &/*pos*/, int /*column*/) +{ + if (item && (button & Qt::MidButton)) { + // TODO: Paste into ((BasketListViewItem*)listViewItem)->basket() + } +} + +void BNPView::slotContextMenu(KListView */*listView*/, QListViewItem *item, const QPoint &pos) +{ + QString menuName; + if (item) { + Basket* basket = ((BasketListViewItem*)item)->basket(); + + setCurrentBasket(basket); + menuName = "basket_popup"; + } else { + menuName = "tab_bar_popup"; + /* + * "File -> New" create a new basket with the same parent basket as the the current one. + * But when invoked when right-clicking the empty area at the bottom of the basket tree, + * it is obvious the user want to create a new basket at the bottom of the tree (with no parent). + * So we set a temporary variable during the time the popup menu is shown, + * so the slot askNewBasket() will do the right thing: + */ + setNewBasketPopup(); + } + + QPopupMenu *menu = popupMenu(menuName); + connect( menu, SIGNAL(aboutToHide()), this, SLOT(aboutToHideNewBasketPopup()) ); + menu->exec(pos); +} + +void BNPView::save() +{ + DEBUG_WIN << "Basket Tree: Saving..."; + + // Create Document: + QDomDocument document("basketTree"); + QDomElement root = document.createElement("basketTree"); + document.appendChild(root); + + // Save Basket Tree: + save(m_tree->firstChild(), document, root); + + // Write to Disk: + Basket::safelySaveToFile(Global::basketsFolder() + "baskets.xml", "\n" + document.toString()); +// QFile file(Global::basketsFolder() + "baskets.xml"); +// if (file.open(IO_WriteOnly)) { +// QTextStream stream(&file); +// stream.setEncoding(QTextStream::UnicodeUTF8); +// QString xml = document.toString(); +// stream << "\n"; +// stream << xml; +// file.close(); +// } +} + +void BNPView::save(QListViewItem *firstItem, QDomDocument &document, QDomElement &parentElement) +{ + QListViewItem *item = firstItem; + while (item) { +// Basket *basket = ((BasketListViewItem*)item)->basket(); + QDomElement basketElement = this->basketElement(item, document, parentElement); +/* + QDomElement basketElement = document.createElement("basket"); + parentElement.appendChild(basketElement); + // Save Attributes: + basketElement.setAttribute("folderName", basket->folderName()); + if (item->firstChild()) // If it can be expanded/folded: + basketElement.setAttribute("folded", XMLWork::trueOrFalse(!item->isOpen())); + if (((BasketListViewItem*)item)->isCurrentBasket()) + basketElement.setAttribute("lastOpened", "true"); + // Save Properties: + QDomElement properties = document.createElement("properties"); + basketElement.appendChild(properties); + basket->saveProperties(document, properties); +*/ + // Save Child Basket: + if (item->firstChild()) + save(item->firstChild(), document, basketElement); + // Next Basket: + item = item->nextSibling(); + } +} + +QDomElement BNPView::basketElement(QListViewItem *item, QDomDocument &document, QDomElement &parentElement) +{ + Basket *basket = ((BasketListViewItem*)item)->basket(); + QDomElement basketElement = document.createElement("basket"); + parentElement.appendChild(basketElement); + // Save Attributes: + basketElement.setAttribute("folderName", basket->folderName()); + if (item->firstChild()) // If it can be expanded/folded: + basketElement.setAttribute("folded", XMLWork::trueOrFalse(!item->isOpen())); + if (((BasketListViewItem*)item)->isCurrentBasket()) + basketElement.setAttribute("lastOpened", "true"); + // Save Properties: + QDomElement properties = document.createElement("properties"); + basketElement.appendChild(properties); + basket->saveProperties(document, properties); + return basketElement; +} + +void BNPView::saveSubHierarchy(QListViewItem *item, QDomDocument &document, QDomElement &parentElement, bool recursive) +{ + QDomElement element = basketElement(item, document, parentElement); + if (recursive && item->firstChild()) + save(item->firstChild(), document, element); +} + +void BNPView::load() +{ + QDomDocument *doc = XMLWork::openFile("basketTree", Global::basketsFolder() + "baskets.xml"); + //BEGIN Compatibility with 0.6.0 Pre-Alpha versions: + if (!doc) + doc = XMLWork::openFile("basketsTree", Global::basketsFolder() + "baskets.xml"); + //END + if (doc != 0) { + QDomElement docElem = doc->documentElement(); + load(m_tree, 0L, docElem); + } + m_loading = false; +} + +void BNPView::load(KListView */*listView*/, QListViewItem *item, const QDomElement &baskets) +{ + QDomNode n = baskets.firstChild(); + while ( ! n.isNull() ) { + QDomElement element = n.toElement(); + if ( (!element.isNull()) && element.tagName() == "basket" ) { + QString folderName = element.attribute("folderName"); + if (!folderName.isEmpty()) { + Basket *basket = loadBasket(folderName); + BasketListViewItem *basketItem = appendBasket(basket, item); + basketItem->setOpen(!XMLWork::trueOrFalse(element.attribute("folded", "false"), false)); + basket->loadProperties(XMLWork::getElement(element, "properties")); + if (XMLWork::trueOrFalse(element.attribute("lastOpened", element.attribute("lastOpenned", "false")), false)) // Compat with 0.6.0-Alphas + setCurrentBasket(basket); + // Load Sub-baskets: + load(/*(QListView*)*/0L, basketItem, element); + } + } + n = n.nextSibling(); + } +} + +Basket* BNPView::loadBasket(const QString &folderName) +{ + if (folderName.isEmpty()) + return 0; + + DecoratedBasket *decoBasket = new DecoratedBasket(m_stack, folderName); + Basket *basket = decoBasket->basket(); + m_stack->addWidget(decoBasket); + connect( basket, SIGNAL(countsChanged(Basket*)), this, SLOT(countsChanged(Basket*)) ); + // Important: Create listViewItem and connect signal BEFORE loadProperties(), so we get the listViewItem updated without extra work: + connect( basket, SIGNAL(propertiesChanged(Basket*)), this, SLOT(updateBasketListViewItem(Basket*)) ); + + connect( basket->decoration()->filterBar(), SIGNAL(newFilter(const FilterData&)), this, SLOT(newFilterFromFilterBar()) ); + + return basket; +} + +int BNPView::basketCount(QListViewItem *parent) +{ + int count = 0; + + QListViewItem *item = (parent ? parent->firstChild() : m_tree->firstChild()); + while (item) { + count += 1 + basketCount(item); + item = item->nextSibling(); + } + + return count; +} + +bool BNPView::canFold() +{ + BasketListViewItem *item = listViewItemForBasket(currentBasket()); + if (!item) + return false; + return item->parent() || (item->firstChild() && item->isOpen()); +} + +bool BNPView::canExpand() +{ + BasketListViewItem *item = listViewItemForBasket(currentBasket()); + if (!item) + return false; + return item->firstChild(); +} + +BasketListViewItem* BNPView::appendBasket(Basket *basket, QListViewItem *parentItem) +{ + BasketListViewItem *newBasketItem; + if (parentItem) + newBasketItem = new BasketListViewItem(parentItem, ((BasketListViewItem*)parentItem)->lastChild(), basket); + else { + QListViewItem *child = m_tree->firstChild(); + QListViewItem *lastChild = 0; + while (child) { + lastChild = child; + child = child->nextSibling(); + } + newBasketItem = new BasketListViewItem(m_tree, lastChild, basket); + } + + emit basketNumberChanged(basketCount()); + + return newBasketItem; +} + +void BNPView::loadNewBasket(const QString &folderName, const QDomElement &properties, Basket *parent) +{ + Basket *basket = loadBasket(folderName); + appendBasket(basket, (basket ? listViewItemForBasket(parent) : 0)); + basket->loadProperties(properties); + setCurrentBasket(basket); +// save(); +} + +BasketListViewItem* BNPView::lastListViewItem() +{ + QListViewItem *child = m_tree->firstChild(); + QListViewItem *lastChild = 0; + // Set lastChild to the last primary child of the list view: + while (child) { + lastChild = child; + child = child->nextSibling(); + } + // If this child have child(s), recursivly browse through them to find the real last one: + while (lastChild && lastChild->firstChild()) { + child = lastChild->firstChild(); + while (child) { + lastChild = child; + child = child->nextSibling(); + } + } + return (BasketListViewItem*)lastChild; +} + +void BNPView::goToPreviousBasket() +{ + if (!m_tree->firstChild()) + return; + + BasketListViewItem *item = listViewItemForBasket(currentBasket()); + BasketListViewItem *toSwitch = item->shownItemAbove(); + if (!toSwitch) { + toSwitch = lastListViewItem(); + if (toSwitch && !toSwitch->isShown()) + toSwitch = toSwitch->shownItemAbove(); + } + + if (toSwitch) + setCurrentBasket(toSwitch->basket()); + + if (Settings::usePassivePopup()) + showPassiveContent(); +} + +void BNPView::goToNextBasket() +{ + if (!m_tree->firstChild()) + return; + + BasketListViewItem *item = listViewItemForBasket(currentBasket()); + BasketListViewItem *toSwitch = item->shownItemBelow(); + if (!toSwitch) + toSwitch = ((BasketListViewItem*)m_tree->firstChild()); + + if (toSwitch) + setCurrentBasket(toSwitch->basket()); + + if (Settings::usePassivePopup()) + showPassiveContent(); +} + +void BNPView::foldBasket() +{ + BasketListViewItem *item = listViewItemForBasket(currentBasket()); + if (item && !item->firstChild()) + item->setOpen(false); // If Alt+Left is hitted and there is nothing to close, make sure the focus will go to the parent basket + + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, 0); + QApplication::postEvent(m_tree, keyEvent); +} + +void BNPView::expandBasket() +{ + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, 0); + QApplication::postEvent(m_tree, keyEvent); +} + +void BNPView::closeAllEditors() +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = (BasketListViewItem*)(it.current()); + item->basket()->closeEditor(); + ++it; + } +} + +bool BNPView::convertTexts() +{ + bool convertedNotes = false; + KProgressDialog dialog( + /*parent=*/0, + /*name=*/"", + /*caption=*/i18n("Plain Text Notes Conversion"), + /*text=*/i18n("Converting plain text notes to rich text ones..."), + /*modal=*/true); + dialog.progressBar()->setTotalSteps(basketCount()); + dialog.show(); //setMinimumDuration(50/*ms*/); + + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = (BasketListViewItem*)(it.current()); + if (item->basket()->convertTexts()) + convertedNotes = true; + dialog.progressBar()->advance(1); + if (dialog.wasCancelled()) + break; + ++it; + } + + return convertedNotes; +} + +/** isRunning is to avoid recursive calls because this method can be called + * when clicking the menu action or when using the filter-bar icon... either of those calls + * call the other to be checked... and it can cause recursive calls. + * PS: Uggly hack? Yes, I think so :-) + */ +void BNPView::toggleFilterAllBaskets(bool doFilter) +{ + static bool isRunning = false; + if (isRunning) + return; + isRunning = true; + + // Set the state: + m_actFilterAllBaskets->setChecked(doFilter); + //currentBasket()->decoration()->filterBar()->setFilterAll(doFilter); + +// Basket *current = currentBasket(); + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + item->basket()->decoration()->filterBar()->setFilterAll(doFilter); + ++it; + } + + // Protection is not necessary anymore: + isRunning = false; + + if (doFilter) + currentBasket()->decoration()->filterBar()->setEditFocus(); + + // Filter every baskets: + newFilter(); +} + +/** This function can be called recursively because we call kapp->processEvents(). + * If this function is called whereas another "instance" is running, + * this new "instance" leave and set up a flag that is read by the first "instance" + * to know it should re-begin the work. + * PS: Yes, that's a very lame pseudo-threading but that works, and it's programmer-efforts cheap :-) + */ +void BNPView::newFilter() +{ + static bool alreadyEntered = false; + static bool shouldRestart = false; + + if (alreadyEntered) { + shouldRestart = true; + return; + } + alreadyEntered = true; + shouldRestart = false; + + Basket *current = currentBasket(); + const FilterData &filterData = current->decoration()->filterBar()->filterData(); + + // Set the filter data for every other baskets, or reset the filter for every other baskets if we just disabled the filterInAllBaskets: + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + if (item->basket() != current) + if (isFilteringAllBaskets()) + item->basket()->decoration()->filterBar()->setFilterData(filterData); // Set the new FilterData for every other baskets + else + item->basket()->decoration()->filterBar()->setFilterData(FilterData()); // We just disabled the global filtering: remove the FilterData + ++it; + } + + // Show/hide the "little filter icons" (during basket load) + // or the "little numbers" (to show number of found notes in the baskets) is the tree: + m_tree->triggerUpdate(); + kapp->processEvents(); + + // Load every baskets for filtering, if they are not already loaded, and if necessary: + if (filterData.isFiltering) { + Basket *current = currentBasket(); + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + if (item->basket() != current) { + Basket *basket = item->basket(); + if (!basket->loadingLaunched() && !basket->isLocked()) + basket->load(); + basket->filterAgain(); + m_tree->triggerUpdate(); + kapp->processEvents(); + if (shouldRestart) { + alreadyEntered = false; + shouldRestart = false; + newFilter(); + return; + } + } + ++it; + } + } + + m_tree->triggerUpdate(); +// kapp->processEvents(); + + alreadyEntered = false; + shouldRestart = false; +} + +void BNPView::newFilterFromFilterBar() +{ + if (isFilteringAllBaskets()) + QTimer::singleShot(0, this, SLOT(newFilter())); // Keep time for the QLineEdit to display the filtered character and refresh correctly! +} + +bool BNPView::isFilteringAllBaskets() +{ + return m_actFilterAllBaskets->isChecked(); +} + + +BasketListViewItem* BNPView::listViewItemForBasket(Basket *basket) +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + if (item->basket() == basket) + return item; + ++it; + } + return 0L; +} + +Basket* BNPView::currentBasket() +{ + DecoratedBasket *decoBasket = (DecoratedBasket*)m_stack->visibleWidget(); + if (decoBasket) + return decoBasket->basket(); + else + return 0; +} + +Basket* BNPView::parentBasketOf(Basket *basket) +{ + BasketListViewItem *item = (BasketListViewItem*)(listViewItemForBasket(basket)->parent()); + if (item) + return item->basket(); + else + return 0; +} + +void BNPView::setCurrentBasket(Basket *basket) +{ + if (currentBasket() == basket) + return; + + if (currentBasket()) + currentBasket()->closeBasket(); + + if (basket) + basket->aboutToBeActivated(); + + BasketListViewItem *item = listViewItemForBasket(basket); + if (item) { + m_tree->setSelected(item, true); + item->ensureVisible(); + m_stack->raiseWidget(basket->decoration()); + // If the window has changed size, only the current basket receive the event, + // the others will receive ony one just before they are shown. + // But this triggers unwanted animations, so we eliminate it: + basket->relayoutNotes(/*animate=*/false); + basket->openBasket(); + setCaption(item->basket()->basketName()); + countsChanged(basket); + updateStatusBarHint(); + if (Global::systemTray) + Global::systemTray->updateToolTip(); + m_tree->ensureItemVisible(m_tree->currentItem()); + item->basket()->setFocus(); + } + m_tree->viewport()->update(); + emit basketChanged(); +} + +void BNPView::removeBasket(Basket *basket) +{ + if (basket->isDuringEdit()) + basket->closeEditor(); + + // Find a new basket to switch to and select it. + // Strategy: get the next sibling, or the previous one if not found. + // If there is no such one, get the parent basket: + BasketListViewItem *basketItem = listViewItemForBasket(basket); + BasketListViewItem *nextBasketItem = (BasketListViewItem*)(basketItem->nextSibling()); + if (!nextBasketItem) + nextBasketItem = basketItem->prevSibling(); + if (!nextBasketItem) + nextBasketItem = (BasketListViewItem*)(basketItem->parent()); + + if (nextBasketItem) + setCurrentBasket(nextBasketItem->basket()); + + // Remove from the view: + basket->unsubscribeBackgroundImages(); + m_stack->removeWidget(basket->decoration()); +// delete basket->decoration(); + delete basketItem; +// delete basket; + + // If there is no basket anymore, add a new one: + if (!nextBasketItem) + BasketFactory::newBasket(/*icon=*/"", /*name=*/i18n("General"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + else // No need to save two times if we add a basket + save(); + + emit basketNumberChanged(basketCount()); +} + +void BNPView::setTreePlacement(bool onLeft) +{ + if (onLeft) + moveToFirst(m_tree); + else + moveToLast(m_tree); + //updateGeometry(); + kapp->postEvent( this, new QResizeEvent(size(), size()) ); +} + +void BNPView::relayoutAllBaskets() +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + //item->basket()->unbufferizeAll(); + item->basket()->unsetNotesWidth(); + item->basket()->relayoutNotes(true); + ++it; + } +} + +void BNPView::recomputeAllStyles() +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + item->basket()->recomputeAllStyles(); + item->basket()->unsetNotesWidth(); + item->basket()->relayoutNotes(true); + ++it; + } +} + +void BNPView::removedStates(const QValueList &deletedStates) +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + item->basket()->removedStates(deletedStates); + ++it; + } +} + +void BNPView::linkLookChanged() +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = ((BasketListViewItem*)it.current()); + item->basket()->linkLookChanged(); + ++it; + } +} + +void BNPView::filterPlacementChanged(bool onTop) +{ + QListViewItemIterator it(m_tree); + while (it.current()) { + BasketListViewItem *item = static_cast(it.current()); + DecoratedBasket *decoration = static_cast(item->basket()->parent()); + decoration->setFilterBarPosition(onTop); + ++it; + } +} + +void BNPView::updateBasketListViewItem(Basket *basket) +{ + BasketListViewItem *item = listViewItemForBasket(basket); + if (item) + item->setup(); + + if (basket == currentBasket()) { + setCaption(basket->basketName()); + if (Global::systemTray) + Global::systemTray->updateToolTip(); + } + + // Don't save if we are loading! + if (!m_loading) + save(); +} + +void BNPView::needSave(QListViewItem*) +{ + if (!m_loading) + // A basket has been collapsed/expanded or a new one is select: this is not urgent: + QTimer::singleShot(500/*ms*/, this, SLOT(save())); +} + +void BNPView::slotPressed(QListViewItem *item, const QPoint &/*pos*/, int /*column*/) +{ + Basket *basket = currentBasket(); + if (basket == 0) + return; + + // Impossible to Select no Basket: + if (!item) + m_tree->setSelected(listViewItemForBasket(basket), true); + else if (dynamic_cast(item) != 0 && currentBasket() != ((BasketListViewItem*)item)->basket()) { + setCurrentBasket( ((BasketListViewItem*)item)->basket() ); + needSave(0); + } + basket->setFocus(); +} + +DecoratedBasket* BNPView::currentDecoratedBasket() +{ + if (currentBasket()) + return currentBasket()->decoration(); + else + return 0; +} + +// Redirected actions : + +void BNPView::exportToHTML() { HTMLExporter exporter(currentBasket()); } +void BNPView::editNote() { currentBasket()->noteEdit(); } +void BNPView::cutNote() { currentBasket()->noteCut(); } +void BNPView::copyNote() { currentBasket()->noteCopy(); } +void BNPView::delNote() { currentBasket()->noteDelete(); } +void BNPView::openNote() { currentBasket()->noteOpen(); } +void BNPView::openNoteWith() { currentBasket()->noteOpenWith(); } +void BNPView::saveNoteAs() { currentBasket()->noteSaveAs(); } +void BNPView::noteGroup() { currentBasket()->noteGroup(); } +void BNPView::noteUngroup() { currentBasket()->noteUngroup(); } +void BNPView::moveOnTop() { currentBasket()->noteMoveOnTop(); } +void BNPView::moveOnBottom() { currentBasket()->noteMoveOnBottom(); } +void BNPView::moveNoteUp() { currentBasket()->noteMoveNoteUp(); } +void BNPView::moveNoteDown() { currentBasket()->noteMoveNoteDown(); } +void BNPView::slotSelectAll() { currentBasket()->selectAll(); } +void BNPView::slotUnselectAll() { currentBasket()->unselectAll(); } +void BNPView::slotInvertSelection() { currentBasket()->invertSelection(); } +void BNPView::slotResetFilter() { currentDecoratedBasket()->resetFilter(); } + +void BNPView::importKJots() { SoftwareImporters::importKJots(); } +void BNPView::importKNotes() { SoftwareImporters::importKNotes(); } +void BNPView::importKnowIt() { SoftwareImporters::importKnowIt(); } +void BNPView::importTuxCards() { SoftwareImporters::importTuxCards(); } +void BNPView::importStickyNotes() { SoftwareImporters::importStickyNotes(); } +void BNPView::importTomboy() { SoftwareImporters::importTomboy(); } +void BNPView::importTextFile() { SoftwareImporters::importTextFile(); } + +void BNPView::backupRestore() +{ + BackupDialog dialog; + dialog.exec(); +} + +void BNPView::countsChanged(Basket *basket) +{ + if (basket == currentBasket()) + notesStateChanged(); +} + +void BNPView::notesStateChanged() +{ + Basket *basket = currentBasket(); + + // Update statusbar message : + if (currentBasket()->isLocked()) + setSelectionStatus(i18n("Locked")); + else if (!basket->isLoaded()) + setSelectionStatus(i18n("Loading...")); + else if (basket->count() == 0) + setSelectionStatus(i18n("No notes")); + else { + QString count = i18n("%n note", "%n notes", basket->count() ); + QString selecteds = i18n("%n selected", "%n selected", basket->countSelecteds()); + QString showns = (currentDecoratedBasket()->filterData().isFiltering ? i18n("all matches") : i18n("no filter")); + if (basket->countFounds() != basket->count()) + showns = i18n("%n match", "%n matches", basket->countFounds()); + setSelectionStatus( + i18n("e.g. '18 notes, 10 matches, 5 selected'", "%1, %2, %3").arg(count, showns, selecteds) ); + } + + // If we added a note that match the global filter, update the count number in the tree: + if (isFilteringAllBaskets()) + listViewItemForBasket(basket)->listView()->triggerUpdate(); + + if (currentBasket()->redirectEditActions()) { + m_actSelectAll ->setEnabled( !currentBasket()->selectedAllTextInEditor() ); + m_actUnselectAll ->setEnabled( currentBasket()->hasSelectedTextInEditor() ); + } else { + m_actSelectAll ->setEnabled( basket->countSelecteds() < basket->countFounds() ); + m_actUnselectAll ->setEnabled( basket->countSelecteds() > 0 ); + } + m_actInvertSelection ->setEnabled( basket->countFounds() > 0 ); + + updateNotesActions(); +} + +void BNPView::updateNotesActions() +{ + bool isLocked = currentBasket()->isLocked(); + bool oneSelected = currentBasket()->countSelecteds() == 1; + bool oneOrSeveralSelected = currentBasket()->countSelecteds() >= 1; + bool severalSelected = currentBasket()->countSelecteds() >= 2; + + // FIXME: m_actCheckNotes is also modified in void BNPView::areSelectedNotesCheckedChanged(bool checked) + // bool Basket::areSelectedNotesChecked() should return false if bool Basket::showCheckBoxes() is false +// m_actCheckNotes->setChecked( oneOrSeveralSelected && +// currentBasket()->areSelectedNotesChecked() && +// currentBasket()->showCheckBoxes() ); + + Note *selectedGroup = (severalSelected ? currentBasket()->selectedGroup() : 0); + + m_actEditNote ->setEnabled( !isLocked && oneSelected && !currentBasket()->isDuringEdit() ); + if (currentBasket()->redirectEditActions()) { + m_actCutNote ->setEnabled( currentBasket()->hasSelectedTextInEditor() ); + m_actCopyNote ->setEnabled( currentBasket()->hasSelectedTextInEditor() ); + m_actPaste ->setEnabled( true ); + m_actDelNote ->setEnabled( currentBasket()->hasSelectedTextInEditor() ); + } else { + m_actCutNote ->setEnabled( !isLocked && oneOrSeveralSelected ); + m_actCopyNote ->setEnabled( oneOrSeveralSelected ); + m_actPaste ->setEnabled( !isLocked ); + m_actDelNote ->setEnabled( !isLocked && oneOrSeveralSelected ); + } + m_actOpenNote ->setEnabled( oneOrSeveralSelected ); + m_actOpenNoteWith ->setEnabled( oneSelected ); // TODO: oneOrSeveralSelected IF SAME TYPE + m_actSaveNoteAs ->setEnabled( oneSelected ); // IDEM? + m_actGroup ->setEnabled( !isLocked && severalSelected && (!selectedGroup || selectedGroup->isColumn()) ); + m_actUngroup ->setEnabled( !isLocked && selectedGroup && !selectedGroup->isColumn() ); + m_actMoveOnTop ->setEnabled( !isLocked && oneOrSeveralSelected && !currentBasket()->isFreeLayout() ); + m_actMoveNoteUp ->setEnabled( !isLocked && oneOrSeveralSelected ); // TODO: Disable when unavailable! + m_actMoveNoteDown ->setEnabled( !isLocked && oneOrSeveralSelected ); + m_actMoveOnBottom ->setEnabled( !isLocked && oneOrSeveralSelected && !currentBasket()->isFreeLayout() ); + + for (KAction *action = m_insertActions.first(); action; action = m_insertActions.next()) + action->setEnabled( !isLocked ); + + // From the old Note::contextMenuEvent(...) : +/* if (useFile() || m_type == Link) { + m_type == Link ? i18n("&Open target") : i18n("&Open") + m_type == Link ? i18n("Open target &with...") : i18n("Open &with...") + m_type == Link ? i18n("&Save target as...") : i18n("&Save a copy as...") + // If useFile() theire is always a file to open / open with / save, but : + if (m_type == Link) { + if (url().prettyURL().isEmpty() && runCommand().isEmpty()) // no URL nor runCommand : + popupMenu->setItemEnabled(7, false); // no possible Open ! + if (url().prettyURL().isEmpty()) // no URL : + popupMenu->setItemEnabled(8, false); // no possible Open with ! + if (url().prettyURL().isEmpty() || url().path().endsWith("/")) // no URL or target a folder : + popupMenu->setItemEnabled(9, false); // not possible to save target file +} +} else if (m_type != Color) { + popupMenu->insertSeparator(); + popupMenu->insertItem( SmallIconSet("filesaveas"), i18n("&Save a copy as..."), this, SLOT(slotSaveAs()), 0, 10 ); +}*/ +} + +// BEGIN Color picker (code from KColorEdit): + +/* Activate the mode + */ +void BNPView::slotColorFromScreen(bool global) +{ + m_colorPickWasGlobal = global; + if (isMainWindowActive()) { + if(Global::mainWindow()) Global::mainWindow()->hide(); + m_colorPickWasShown = true; + } else + m_colorPickWasShown = false; + + currentBasket()->saveInsertionData(); + m_colorPicker->pickColor(); + +/* m_gettingColorFromScreen = true; + kapp->processEvents(); + QTimer::singleShot( 100, this, SLOT(grabColorFromScreen()) );*/ +} + +void BNPView::slotColorFromScreenGlobal() +{ + slotColorFromScreen(true); +} + +void BNPView::colorPicked(const QColor &color) +{ + if (!currentBasket()->isLoaded()) { + showPassiveLoading(currentBasket()); + currentBasket()->load(); + } + currentBasket()->insertColor(color); + + if (m_colorPickWasShown) + showMainWindow(); + + if (Settings::usePassivePopup()) + showPassiveDropped(i18n("Picked color to basket %1")); +} + +void BNPView::colorPickingCanceled() +{ + if (m_colorPickWasShown) + showMainWindow(); +} + +void BNPView::slotConvertTexts() +{ +/* + int result = KMessageBox::questionYesNoCancel( + this, + i18n( + "

      This will convert every text notes into rich text notes.
      " + "The content of the notes will not change and you will be able to apply formating to those notes.

      " + "

      This process cannot be reverted back: you will not be able to convert the rich text notes to plain text ones later.

      " + "

      As a beta-tester, you are strongly encouraged to do the convert process because it is to test if plain text notes are still needed.
      " + "If nobody complain about not having plain text notes anymore, then the final version is likely to not support plain text notes anymore.

      " + "

      Which basket notes do you want to convert?

      " + ), + i18n("Convert Text Notes"), + KGuiItem(i18n("Only in the Current Basket")), + KGuiItem(i18n("In Every Baskets")) + ); + if (result == KMessageBox::Cancel) + return; +*/ + + bool conversionsDone; +// if (result == KMessageBox::Yes) +// conversionsDone = currentBasket()->convertTexts(); +// else + conversionsDone = convertTexts(); + + if (conversionsDone) + KMessageBox::information(this, i18n("The plain text notes have been converted to rich text."), i18n("Conversion Finished")); + else + KMessageBox::information(this, i18n("There are no plain text notes to convert."), i18n("Conversion Finished")); +} + +QPopupMenu* BNPView::popupMenu(const QString &menuName) +{ + QPopupMenu *menu = 0; + bool hack = false; // TODO fix this + // When running in kontact and likeback Information message is shown + // factory is 0. Don't show error then and don't crash either :-) + + if(m_guiClient) + { + KXMLGUIFactory* factory = m_guiClient->factory(); + if(factory) + { + menu = (QPopupMenu *)factory->container(menuName, m_guiClient); + } + else + hack = isPart(); + } + if (menu == 0) { + if(!hack) + { + KStandardDirs stdDirs; + KMessageBox::error( this, i18n( + "

      The file basketui.rc seems to not exist or is too old.
      " + "%1 cannot run without it and will stop.

      " + "

      Please check your installation of %2.

      " + "

      If you do not have administrator access to install the application " + "system wide, you can copy the file basketui.rc from the installation " + "archive to the folder %4.

      " + "

      As last ressort, if you are sure the application is correctly installed " + "but you had a preview version of it, try to remove the " + "file %5basketui.rc

      ") + .arg(kapp->aboutData()->programName(), kapp->aboutData()->programName(), + stdDirs.saveLocation("data", "basket/")).arg(stdDirs.saveLocation("data", "basket/"), stdDirs.saveLocation("data", "basket/")), + i18n("Ressource not Found"), KMessageBox::AllowLink ); + } + if(!isPart()) + exit(1); // We SHOULD exit right now and abord everything because the caller except menu != 0 to not crash. + else + menu = new KPopupMenu; // When running in kpart we cannot exit + } + return menu; +} + +void BNPView::showHideFilterBar(bool show, bool switchFocus) +{ +// if (show != m_actShowFilter->isChecked()) +// m_actShowFilter->setChecked(show); + m_actShowFilter->setChecked(currentDecoratedBasket()->filterData().isFiltering); + + currentDecoratedBasket()->setFilterBarShown(show, switchFocus); + currentDecoratedBasket()->resetFilter(); +} + +void BNPView::insertEmpty(int type) +{ + if (currentBasket()->isLocked()) { + showPassiveImpossible(i18n("Cannot add note.")); + return; + } + currentBasket()->insertEmptyNote(type); +} + +void BNPView::insertWizard(int type) +{ + if (currentBasket()->isLocked()) { + showPassiveImpossible(i18n("Cannot add note.")); + return; + } + currentBasket()->insertWizard(type); +} + +// BEGIN Screen Grabbing: // FIXME + +void BNPView::grabScreenshot(bool global) +{ + if (m_regionGrabber) { + KWin::activateWindow(m_regionGrabber->winId()); + return; + } + + // Delay before to take a screenshot because if we hide the main window OR the systray popup menu, + // we should wait the windows below to be repainted!!! + // A special case is where the action is triggered with the global keyboard shortcut. + // In this case, global is true, and we don't wait. + // In the future, if global is also defined for other cases, check for + // enum KAction::ActivationReason { UnknownActivation, EmulatedActivation, AccelActivation, PopupMenuActivation, ToolBarActivation }; + int delay = (isMainWindowActive() ? 500 : (global/*kapp->activePopupWidget()*/ ? 0 : 200)); + + m_colorPickWasGlobal = global; + if (isMainWindowActive()) { + if(Global::mainWindow()) Global::mainWindow()->hide(); + m_colorPickWasShown = true; + } else + m_colorPickWasShown = false; + + currentBasket()->saveInsertionData(); + m_regionGrabber = new RegionGrabber(delay); + connect( m_regionGrabber, SIGNAL(regionGrabbed(const QPixmap&)), this, SLOT(screenshotGrabbed(const QPixmap&)) ); +} + +void BNPView::grabScreenshotGlobal() +{ + grabScreenshot(true); +} + +void BNPView::screenshotGrabbed(const QPixmap &pixmap) +{ + delete m_regionGrabber; + m_regionGrabber = 0; + + // Cancelled (pressed Escape): + if (pixmap.isNull()) { + if (m_colorPickWasShown) + showMainWindow(); + return; + } + + if (!currentBasket()->isLoaded()) { + showPassiveLoading(currentBasket()); + currentBasket()->load(); + } + currentBasket()->insertImage(pixmap); + + if (m_colorPickWasShown) + showMainWindow(); + + if (Settings::usePassivePopup()) + showPassiveDropped(i18n("Grabbed screen zone to basket %1")); +} + +Basket* BNPView::basketForFolderName(const QString &/*folderName*/) +{ +/* QPtrList basketsList = listBaskets(); + Basket *basket; + for (basket = basketsList.first(); basket; basket = basketsList.next()) + if (basket->folderName() == folderName) + return basket; +*/ + return 0; +} + +void BNPView::setFiltering(bool filtering) +{ + m_actShowFilter->setChecked(filtering); + m_actResetFilter->setEnabled(filtering); +} + +void BNPView::undo() +{ + // TODO +} + +void BNPView::redo() +{ + // TODO +} + +void BNPView::pasteToBasket(int /*index*/, QClipboard::Mode /*mode*/) +{ + //TODO: REMOVE! + //basketAt(index)->pasteNote(mode); +} + +void BNPView::propBasket() +{ + BasketPropertiesDialog dialog(currentBasket(), this); + dialog.exec(); +} + +void BNPView::delBasket() +{ +// DecoratedBasket *decoBasket = currentDecoratedBasket(); + Basket *basket = currentBasket(); + +#if 0 + KDialogBase *dialog = new KDialogBase(this, /*name=*/0, /*modal=*/true, /*caption=*/i18n("Delete Basket"), + KDialogBase::User1 | KDialogBase::User2 | KDialogBase::No, KDialogBase::User1, + /*separator=*/false, + /*user1=*/KGuiItem(i18n("Delete Only that Basket")/*, icon=""*/), + /*user2=*/KGuiItem(i18n("Delete Note & Children")/*, icon=""*/) ); + QStringList basketsList; + basketsList.append("Basket 1"); + basketsList.append(" Basket 2"); + basketsList.append(" Basket 3"); + basketsList.append(" Basket 4"); + KMessageBox::createKMessageBox( + dialog, QMessageBox::Information, + i18n("Do you really want to remove the basket %1 and its contents?") + .arg(Tools::textToHTMLWithoutP(basket->basketName())), + basketsList, /*ask=*/"", /*checkboxReturn=*/0, /*options=*/KMessageBox::Notify/*, const QString &details=QString::null*/); +#endif + + int really = KMessageBox::questionYesNo( this, + i18n("Do you really want to remove the basket %1 and its contents?") + .arg(Tools::textToHTMLWithoutP(basket->basketName())), + i18n("Remove Basket") +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + , KGuiItem(i18n("&Remove Basket"), "editdelete"), KStdGuiItem::cancel()); +#else + ); +#endif + + if (really == KMessageBox::No) + return; + + QStringList basketsList = listViewItemForBasket(basket)->childNamesTree(); + if (basketsList.count() > 0) { + int deleteChilds = KMessageBox::questionYesNoList( this, + i18n("%1 have the following children baskets.
      Do you want to remove them too?
      ") + .arg(Tools::textToHTMLWithoutP(basket->basketName())), + basketsList, + i18n("Remove Children Baskets") +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + , KGuiItem(i18n("&Remove Children Baskets"), "editdelete")); +#else + ); +#endif + + if (deleteChilds == KMessageBox::No) + listViewItemForBasket(basket)->moveChildsBaskets(); + } + + doBasketDeletion(basket); + +// basketNumberChanged(); +// rebuildBasketsMenu(); +} + +void BNPView::doBasketDeletion(Basket *basket) +{ + basket->closeEditor(); + + QListViewItem *basketItem = listViewItemForBasket(basket); + QListViewItem *nextOne; + for (QListViewItem *child = basketItem->firstChild(); child; child = nextOne) { + nextOne = child->nextSibling(); + // First delete the child baskets: + doBasketDeletion(((BasketListViewItem*)child)->basket()); + } + // Then, basket have no child anymore, delete it: + DecoratedBasket *decoBasket = basket->decoration(); + basket->deleteFiles(); + removeBasket(basket); + // Remove the action to avoir keyboard-shortcut clashes: + delete basket->m_action; // FIXME: It's quick&dirty. In the future, the Basket should be deleted, and then the KAction deleted in the Basket destructor. + delete decoBasket; +// delete basket; +} + +void BNPView::password() +{ +#ifdef HAVE_LIBGPGME + PasswordDlg dlg(kapp->activeWindow(), "Password"); + Basket *cur = currentBasket(); + + dlg.setType(cur->encryptionType()); + dlg.setKey(cur->encryptionKey()); + if(dlg.exec()) { + cur->setProtection(dlg.type(), dlg.key()); + if (cur->encryptionType() != Basket::NoEncryption) + cur->lock(); + } +#endif +} + +void BNPView::lockBasket() +{ +#ifdef HAVE_LIBGPGME + Basket *cur = currentBasket(); + + cur->lock(); +#endif +} + +void BNPView::saveAsArchive() +{ + Basket *basket = currentBasket(); + + QDir dir; + + KConfig *config = KGlobal::config(); + config->setGroup("Basket Archive"); + QString folder = config->readEntry("lastFolder", QDir::homeDirPath()) + "/"; + QString url = folder + QString(basket->basketName()).replace("/", "_") + ".baskets"; + + QString filter = "*.baskets|" + i18n("Basket Archives") + "\n*|" + i18n("All Files"); + QString destination = url; + for (bool askAgain = true; askAgain; ) { + destination = KFileDialog::getSaveFileName(destination, filter, this, i18n("Save as Basket Archive")); + if (destination.isEmpty()) // User canceled + return; + if (dir.exists(destination)) { + int result = KMessageBox::questionYesNoCancel( + this, + "" + i18n("The file %1 already exists. Do you really want to override it?") + .arg(KURL(destination).fileName()), + i18n("Override File?"), + KGuiItem(i18n("&Override"), "filesave") + ); + if (result == KMessageBox::Cancel) + return; + else if (result == KMessageBox::Yes) + askAgain = false; + } else + askAgain = false; + } + bool withSubBaskets = true;//KMessageBox::questionYesNo(this, i18n("Do you want to export sub-baskets too?"), i18n("Save as Basket Archive")) == KMessageBox::Yes; + + config->writeEntry("lastFolder", KURL(destination).directory()); + config->sync(); + + Archive::save(basket, withSubBaskets, destination); +} + +QString BNPView::s_fileToOpen = ""; + +void BNPView::delayedOpenArchive() +{ + Archive::open(s_fileToOpen); +} + +void BNPView::openArchive() +{ + QString filter = "*.baskets|" + i18n("Basket Archives") + "\n*|" + i18n("All Files"); + QString path = KFileDialog::getOpenFileName(QString::null, filter, this, i18n("Open Basket Archive")); + if (!path.isEmpty()) // User has not canceled + Archive::open(path); +} + + +void BNPView::activatedTagShortcut() +{ + Tag *tag = Tag::tagForKAction((KAction*)sender()); + currentBasket()->activatedTagShortcut(tag); +} + +void BNPView::slotBasketNumberChanged(int number) +{ + m_actPreviousBasket->setEnabled(number > 1); + m_actNextBasket ->setEnabled(number > 1); +} + +void BNPView::slotBasketChanged() +{ + m_actFoldBasket->setEnabled(canFold()); + m_actExpandBasket->setEnabled(canExpand()); + setFiltering(currentBasket() && currentBasket()->decoration()->filterData().isFiltering); +} + +void BNPView::currentBasketChanged() +{ +} + +void BNPView::isLockedChanged() +{ + bool isLocked = currentBasket()->isLocked(); + + setLockStatus(isLocked); + +// m_actLockBasket->setChecked(isLocked); + m_actPropBasket->setEnabled(!isLocked); + m_actDelBasket ->setEnabled(!isLocked); + updateNotesActions(); +} + +void BNPView::askNewBasket() +{ + askNewBasket(0, 0); +} + +void BNPView::askNewBasket(Basket *parent, Basket *pickProperties) +{ + NewBasketDefaultProperties properties; + if (pickProperties) { + properties.icon = pickProperties->icon(); + properties.backgroundImage = pickProperties->backgroundImageName(); + properties.backgroundColor = pickProperties->backgroundColorSetting(); + properties.textColor = pickProperties->textColorSetting(); + properties.freeLayout = pickProperties->isFreeLayout(); + properties.columnCount = pickProperties->columnsCount(); + } + + NewBasketDialog(parent, properties, this).exec(); +} + +void BNPView::askNewSubBasket() +{ + askNewBasket( /*parent=*/currentBasket(), /*pickPropertiesOf=*/currentBasket() ); +} + +void BNPView::askNewSiblingBasket() +{ + askNewBasket( /*parent=*/parentBasketOf(currentBasket()), /*pickPropertiesOf=*/currentBasket() ); +} + +void BNPView::globalPasteInCurrentBasket() +{ + currentBasket()->setInsertPopupMenu(); + pasteInCurrentBasket(); + currentBasket()->cancelInsertPopupMenu(); +} + +void BNPView::pasteInCurrentBasket() +{ + currentBasket()->pasteNote(); + + if (Settings::usePassivePopup()) + showPassiveDropped(i18n("Clipboard content pasted to basket %1")); +} + +void BNPView::pasteSelInCurrentBasket() +{ + currentBasket()->pasteNote(QClipboard::Selection); + + if (Settings::usePassivePopup()) + showPassiveDropped(i18n("Selection pasted to basket %1")); +} + +void BNPView::showPassiveDropped(const QString &title) +{ + if ( ! currentBasket()->isLocked() ) { + // TODO: Keep basket, so that we show the message only if something was added to a NOT visible basket + m_passiveDroppedTitle = title; + m_passiveDroppedSelection = currentBasket()->selectedNotes(); + QTimer::singleShot( c_delayTooltipTime, this, SLOT(showPassiveDroppedDelayed()) ); + // DELAY IT BELOW: + } else + showPassiveImpossible(i18n("No note was added.")); +} + +void BNPView::showPassiveDroppedDelayed() +{ + if (isMainWindowActive() || m_passiveDroppedSelection == 0) + return; + + QString title = m_passiveDroppedTitle; + + delete m_passivePopup; // Delete previous one (if exists): it will then hide it (only one at a time) + m_passivePopup = new KPassivePopup(Settings::useSystray() ? (QWidget*)Global::systemTray : this); + QPixmap contentsPixmap = NoteDrag::feedbackPixmap(m_passiveDroppedSelection); + QMimeSourceFactory::defaultFactory()->setPixmap("_passivepopup_image_", contentsPixmap); + m_passivePopup->setView( + title.arg(Tools::textToHTMLWithoutP(currentBasket()->basketName())), + (contentsPixmap.isNull() ? "" : ""), + kapp->iconLoader()->loadIcon(currentBasket()->icon(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true)); + m_passivePopup->show(); +} + +void BNPView::showPassiveImpossible(const QString &message) +{ + delete m_passivePopup; // Delete previous one (if exists): it will then hide it (only one at a time) + m_passivePopup = new KPassivePopup(Settings::useSystray() ? (QWidget*)Global::systemTray : (QWidget*)this); + m_passivePopup->setView( + QString("%1") + .arg(i18n("Basket %1 is locked")) + .arg(Tools::textToHTMLWithoutP(currentBasket()->basketName())), + message, + kapp->iconLoader()->loadIcon(currentBasket()->icon(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true)); + m_passivePopup->show(); +} + +void BNPView::showPassiveContentForced() +{ + showPassiveContent(/*forceShow=*/true); +} + +void BNPView::showPassiveContent(bool forceShow/* = false*/) +{ + if (!forceShow && isMainWindowActive()) + return; + + // FIXME: Duplicate code (2 times) + QString message; + + delete m_passivePopup; // Delete previous one (if exists): it will then hide it (only one at a time) + m_passivePopup = new KPassivePopup(Settings::useSystray() ? (QWidget*)Global::systemTray : (QWidget*)this); + m_passivePopup->setView( + "" + kapp->makeStdCaption( currentBasket()->isLocked() + ? QString("%1 %2") + .arg(Tools::textToHTMLWithoutP(currentBasket()->basketName()), i18n("(Locked)")) + : Tools::textToHTMLWithoutP(currentBasket()->basketName()) ), + message, + kapp->iconLoader()->loadIcon(currentBasket()->icon(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true)); + m_passivePopup->show(); +} + +void BNPView::showPassiveLoading(Basket *basket) +{ + if (isMainWindowActive()) + return; + + delete m_passivePopup; // Delete previous one (if exists): it will then hide it (only one at a time) + m_passivePopup = new KPassivePopup(Settings::useSystray() ? (QWidget*)Global::systemTray : (QWidget*)this); + m_passivePopup->setView( + Tools::textToHTMLWithoutP(basket->basketName()), + i18n("Loading..."), + kapp->iconLoader()->loadIcon(basket->icon(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true)); + m_passivePopup->show(); +} + +void BNPView::addNoteText() { showMainWindow(); currentBasket()->insertEmptyNote(NoteType::Text); } +void BNPView::addNoteHtml() { showMainWindow(); currentBasket()->insertEmptyNote(NoteType::Html); } +void BNPView::addNoteImage() { showMainWindow(); currentBasket()->insertEmptyNote(NoteType::Image); } +void BNPView::addNoteLink() { showMainWindow(); currentBasket()->insertEmptyNote(NoteType::Link); } +void BNPView::addNoteColor() { showMainWindow(); currentBasket()->insertEmptyNote(NoteType::Color); } + +void BNPView::aboutToHideNewBasketPopup() +{ + QTimer::singleShot(0, this, SLOT(cancelNewBasketPopup())); +} + +void BNPView::cancelNewBasketPopup() +{ + m_newBasketPopup = false; +} + +void BNPView::setNewBasketPopup() +{ + m_newBasketPopup = true; +} + +void BNPView::setCaption(QString s) +{ + emit setWindowCaption(s); +} + +void BNPView::updateStatusBarHint() +{ + m_statusbar->updateStatusBarHint(); +} + +void BNPView::setSelectionStatus(QString s) +{ + m_statusbar->setSelectionStatus(s); +} + +void BNPView::setLockStatus(bool isLocked) +{ + m_statusbar->setLockStatus(isLocked); +} + +void BNPView::postStatusbarMessage(const QString& msg) +{ + m_statusbar->postStatusbarMessage(msg); +} + +void BNPView::setStatusBarHint(const QString &hint) +{ + m_statusbar->setStatusBarHint(hint); +} + +void BNPView::setUnsavedStatus(bool isUnsaved) +{ + m_statusbar->setUnsavedStatus(isUnsaved); +} + +void BNPView::setActive(bool active) +{ +// std::cout << "Main Window Position: setActive(" << (active ? "true" : "false") << ")" << std::endl; + KMainWindow* win = Global::mainWindow(); + if(!win) + return; + +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + if (active) { + kapp->updateUserTimestamp(); // If "activate on mouse hovering systray", or "on drag throught systray" + Global::systemTray->setActive(); // FIXME: add this in the places it need + } else + Global::systemTray->setInactive(); +#elif KDE_IS_VERSION( 3, 1, 90 ) // KDE 3.2.x + // Code from Kopete (that seem to work, in waiting KSystemTray make puplic the toggleSHown) : + if (active) { + win->show(); + //raise() and show() should normaly deIconify the window. but it doesn't do here due + // to a bug in Qt or in KDE (qt3.1.x or KDE 3.1.x) then, i have to call KWin's method + if (win->isMinimized()) + KWin::deIconifyWindow(winId()); + + if ( ! KWin::windowInfo(winId(), NET::WMDesktop).onAllDesktops() ) + KWin::setOnDesktop(winId(), KWin::currentDesktop()); + win->raise(); + // Code from me: expected and correct behavviour: + kapp->updateUserTimestamp(); // If "activate on mouse hovering systray", or "on drag throught systray" + KWin::activateWindow(win->winId()); + } else + win->hide(); +#else // KDE 3.1.x and lower + if (win->active) { + if (win->isMinimized()) + win->hide(); // If minimized, show() doesn't work ! + win->show(); // Show it + // showNormal(); // If it was minimized + win->raise(); // Raise it on top + win->setActiveWindow(); // And set it the active window + } else + win->hide(); +#endif +} + +void BNPView::hideOnEscape() +{ + if (Settings::useSystray()) + setActive(false); +} + +bool BNPView::isPart() +{ + return (strcmp(name(), "BNPViewPart") == 0); +} + +bool BNPView::isMainWindowActive() +{ + KMainWindow* main = Global::mainWindow(); + if (main && main->isActiveWindow()) + return true; + return false; +} + +void BNPView::newBasket() +{ + askNewBasket(); +} + +void BNPView::handleCommandLine() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + /* Custom data folder */ + QCString customDataFolder = args->getOption("data-folder"); + if (customDataFolder != 0 && !customDataFolder.isEmpty()) + { + Global::setCustomSavesFolder(customDataFolder); + } + /* Debug window */ + if (args->isSet("debug")) { + new DebugWindow(); + Global::debugWindow->show(); + } + + /* Crash Handler to Mail Developers when Crashing: */ +#ifndef BASKET_USE_DRKONQI + if (!args->isSet("use-drkonquy")) + KCrash::setCrashHandler(Crash::crashHandler); +#endif +} + +/** Scenario of "Hide main window to system tray icon when mouse move out of the window" : + * - At enterEvent() we stop m_tryHideTimer + * - After that and before next, we are SURE cursor is hovering window + * - At leaveEvent() we restart m_tryHideTimer + * - Every 'x' ms, timeoutTryHide() seek if cursor hover a widget of the application or not + * - If yes, we musn't hide the window + * - But if not, we start m_hideTimer to hide main window after a configured elapsed time + * - timeoutTryHide() continue to be called and if cursor move again to one widget of the app, m_hideTimer is stopped + * - If after the configured time cursor hasn't go back to a widget of the application, timeoutHide() is called + * - It then hide the main window to systray icon + * - When the user will show it, enterEvent() will be called the first time he enter mouse to it + * - ... + */ + +/** Why do as this ? Problems with the use of only enterEvent() and leaveEvent() : + * - Resize window or hover titlebar isn't possible : leave/enterEvent + * are + * > Use the grip or Alt+rightDND to resize window + * > Use Alt+DND to move window + * - Each menu trigger the leavEvent + */ + +void BNPView::enterEvent(QEvent*) +{ + if(m_tryHideTimer) + m_tryHideTimer->stop(); + if(m_hideTimer) + m_hideTimer->stop(); +} + +void BNPView::leaveEvent(QEvent*) +{ + if (Settings::useSystray() && Settings::hideOnMouseOut() && m_tryHideTimer) + m_tryHideTimer->start(50); +} + +void BNPView::timeoutTryHide() +{ + // If a menu is displayed, do nothing for the moment + if (kapp->activePopupWidget() != 0L) + return; + + if (kapp->widgetAt(QCursor::pos()) != 0L) + m_hideTimer->stop(); + else if ( ! m_hideTimer->isActive() ) // Start only one time + m_hideTimer->start(Settings::timeToHideOnMouseOut() * 100, true); + + // If a sub-dialog is oppened, we musn't hide the main window: + if (kapp->activeWindow() != 0L && kapp->activeWindow() != Global::mainWindow()) + m_hideTimer->stop(); +} + +void BNPView::timeoutHide() +{ + // We check that because the setting can have been set to off + if (Settings::useSystray() && Settings::hideOnMouseOut()) + setActive(false); + m_tryHideTimer->stop(); +} + +void BNPView::changedSelectedNotes() +{ +// tabChanged(0); // FIXME: NOT OPTIMIZED +} + +/*void BNPView::areSelectedNotesCheckedChanged(bool checked) +{ + m_actCheckNotes->setChecked(checked && currentBasket()->showCheckBoxes()); +}*/ + +void BNPView::enableActions() +{ + Basket *basket = currentBasket(); + if(!basket) + return; + if(m_actLockBasket) + m_actLockBasket->setEnabled(!basket->isLocked() && basket->isEncrypted()); + if(m_actPassBasket) + m_actPassBasket->setEnabled(!basket->isLocked()); + m_actPropBasket->setEnabled(!basket->isLocked()); + m_actDelBasket->setEnabled(!basket->isLocked()); + m_actExportToHtml->setEnabled(!basket->isLocked()); + m_actShowFilter->setEnabled(!basket->isLocked()); + m_actFilterAllBaskets->setEnabled(!basket->isLocked()); + m_actResetFilter->setEnabled(!basket->isLocked()); + basket->decoration()->filterBar()->setEnabled(!basket->isLocked()); +} + +void BNPView::showMainWindow() +{ + KMainWindow *win = Global::mainWindow(); + + if (win) + { + win->show(); + } + setActive(true); + emit showPart(); +} + +void BNPView::populateTagsMenu() +{ + KPopupMenu *menu = (KPopupMenu*)(popupMenu("tags")); + if (menu == 0 || currentBasket() == 0) // TODO: Display a messagebox. [menu is 0, surely because on first launch, the XMLGUI does not work!] + return; + menu->clear(); + + Note *referenceNote; + if (currentBasket()->focusedNote() && currentBasket()->focusedNote()->isSelected()) + referenceNote = currentBasket()->focusedNote(); + else + referenceNote = currentBasket()->firstSelected(); + + populateTagsMenu(*menu, referenceNote); + + m_lastOpenedTagsMenu = menu; +// connect( menu, SIGNAL(aboutToHide()), this, SLOT(disconnectTagsMenu()) ); +} + +void BNPView::populateTagsMenu(KPopupMenu &menu, Note *referenceNote) +{ + if (currentBasket() == 0) + return; + + currentBasket()->m_tagPopupNote = referenceNote; + bool enable = currentBasket()->countSelecteds() > 0; + + QValueList::iterator it; + Tag *currentTag; + State *currentState; + int i = 10; + for (it = Tag::all.begin(); it != Tag::all.end(); ++it) { + // Current tag and first state of it: + currentTag = *it; + currentState = currentTag->states().first(); + QKeySequence sequence; + if (!currentTag->shortcut().isNull()) + sequence = currentTag->shortcut().operator QKeySequence(); + menu.insertItem(StateMenuItem::checkBoxIconSet( + (referenceNote ? referenceNote->hasTag(currentTag) : false), + menu.colorGroup()), + new StateMenuItem(currentState, sequence, true), + i + ); + if (!currentTag->shortcut().isNull()) + menu.setAccel(sequence, i); + menu.setItemEnabled(i, enable); + ++i; + } + + menu.insertSeparator(); +// menu.insertItem( /*SmallIconSet("editdelete"),*/ "&Assign new Tag...", 1 ); + //id = menu.insertItem( SmallIconSet("editdelete"), "&Remove All", -2 ); + //if (referenceNote->states().isEmpty()) + // menu.setItemEnabled(id, false); +// menu.insertItem( SmallIconSet("configure"), "&Customize...", 3 ); + menu.insertItem( new IndentedMenuItem(i18n("&Assign new Tag...")), 1 ); + menu.insertItem( new IndentedMenuItem(i18n("&Remove All"), "editdelete"), 2 ); + menu.insertItem( new IndentedMenuItem(i18n("&Customize..."), "configure"), 3 ); + + menu.setItemEnabled(1, enable); + if (!currentBasket()->selectedNotesHaveTags()) + menu.setItemEnabled(2, false); + + connect( &menu, SIGNAL(activated(int)), currentBasket(), SLOT(toggledTagInMenu(int)) ); + connect( &menu, SIGNAL(aboutToHide()), currentBasket(), SLOT(unlockHovering()) ); + connect( &menu, SIGNAL(aboutToHide()), currentBasket(), SLOT(disableNextClick()) ); +} + +void BNPView::connectTagsMenu() +{ + connect( popupMenu("tags"), SIGNAL(aboutToShow()), this, SLOT(populateTagsMenu()) ); + connect( popupMenu("tags"), SIGNAL(aboutToHide()), this, SLOT(disconnectTagsMenu()) ); +} + +/* + * The Tags menu is ONLY created once the BasKet KPart is first shown. + * So we can use this menu only from then? + * When the KPart is changed in Kontact, and then the BasKet KPart is shown again, + * Kontact created a NEW Tags menu. So we should connect again. + * But when Kontact main window is hidden and then re-shown, the menu does not change. + * So we disconnect at hide event to ensure only one connection: the next show event will not connects another time. + */ + +void BNPView::showEvent(QShowEvent*) +{ + if (isPart()) + QTimer::singleShot( 0, this, SLOT(connectTagsMenu()) ); + + if (m_firstShow) { + m_firstShow = false; + onFirstShow(); + } + if (isPart()/*TODO: && !LikeBack::enabledBar()*/) { + Global::likeBack->enableBar(); + } +} + +void BNPView::hideEvent(QHideEvent*) +{ + if (isPart()) { + disconnect( popupMenu("tags"), SIGNAL(aboutToShow()), this, SLOT(populateTagsMenu()) ); + disconnect( popupMenu("tags"), SIGNAL(aboutToHide()), this, SLOT(disconnectTagsMenu()) ); + } + + if (isPart()) + Global::likeBack->disableBar(); +} + +void BNPView::disconnectTagsMenu() +{ + QTimer::singleShot( 0, this, SLOT(disconnectTagsMenuDelayed()) ); +} + +void BNPView::disconnectTagsMenuDelayed() +{ + disconnect( m_lastOpenedTagsMenu, SIGNAL(activated(int)), currentBasket(), SLOT(toggledTagInMenu(int)) ); + disconnect( m_lastOpenedTagsMenu, SIGNAL(aboutToHide()), currentBasket(), SLOT(unlockHovering()) ); + disconnect( m_lastOpenedTagsMenu, SIGNAL(aboutToHide()), currentBasket(), SLOT(disableNextClick()) ); +} + +void BNPView::showGlobalShortcutsSettingsDialog() +{ + KKeyDialog::configure(Global::globalAccel); + //.setCaption(..) + Global::globalAccel->writeSettings(); +} + +#include "bnpview.moc" diff --git a/src/bnpview.h b/src/bnpview.h new file mode 100644 index 0000000..b7e99ef --- /dev/null +++ b/src/bnpview.h @@ -0,0 +1,354 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef BNPVIEW_H +#define BNPVIEW_H + +#include +#include +#include +#include +#include +#include +#include +#include "global.h" +#include "basketdcopiface.h" + + /// NEW: + +class QWidgetStack; +class QDomDocument; +class QDomElement; +class KToggleAction; +class KPassivePopup; +class QPopupMenu; +class KPopupMenu; +class KTar; + +class DesktopColorPicker; +class RegionGrabber; + +class Basket; +class DecoratedBasket; +class BasketListViewItem; +class NoteSelection; +class BasketStatusBar; +class Tag; +class State; +class Note; + +class BNPView : public QSplitter, virtual public BasketDcopInterface +{ + Q_OBJECT + public: + /// CONSTRUCTOR AND DESTRUCTOR: + BNPView(QWidget *parent, const char *name, KXMLGUIClient *aGUIClient, + KActionCollection *actionCollection, BasketStatusBar *bar); + ~BNPView(); + /// MANAGE CONFIGURATION EVENTS!: + void setTreePlacement(bool onLeft); + void relayoutAllBaskets(); + void recomputeAllStyles(); + void removedStates(const QValueList &deletedStates); + void linkLookChanged(); + void filterPlacementChanged(bool onTop); + /// MANAGE BASKETS: + BasketListViewItem* listViewItemForBasket(Basket *basket); + Basket* currentBasket(); + Basket* parentBasketOf(Basket *basket); + void setCurrentBasket(Basket *basket); + void removeBasket(Basket *basket); + /// For NewBasketDialog (and later some other classes): + QListViewItem* firstListViewItem(); + /// + BasketListViewItem* lastListViewItem(); + int basketCount(QListViewItem *parent = 0); + bool canFold(); + bool canExpand(); + void enableActions(); + + private: + QDomElement basketElement(QListViewItem *item, QDomDocument &document, QDomElement &parentElement); + public slots: + void countsChanged(Basket *basket); + void notesStateChanged(); + bool convertTexts(); + + void updateBasketListViewItem(Basket *basket); + void save(); + void save(QListViewItem *firstItem, QDomDocument &document, QDomElement &parentElement); + void saveSubHierarchy(QListViewItem *item, QDomDocument &document, QDomElement &parentElement, bool recursive); + void load(); + void load(KListView *listView, QListViewItem *item, const QDomElement &baskets); + void loadNewBasket(const QString &folderName, const QDomElement &properties, Basket *parent); + void goToPreviousBasket(); + void goToNextBasket(); + void foldBasket(); + void expandBasket(); + void closeAllEditors(); + /// + void toggleFilterAllBaskets(bool doFilter); + void newFilter(); + void newFilterFromFilterBar(); + bool isFilteringAllBaskets(); + // From main window + void importKNotes(); + void importKJots(); + void importKnowIt(); + void importTuxCards(); + void importStickyNotes(); + void importTomboy(); + void importTextFile(); + void backupRestore(); + + /** Note */ + void activatedTagShortcut(); + void exportToHTML(); + void editNote(); + void cutNote(); + void copyNote(); + void delNote(); + void openNote(); + void openNoteWith(); + void saveNoteAs(); + void noteGroup(); + void noteUngroup(); + void moveOnTop(); + void moveOnBottom(); + void moveNoteUp(); + void moveNoteDown(); + void slotSelectAll(); + void slotUnselectAll(); + void slotInvertSelection(); + void slotResetFilter(); + + void slotColorFromScreen(bool global = false); + void slotColorFromScreenGlobal(); + void colorPicked(const QColor &color); + void colorPickingCanceled(); + void slotConvertTexts(); + + /** Global shortcuts */ + void addNoteText(); + void addNoteHtml(); + void addNoteImage(); + void addNoteLink(); + void addNoteColor(); + /** Passive Popups for Global Actions */ + void showPassiveDropped(const QString &title); + void showPassiveDroppedDelayed(); // Do showPassiveDropped(), but delayed + void showPassiveContent(bool forceShow = false); + void showPassiveContentForced(); + void showPassiveImpossible(const QString &message); + void showPassiveLoading(Basket *basket); + // For GUI : + void setFiltering(bool filtering); + /** Edit */ + void undo(); + void redo(); + void globalPasteInCurrentBasket(); + void pasteInCurrentBasket(); + void pasteSelInCurrentBasket(); + void pasteToBasket(int index, QClipboard::Mode mode = QClipboard::Clipboard); + void showHideFilterBar(bool show, bool switchFocus = true); + /** Insert **/ + void insertEmpty(int type); + void insertWizard(int type); + void grabScreenshot(bool global = false); + void grabScreenshotGlobal(); + void screenshotGrabbed(const QPixmap &pixmap); + /** Basket */ + void askNewBasket(); + void askNewBasket(Basket *parent, Basket *pickProperties); + void askNewSubBasket(); + void askNewSiblingBasket(); + void aboutToHideNewBasketPopup(); + void setNewBasketPopup(); + void cancelNewBasketPopup(); + void propBasket(); + void delBasket(); + void doBasketDeletion(Basket *basket); + void password(); + void saveAsArchive(); + void openArchive(); + void delayedOpenArchive(); + void lockBasket(); + void hideOnEscape(); + + void changedSelectedNotes(); + void timeoutTryHide(); + void timeoutHide(); + + public: + static QString s_fileToOpen; + + public slots: + void addWelcomeBaskets(); + private slots: + void updateNotesActions(); + void slotBasketNumberChanged(int number); + void slotBasketChanged(); + void currentBasketChanged(); + void isLockedChanged(); + void lateInit(); + void onFirstShow(); + void showGlobalShortcutsSettingsDialog(); + + public: + KAction *m_actEditNote; + KAction *m_actOpenNote; + KAction *m_actPaste; + KAction *m_actGrabScreenshot; + KAction *m_actColorPicker; + KAction *m_actLockBasket; + KAction *m_actPassBasket; + KAction *actNewBasket; + KAction *actNewSubBasket; + KAction *actNewSiblingBasket; + KAction *m_actHideWindow; + KAction *m_actExportToHtml; + KAction *m_actPropBasket; + KAction *m_actDelBasket; + KToggleAction *m_actFilterAllBaskets; + + private: + // Basket actions: + KAction *m_actSaveAsArchive; + KAction *m_actOpenArchive; + // Notes actions : + KAction *m_actOpenNoteWith; + KAction *m_actSaveNoteAs; + KAction *m_actGroup; + KAction *m_actUngroup; + KAction *m_actMoveOnTop; + KAction *m_actMoveNoteUp; + KAction *m_actMoveNoteDown; + KAction *m_actMoveOnBottom; + // Edit actions : + KAction *m_actUndo; + KAction *m_actRedo; + KAction *m_actCutNote; + KAction *m_actCopyNote; + KAction *m_actDelNote; + KAction *m_actSelectAll; + KAction *m_actUnselectAll; + KAction *m_actInvertSelection; + // Insert actions : +// KAction *m_actInsertText; + KAction *m_actInsertHtml; + KAction *m_actInsertLink; + KAction *m_actInsertImage; + KAction *m_actInsertColor; + KAction *m_actImportKMenu; + KAction *m_actInsertLauncher; + KAction *m_actImportIcon; + KAction *m_actLoadFile; + QPtrList m_insertActions; + // Basket actions : + KToggleAction *m_actShowFilter; + KAction *m_actResetFilter; + // Go actions : + KAction *m_actPreviousBasket; + KAction *m_actNextBasket; + KAction *m_actFoldBasket; + KAction *m_actExpandBasket; +// KAction *m_convertTexts; // FOR_BETA_PURPOSE + KAction *actConfigGlobalShortcuts; + + void setupActions(); + void setupGlobalShortcuts(); + DecoratedBasket* currentDecoratedBasket(); + + public: + Basket* loadBasket(const QString &folderName); // Public only for class Archive + BasketListViewItem* appendBasket(Basket *basket, QListViewItem *parentItem); // Public only for class Archive + + Basket* basketForFolderName(const QString &folderName); + QPopupMenu* popupMenu(const QString &menuName); + bool isPart(); + bool isMainWindowActive(); + void showMainWindow(); + + // dcop calls + virtual void newBasket(); + virtual void handleCommandLine(); + + public slots: + void setCaption(QString s); + void updateStatusBarHint(); + void setSelectionStatus(QString s); + void setLockStatus(bool isLocked); + void postStatusbarMessage(const QString&); + void setStatusBarHint(const QString&); + void setUnsavedStatus(bool isUnsaved); + void setActive(bool active = true); + KActionCollection *actionCollection() { return m_actionCollection; }; + + void populateTagsMenu(); + void populateTagsMenu(KPopupMenu &menu, Note *referenceNote); + void connectTagsMenu(); + void disconnectTagsMenu(); + void disconnectTagsMenuDelayed(); + protected: + void showEvent(QShowEvent*); + void hideEvent(QHideEvent*); + private: + KPopupMenu *m_lastOpenedTagsMenu; + + private slots: + void slotPressed(QListViewItem *item, const QPoint &/*pos*/ = QPoint(), int /*column*/ = 0); + void needSave(QListViewItem*); + void slotContextMenu(KListView *listView, QListViewItem *item, const QPoint &pos); + void slotMouseButtonPressed(int button, QListViewItem *item, const QPoint &pos, int column); + void slotShowProperties(QListViewItem *item, const QPoint&, int); + void initialize(); + + signals: + void basketNumberChanged(int number); + void basketChanged(); + void setWindowCaption(const QString &s); + void showPart(); + + protected: + void enterEvent(QEvent*); + void leaveEvent(QEvent*); + + private: + KListView *m_tree; + QWidgetStack *m_stack; + bool m_loading; + bool m_newBasketPopup; + bool m_firstShow; + DesktopColorPicker *m_colorPicker; + bool m_colorPickWasShown; + bool m_colorPickWasGlobal; + RegionGrabber *m_regionGrabber; + QString m_passiveDroppedTitle; + NoteSelection *m_passiveDroppedSelection; + KPassivePopup *m_passivePopup; + static const int c_delayTooltipTime; + KActionCollection *m_actionCollection; + KXMLGUIClient *m_guiClient; + BasketStatusBar *m_statusbar; + QTimer *m_tryHideTimer; + QTimer *m_hideTimer; +}; + +#endif // BNPVIEW_H diff --git a/src/clickablelabel.cpp b/src/clickablelabel.cpp new file mode 100644 index 0000000..11a5ce9 --- /dev/null +++ b/src/clickablelabel.cpp @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "clickablelabel.h" + +void ClickableLabel::mousePressEvent(QMouseEvent *event) +{ + if (event->button() & Qt::LeftButton) + emit clicked(); +} + +#include "clickablelabel.moc" diff --git a/src/clickablelabel.h b/src/clickablelabel.h new file mode 100644 index 0000000..0198974 --- /dev/null +++ b/src/clickablelabel.h @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef CLICKABLELABEL_H +#define CLICKABLELABEL_H + +#include + +/** This class is a QLabel that can emit a clicked() signal when clicked ! + * @author S�astien Laot + */ +class ClickableLabel : public QLabel +{ + Q_OBJECT + public: + /** Construtor, initializer and destructor */ + ClickableLabel(QWidget *parent = 0, const char *name = 0) + : QLabel(parent, name) {} + ~ClickableLabel() {} + signals: + void clicked(); + protected: + virtual void mousePressEvent(QMouseEvent *event); +}; + +#endif // CLICKABLELABEL_H diff --git a/src/colorpicker.cpp b/src/colorpicker.cpp new file mode 100644 index 0000000..37049bb --- /dev/null +++ b/src/colorpicker.cpp @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "colorpicker.h" +#include "qtimer.h" +#include + +/// /// + +/** DektopColorPicker */ + +/* From Qt documentation: + * " Note that only visible widgets can grab mouse input. + * If isVisible() returns FALSE for a widget, that widget cannot call grabMouse(). " + * So, we should use an always visible widget to be able to pick a color from screen, + * even by first hidding the main window (user seldomly want to grab a color from BasKet!) + * or use a global shortcut (main window can be hidden when hitting that shortcut). + */ + +DesktopColorPicker::DesktopColorPicker() + : QDesktopWidget() +{ + setName("DesktopColorPicker"); + m_gettingColorFromScreen = false; +} + +DesktopColorPicker::~DesktopColorPicker() +{ +} + +void DesktopColorPicker::pickColor() +{ + m_gettingColorFromScreen = true; +// Global::mainContainer->setActive(false); + QTimer::singleShot( 50, this, SLOT(slotDelayedPick()) ); +} + +/* When firered from basket context menu, and not from menu, grabMouse doesn't work! + * It's perhapse because context menu call slotColorFromScreen() and then + * ungrab the mouse (since menus grab the mouse). + * But why isn't there such bug with normal menus?... + * By calling this method with a QTimer::singleShot, we are sure context menu code is + * finished and we can grab the mouse without loosing the grab: + */ +void DesktopColorPicker::slotDelayedPick() +{ + grabKeyboard(); + grabMouse(crossCursor); +} + +/* Validate the color + */ +void DesktopColorPicker::mouseReleaseEvent(QMouseEvent *event) +{ + if (m_gettingColorFromScreen) { + m_gettingColorFromScreen = false; + releaseMouse(); + releaseKeyboard(); + QColor color = KColorDialog::grabColor(event->globalPos()); + emit pickedColor(color); + } else + QDesktopWidget::mouseReleaseEvent(event); +} + +/* Cancel the mode + */ +void DesktopColorPicker::keyPressEvent(QKeyEvent *event) +{ + if (m_gettingColorFromScreen) + if (event->key() == Qt::Key_Escape) { + m_gettingColorFromScreen = false; + releaseMouse(); + releaseKeyboard(); + emit canceledPick(); + } + QDesktopWidget::keyPressEvent(event); +} + +#include "colorpicker.moc" diff --git a/src/colorpicker.h b/src/colorpicker.h new file mode 100644 index 0000000..1f109fa --- /dev/null +++ b/src/colorpicker.h @@ -0,0 +1,57 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef COLORPICKER_H +#define COLORPICKER_H + +#include + +/** Class to pick a color on the screen + * @author S�astien Laot + */ +class DesktopColorPicker : public QDesktopWidget +{ + Q_OBJECT + public: + /** Construtor, initializer and destructor */ + DesktopColorPicker(); + ~DesktopColorPicker(); + public slots: + /** Begin color picking. + * This function returns immediatly, and pickedColor() is emitted if user has + * choosen a color, and not canceled the process (by pressing Escape). + */ + void pickColor(); + signals: + /** When user picked a color, this signal is emitted. + */ + void pickedColor(const QColor &color); + /** When user cancel a picking (by pressing Escape), this signal is emitted. + */ + void canceledPick(); + protected slots: + void slotDelayedPick(); + protected: + void mouseReleaseEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent *event); + bool m_gettingColorFromScreen; +}; + +#endif // COLORPICKER_H diff --git a/src/cr128-app-basket.png b/src/cr128-app-basket.png new file mode 100644 index 0000000..a9b207d Binary files /dev/null and b/src/cr128-app-basket.png differ diff --git a/src/cr16-action-likeback_bug.png b/src/cr16-action-likeback_bug.png new file mode 100755 index 0000000..1edc6c1 Binary files /dev/null and b/src/cr16-action-likeback_bug.png differ diff --git a/src/cr16-action-likeback_dislike.png b/src/cr16-action-likeback_dislike.png new file mode 100644 index 0000000..fdc9a13 Binary files /dev/null and b/src/cr16-action-likeback_dislike.png differ diff --git a/src/cr16-action-likeback_feature.png b/src/cr16-action-likeback_feature.png new file mode 100755 index 0000000..8d72794 Binary files /dev/null and b/src/cr16-action-likeback_feature.png differ diff --git a/src/cr16-action-likeback_like.png b/src/cr16-action-likeback_like.png new file mode 100644 index 0000000..b62b611 Binary files /dev/null and b/src/cr16-action-likeback_like.png differ diff --git a/src/cr16-app-basket.png b/src/cr16-app-basket.png new file mode 100644 index 0000000..3fc0b3a Binary files /dev/null and b/src/cr16-app-basket.png differ diff --git a/src/cr22-app-basket.png b/src/cr22-app-basket.png new file mode 100644 index 0000000..6ff816e Binary files /dev/null and b/src/cr22-app-basket.png differ diff --git a/src/cr32-app-basket.png b/src/cr32-app-basket.png new file mode 100644 index 0000000..1177cb3 Binary files /dev/null and b/src/cr32-app-basket.png differ diff --git a/src/cr48-app-basket.png b/src/cr48-app-basket.png new file mode 100644 index 0000000..1484fb0 Binary files /dev/null and b/src/cr48-app-basket.png differ diff --git a/src/cr64-app-basket.png b/src/cr64-app-basket.png new file mode 100644 index 0000000..620808d Binary files /dev/null and b/src/cr64-app-basket.png differ diff --git a/src/crashhandler.cpp b/src/crashhandler.cpp new file mode 100644 index 0000000..64e745b --- /dev/null +++ b/src/crashhandler.cpp @@ -0,0 +1,226 @@ +// Code from Amarok. + +/*************************************************************************** + * Copyright (C) 2005 Max Howell * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 "amarok.h" +//#include "amarokconfig.h" +#include "crashhandler.h" +//#include "debug.h" +#include "config.h" + +#include //invokeMailer() +#include +#include +#include +#include + +#include +#include +#include + +#include //popen, fread +#include +#include //pid_t +#include //waitpid +//#include +#include //write, getpid + + + +//#ifndef TAGLIB_PATCH_VERSION +//// seems to be wheel's style +//#define TAGLIB_PATCH_VERSION 0 +//#endif + + + #if 0 + class CrashHandlerWidget : public KDialog { + public: + CrashHandlerWidget(); + }; + #endif + + static QString + runCommand( const QCString &command ) + { + static const uint SIZE = 40960; //40 KiB + static char stdoutBuf[ SIZE ]; + +// debug() << "Running: " << command << endl; + + FILE *process = ::popen( command, "r" ); + stdoutBuf[ std::fread( static_cast( stdoutBuf ), sizeof(char), SIZE-1, process ) ] = '\0'; + ::pclose( process ); + + return QString::fromLocal8Bit( stdoutBuf ); + } + + void + Crash::crashHandler( int /*signal*/ ) + { + // we need to fork to be able to get a + // semi-decent bt - I dunno why + const pid_t pid = ::fork(); + + if( pid <= 0 ) + { + // we are the child process (the result of the fork) +// debug() << "amaroK is crashing...\n"; + + QString subject = "[basket-crash] " VERSION " "; + QString body = i18n( + "%1 has crashed! We're sorry about this.\n" + "\n" + "But, all is not lost! You could potentially help us fix the crash. " + "Information describing the crash is below, so just click send, " + "or if you have time, write a brief description of how the crash happened first.\n\n" + "Many thanks." ).arg(kapp->aboutData()->programName()) + "\n\n"; + body += "\n\n\n\n\n\n" + i18n( + "The information below is to help the developers identify the problem, " + "please do not modify it." ) + "\n\n\n\n"; + + + body += "======== DEBUG INFORMATION =======\n" + "Version: " VERSION "\n" + "Build date: " __DATE__ "\n" + "CC version: " __VERSION__ "\n" //assuming we're using GCC + "KDElibs: " KDE_VERSION_STRING "\n" +;// "TagLib: %2.%3.%4\n"; + +/* body = body + .arg( TAGLIB_MAJOR_VERSION ) + .arg( TAGLIB_MINOR_VERSION ) + .arg( TAGLIB_PATCH_VERSION );*/ + + #ifdef NDEBUG + body += "NDEBUG: true"; + #endif + body += "\n"; + + /// obtain the backtrace with gdb + + KTempFile temp; + temp.setAutoDelete( true ); + + const int handle = temp.handle(); + +// QCString gdb_command_string = +// "file amarokapp\n" +// "attach " + QCString().setNum( ::getppid() ) + "\n" +// "bt\n" "echo \\n\n" +// "thread apply all bt\n"; + + const QCString gdb_batch = + "bt\n" + "echo \\n\\n\n" + "bt full\n" + "echo \\n\\n\n" + "echo ==== (gdb) thread apply all bt ====\\n\n" + "thread apply all bt\n"; + + ::write( handle, gdb_batch, gdb_batch.length() ); + ::fsync( handle ); + + // so we can read stderr too + ::dup2( fileno( stdout ), fileno( stderr ) ); + + + QCString gdb; + gdb = "gdb --nw -n --batch -x "; + gdb += temp.name().latin1(); + gdb += " basket "; + gdb += QCString().setNum( ::getppid() ); + + QString bt = runCommand( gdb ); + + /// clean up + bt.remove( "(no debugging symbols found)..." ); + bt.remove( "(no debugging symbols found)\n" ); + bt.replace( QRegExp("\n{2,}"), "\n" ); //clean up multiple \n characters + bt.stripWhiteSpace(); + + /// analyze usefulness + bool useful = true; + const QString fileCommandOutput = runCommand( "file `which basket`" ); + + if( fileCommandOutput.find( "not stripped", false ) == -1 ) + subject += "[___stripped]"; //same length as below + else + subject += "[NOTstripped]"; + + if( !bt.isEmpty() ) { + const int invalidFrames = bt.contains( QRegExp("\n#[0-9]+\\s+0x[0-9A-Fa-f]+ in \\?\\?") ); + const int validFrames = bt.contains( QRegExp("\n#[0-9]+\\s+0x[0-9A-Fa-f]+ in [^?]") ); + const int totalFrames = invalidFrames + validFrames; + + if( totalFrames > 0 ) { + const double validity = double(validFrames) / totalFrames; + subject += QString("[validity: %1]").arg( validity, 0, 'f', 2 ); + if( validity <= 0.5 ) useful = false; + } + subject += QString("[frames: %1]").arg( totalFrames, 3 /*padding*/ ); + + if( bt.find( QRegExp(" at \\w*\\.cpp:\\d+\n") ) >= 0 ) + subject += "[line numbers]"; + } + else + useful = false; + +// subject += QString("[%1]").arg( AmarokConfig::soundSystem().remove( QRegExp("-?engine") ) ); + +// debug() << subject << endl; + + + //TODO -fomit-frame-pointer buggers up the backtrace, so detect it + //TODO -O optimization can rearrange execution and stuff so show a warning for the developer + //TODO pass the CXXFLAGS used with the email + + if( useful ) { + body += "==== file `which basket` ==========\n"; + body += fileCommandOutput + "\n"; + body += "==== (gdb) bt =====================\n"; + body += bt;//+ "\n\n"; +// body += "==== kdBacktrace() ================\n"; +// body += kdBacktrace(); + + //TODO startup notification + kapp->invokeMailer( + /*to*/ "kelvie@ieee.org", + /*cc*/ QString(), + /*bcc*/ QString(), + /*subject*/ subject, + /*body*/ body, + /*messageFile*/ QString(), + /*attachURLs*/ QStringList(), + /*startup_id*/ "" ); + } + else { + std::cout << "\n" + i18n( "%1 has crashed! We're sorry about this.\n\n" + "But, all is not lost! Perhaps an upgrade is already available " + "which fixes the problem. Please check your distribution's software repository." ) + .arg(kapp->aboutData()->programName()).local8Bit() << std::endl; + } + + //_exit() exits immediately, otherwise this + //function is called repeatedly ad finitum + ::_exit( 255 ); + } + + else { + // we are the process that crashed + + ::alarm( 0 ); + + // wait for child to exit + ::waitpid( pid, NULL, 0 ); + ::_exit( 253 ); + } + } diff --git a/src/crashhandler.h b/src/crashhandler.h new file mode 100644 index 0000000..7163def --- /dev/null +++ b/src/crashhandler.h @@ -0,0 +1,31 @@ +// Code from Amarok. + +/*************************************************************************** + * Copyright (C) 2005 Max Howell * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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 CRASH_H +#define CRASH_H + +#include //for main.cpp + + /** + * @author Max Howell + * @short The amaroK crash-handler + * + * I'm not entirely sure why this had to be inside a class, but it + * wouldn't work otherwise *shrug* + */ + class Crash + { + public: + static void crashHandler( int signal ); + }; + +#endif diff --git a/src/crsc-app-basket.svg b/src/crsc-app-basket.svg new file mode 100644 index 0000000..1bd0c02 --- /dev/null +++ b/src/crsc-app-basket.svg @@ -0,0 +1,1233 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/debugwindow.cpp b/src/debugwindow.cpp new file mode 100644 index 0000000..7df259e --- /dev/null +++ b/src/debugwindow.cpp @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include + +#include "global.h" +#include "debugwindow.h" + +DebugWindow::DebugWindow(QWidget *parent, const char *name ) + : QWidget(parent, name != 0 ? name : "DebugWindow") +{ + Global::debugWindow = this; + setCaption(i18n("Debug Window")); + + layout = new QVBoxLayout(this); + textBrowser = new QTextBrowser(this); + + textBrowser->setWordWrap(QTextBrowser::NoWrap); + + layout->addWidget(textBrowser); + textBrowser->show(); +} + +DebugWindow::~DebugWindow() +{ + delete textBrowser; + delete layout; +} + +void DebugWindow::postMessage(const QString msg) +{ + textBrowser->append(msg); +} + +DebugWindow& DebugWindow::operator<<(const QString msg) +{ + textBrowser->append(msg); + return *this; +} + +void DebugWindow::insertHLine() +{ + textBrowser->append("
      "); +} + +void DebugWindow::closeEvent(QCloseEvent *event) +{ + Global::debugWindow = 0L; + QWidget::closeEvent(event); +} + +#include "debugwindow.moc" diff --git a/src/debugwindow.h b/src/debugwindow.h new file mode 100644 index 0000000..c078aec --- /dev/null +++ b/src/debugwindow.h @@ -0,0 +1,54 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef DEBUGWINDOW_H +#define DEBUGWINDOW_H + +#include + +class QVBoxLayout; +class QTextBrowser; +class QString; +class QCloseEvent; + +/**A simple window that display text through debuging messages. + *@author Sébastien Laoût + */ + +class DebugWindow : public QWidget { + Q_OBJECT + public: + /** Construtor and destructor */ + DebugWindow(QWidget *parent = 0, const char *name = 0); + ~DebugWindow(); + /** Methods to post a message to the debug window */ + void postMessage(const QString msg); + DebugWindow& operator<<(const QString msg); + void insertHLine(); + protected: + virtual void closeEvent(QCloseEvent *event); + private: + QVBoxLayout *layout; + QTextBrowser *textBrowser; +}; + +#define DEBUG_WIN if (Global::debugWindow) *Global::debugWindow + +#endif // DEBUGWINDOW_H diff --git a/src/exporterdialog.cpp b/src/exporterdialog.cpp new file mode 100644 index 0000000..569baf7 --- /dev/null +++ b/src/exporterdialog.cpp @@ -0,0 +1,148 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "exporterdialog.h" +#include "basket.h" + +ExporterDialog::ExporterDialog(Basket *basket, QWidget *parent, const char *name) + : KDialogBase(parent, name, /*modal=*/true, i18n("Export Basket to HTML"), + KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, /*separator=*/true), + m_basket(basket) +{ + QVBox *page = makeVBoxMainWidget(); + + QWidget *wid = new QWidget(page); + QHBoxLayout *hLay = new QHBoxLayout(wid, /*margin=*/0, KDialogBase::spacingHint()); + m_url = new KURLRequester("", wid); + m_url->setCaption(i18n("HTML Page Filename")); + m_url->setFilter("text/html"); + m_url->fileDialog()->setOperationMode(KFileDialog::Saving); + hLay->addWidget( new QLabel(m_url, i18n("&Filename:"), wid) ); + hLay->addWidget( m_url ); + + m_embedLinkedFiles = new QCheckBox(i18n("&Embed linked local files"), page); + m_embedLinkedFolders = new QCheckBox(i18n("Embed &linked local folders"), page); + m_erasePreviousFiles = new QCheckBox(i18n("Erase &previous files in target folder"), page); + m_formatForImpression = new QCheckBox(i18n("For&mat for impression"), page); + m_formatForImpression->hide(); + + load(); + m_url->lineEdit()->setFocus(); + + showTile(true); + // Add a stretch at the bottom: + // Duplicated code from AddBasketWizard::addStretch(QWidget *parent): + (new QWidget(page))->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + // Double the width, because the filename should be visible + QSize size(sizeHint()); + resize(QSize(size.width() * 2, size.height())); +/* +========================== ++ [00000000000 ] Progress bar! ++ newBasket -> name folder as the basket +*/ +} + +ExporterDialog::~ExporterDialog() +{ +} + +void ExporterDialog::show() +{ + KDialogBase::show(); + + QString lineEditText = m_url->lineEdit()->text(); + int selectionStart = lineEditText.findRev("/") + 1; + m_url->lineEdit()->setSelection(selectionStart, lineEditText.length() - selectionStart - QString(".html").length()); +} + +void ExporterDialog::load() +{ + KConfig *config = KGlobal::config(); + config->setGroup("HTML Export"); + + QString folder = config->readEntry("lastFolder", QDir::homeDirPath()) + "/"; + QString url = folder + QString(m_basket->basketName()).replace("/", "_") + ".html"; + m_url->setURL(url); + + m_embedLinkedFiles->setChecked( config->readBoolEntry("embedLinkedFiles", true) ); + m_embedLinkedFolders->setChecked( config->readBoolEntry("embedLinkedFolders", false) ); + m_erasePreviousFiles->setChecked( config->readBoolEntry("erasePreviousFiles", true) ); + m_formatForImpression->setChecked( config->readBoolEntry("formatForImpression", false) ); +} + +void ExporterDialog::save() +{ + KConfig *config = KGlobal::config(); + config->setGroup("HTML Export"); + + QString folder = KURL(m_url->url()).directory(); + config->writeEntry( "lastFolder", folder ); + config->writeEntry( "embedLinkedFiles", m_embedLinkedFiles->isChecked() ); + config->writeEntry( "embedLinkedFolders", m_embedLinkedFolders->isChecked() ); + config->writeEntry( "erasePreviousFiles", m_erasePreviousFiles->isChecked() ); + config->writeEntry( "formatForImpression", m_formatForImpression->isChecked() ); +} + +void ExporterDialog::slotOk() +{ + save(); + KDialogBase::slotOk(); +} + +QString ExporterDialog::filePath() +{ + return m_url->url(); +} + +bool ExporterDialog::embedLinkedFiles() +{ + return m_embedLinkedFiles->isChecked(); +} + +bool ExporterDialog::embedLinkedFolders() +{ + return m_embedLinkedFolders->isChecked(); +} + +bool ExporterDialog::erasePreviousFiles() +{ + return m_erasePreviousFiles->isChecked(); +} + +bool ExporterDialog::formatForImpression() +{ + return m_formatForImpression->isChecked(); +} + +#include "exporterdialog.moc" diff --git a/src/exporterdialog.h b/src/exporterdialog.h new file mode 100644 index 0000000..af2e0cd --- /dev/null +++ b/src/exporterdialog.h @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef EXPORTERDIALOG_H +#define EXPORTERDIALOG_H + +#include + +class KURLRequester; +class QCheckBox; +class QString; + +class Basket; + +/** + * @author Sébastien Laoût + */ +class ExporterDialog : public KDialogBase +{ + Q_OBJECT + public: + ExporterDialog(Basket *basket, QWidget *parent = 0, const char *name = 0); + ~ExporterDialog(); + QString filePath(); + bool embedLinkedFiles(); + bool embedLinkedFolders(); + bool erasePreviousFiles(); + bool formatForImpression(); + void show(); + protected slots: + void slotOk(); + void load(); + void save(); + private: + Basket *m_basket; + KURLRequester *m_url; + QCheckBox *m_embedLinkedFiles; + QCheckBox *m_embedLinkedFolders; + QCheckBox *m_erasePreviousFiles; + QCheckBox *m_formatForImpression; +}; + +#endif // EXPORTERDIALOG_H diff --git a/src/filter.cpp b/src/filter.cpp new file mode 100644 index 0000000..57aa4ae --- /dev/null +++ b/src/filter.cpp @@ -0,0 +1,307 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +//#include +#include +#include +//#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "filter.h" +//#include "settings.h" +#include "global.h" +#include "bnpview.h" +#include "tools.h" +#include "tag.h" +#include "focusedwidgets.h" + +/** FilterBar */ + +FilterBar::FilterBar(QWidget *parent, const char *name) + : QWidget(parent, name)/*, m_blinkTimer(this), m_blinkedTimes(0)*/ +{ + QHBoxLayout *hBox = new QHBoxLayout(this, /*margin*/0, /*spacing*/0); + + // Create every widgets: + QIconSet resetIconSet = kapp->iconLoader()->loadIconSet("locationbar_erase", KIcon::Toolbar); + QIconSet inAllIconSet = kapp->iconLoader()->loadIconSet("find", KIcon::Toolbar); + + + m_resetButton = new QToolButton(this); + m_resetButton->setIconSet(resetIconSet); + m_resetButton->setTextLabel(i18n("Reset Filter"));//, /*groupText=*/"", this, SLOT(reset()), 0); + m_resetButton->setAutoRaise(true); + //new KToolBarButton("locationbar_erase", /*id=*/1230, this, /*name=*/0, i18n("Reset Filter")); + m_lineEdit = new FocusedLineEdit(this); + QLabel *label = new QLabel(m_lineEdit, i18n("&Filter: "), this); + m_tagsBox = new FocusedComboBox(this); + QLabel *label2 = new QLabel(m_tagsBox, i18n("T&ag: "), this); + m_inAllBasketsButton = new QToolButton(this); + m_inAllBasketsButton->setIconSet(inAllIconSet); + m_inAllBasketsButton->setTextLabel(i18n("Filter all Baskets"));//, /*groupText=*/"", this, SLOT(inAllBaskets()), 0); + m_inAllBasketsButton->setAutoRaise(true); + + // Configure the Reset button: + m_resetButton->setEnabled(false); + + // Configure the Tags combobox: + repopulateTagsComnbo(); + + // Configure the Serach in all Baskets button: + m_inAllBasketsButton->setToggleButton(true); +// m_inAllBasketsButton->setOn(true); +// Global::bnpView->toggleFilterAllBaskets(true); + +// m_lineEdit->setMaximumWidth(150); + + // Layout all those widgets: +// hBox->addStretch(); + hBox->addWidget(m_resetButton); + hBox->addSpacing(KDialogBase::spacingHint()); + hBox->addWidget(label); + hBox->addWidget(m_lineEdit); + hBox->addSpacing(KDialogBase::spacingHint()); + hBox->addWidget(label2); + hBox->addWidget(m_tagsBox); + hBox->addSpacing(KDialogBase::spacingHint()); + hBox->addWidget(m_inAllBasketsButton); + + m_data = new FilterData(); // TODO: Not a pointer! and return a const & !! + +// connect( &m_blinkTimer, SIGNAL(timeout()), this, SLOT(blinkBar()) ); + connect( m_resetButton, SIGNAL(clicked()), this, SLOT(reset()) ); + connect( m_lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(textChanged(const QString&)) ); + connect( m_tagsBox, SIGNAL(activated(int)), this, SLOT(tagChanged(int)) ); + +// connect( m_inAllBasketsButton, SIGNAL(clicked()), this, SLOT(inAllBaskets()) ); + connect( m_inAllBasketsButton, SIGNAL(toggled(bool)), Global::bnpView, SLOT(toggleFilterAllBaskets(bool)) ); + + connect( m_lineEdit, SIGNAL(escapePressed()), this, SIGNAL(escapePressed()) ); + connect( m_lineEdit, SIGNAL(returnPressed()), this, SIGNAL(returnPressed()) ); + connect( m_tagsBox, SIGNAL(escapePressed()), this, SIGNAL(escapePressed()) ); + connect( m_tagsBox, SIGNAL(returnPressed2()), this, SIGNAL(returnPressed()) ); +} + +FilterBar::~FilterBar() +{ +} + +void FilterBar::setFilterAll(bool filterAll) +{ + m_inAllBasketsButton->setOn(filterAll); +} + +void FilterBar::setFilterData(const FilterData &data) +{ + m_lineEdit->setText(data.string); + + int index = 0; + switch (data.tagFilterType) { + default: + case FilterData::DontCareTagsFilter: index = 0; break; + case FilterData::NotTaggedFilter: index = 1; break; + case FilterData::TaggedFilter: index = 2; break; + case FilterData::TagFilter: filterTag(data.tag); return; + case FilterData::StateFilter: filterState(data.state); return; + } + + if (m_tagsBox->currentItem() != index) { + m_tagsBox->setCurrentItem(index); + tagChanged(index); + } +} + +void FilterBar::repopulateTagsComnbo() +{ + static const int ICON_SIZE = 16; + + m_tagsBox->clear(); + m_tagsMap.clear(); + m_statesMap.clear(); + + m_tagsBox->insertItem("", 0); + m_tagsBox->insertItem(i18n("(Not tagged)"), 1); + m_tagsBox->insertItem(i18n("(Tagged)"), 2); + + int index = 3; + Tag *tag; + State *state; + QString icon; + QString text; + QPixmap emblem; + for (Tag::List::iterator it = Tag::all.begin(); it != Tag::all.end(); ++it) { + tag = *it; + state = tag->states().first(); + // Insert the tag in the combo-box: + if (tag->countStates() > 1) { + text = tag->name(); + icon = ""; + } else { + text = state->name(); + icon = state->emblem(); + } + emblem = kapp->iconLoader()->loadIcon(icon, KIcon::Desktop, ICON_SIZE, KIcon::DefaultState, 0L, /*canReturnNull=*/true); + m_tagsBox->insertItem(emblem, text, index); + // Update the mapping: + m_tagsMap.insert(index, tag); + ++index; + // Insert sub-states, if needed: + if (tag->countStates() > 1) { + for (State::List::iterator it2 = tag->states().begin(); it2 != tag->states().end(); ++it2) { + state = *it2; + // Insert the state: + text = state->name(); + icon = state->emblem(); + emblem = kapp->iconLoader()->loadIcon(icon, KIcon::Desktop, ICON_SIZE, KIcon::DefaultState, 0L, /*canReturnNull=*/true); + // Indent the emblem to show the hierarchy relation: + if (!emblem.isNull()) + emblem = Tools::indentPixmap(emblem, /*depth=*/1, /*deltaX=*/2 * ICON_SIZE / 3); + m_tagsBox->insertItem(emblem, text, index); + // Update the mapping: + m_statesMap.insert(index, state); + ++index; + } + } + } +} + +void FilterBar::reset() +{ + m_lineEdit->setText(""); // m_data->isFiltering will be set to false; + if (m_tagsBox->currentItem() != 0) { + m_tagsBox->setCurrentItem(0); + tagChanged(0); + } +} + +void FilterBar::filterTag(Tag *tag) +{ + int index = 0; + + for (QMap::Iterator it = m_tagsMap.begin(); it != m_tagsMap.end(); ++it) + if (it.data() == tag) { + index = it.key(); + break; + } + if (index <= 0) + return; + + if (m_tagsBox->currentItem() != index) { + m_tagsBox->setCurrentItem(index); + tagChanged(index); + } +} + +void FilterBar::filterState(State *state) +{ + int index = 0; + + for (QMap::Iterator it = m_statesMap.begin(); it != m_statesMap.end(); ++it) + if (it.data() == state) { + index = it.key(); + break; + } + if (index <= 0) + return; + + if (m_tagsBox->currentItem() != index) { + m_tagsBox->setCurrentItem(index); + tagChanged(index); + } +} + +void FilterBar::inAllBaskets() +{ + // TODO! +} + +void FilterBar::setEditFocus() +{ + m_lineEdit->setFocus(); +} + +bool FilterBar::hasEditFocus() +{ + return m_lineEdit->hasFocus(); +} + +const FilterData& FilterBar::filterData() +{ + return *m_data; +} + +void FilterBar::textChanged(const QString &text) +{ + m_data->string = text; + m_data->isFiltering = (!m_data->string.isEmpty() || m_data->tagFilterType != FilterData::DontCareTagsFilter); + m_resetButton->setEnabled(m_data->isFiltering); + emit newFilter(*m_data); +} + +void FilterBar::tagChanged(int index) +{ + m_data->tag = 0; + m_data->state = 0; + switch (index) { + case 0: + m_data->tagFilterType = FilterData::DontCareTagsFilter; + break; + case 1: + m_data->tagFilterType = FilterData::NotTaggedFilter; + break; + case 2: + m_data->tagFilterType = FilterData::TaggedFilter; + break; + default: + // Try to find if we are filtering a tag: + QMapIterator it = m_tagsMap.find(index); + if (it != m_tagsMap.end()) { + m_data->tagFilterType = FilterData::TagFilter; + m_data->tag = *it; + } else { + // If not, try to find if we are filtering a state: + QMapIterator it2 = m_statesMap.find(index); + if (it2 != m_statesMap.end()) { + m_data->tagFilterType = FilterData::StateFilter; + m_data->state = *it2; + } else { + // If not (should never happens), do as if the tags filter was reseted: + m_data->tagFilterType = FilterData::DontCareTagsFilter; + } + } + break; + } + m_data->isFiltering = (!m_data->string.isEmpty() || m_data->tagFilterType != FilterData::DontCareTagsFilter); + m_resetButton->setEnabled(m_data->isFiltering); + emit newFilter(*m_data); +} + +#include "filter.moc" diff --git a/src/filter.h b/src/filter.h new file mode 100644 index 0000000..56bea49 --- /dev/null +++ b/src/filter.h @@ -0,0 +1,93 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FILTER_H +#define FILTER_H + +#include +#include + +#include "focusedwidgets.h" + +class QToolButton; + +class Tag; +class State; + +/** The structure that contain all filter terms + * @author Sébastien Laoût + */ +class FilterData +{ + public: + // Useful Enum for tagFilterType: + enum TagFilterType { DontCareTagsFilter = 0, NotTaggedFilter, TaggedFilter, TagFilter, StateFilter }; + // Constructor and Destructor: + FilterData() { isFiltering = false; tagFilterType = DontCareTagsFilter; tag = 0; state = 0; } + ~FilterData() {} + // Filter data: + QString string; + int tagFilterType; + Tag *tag; + State *state; + bool isFiltering; +}; + +/** A QWidget that allow user to enter terms to filter in a Basket. + * @author Sébastien Laoût + */ +class FilterBar : public QWidget +{ + Q_OBJECT + public: + FilterBar(QWidget *parent = 0, const char *name = 0); + ~FilterBar(); + const FilterData& filterData(); + signals: + void newFilter(const FilterData &data); + void escapePressed(); + void returnPressed(); + public slots: + void repopulateTagsComnbo(); + void reset(); + void inAllBaskets(); + void setEditFocus(); + void filterTag(Tag *tag); + void filterState(State *state); + void setFilterAll(bool filterAll); + void setFilterData(const FilterData &data); + public: + bool hasEditFocus(); + KLineEdit* lineEdit() { return m_lineEdit; } + private slots: + void textChanged(const QString &text); + void tagChanged(int index); + private: + FilterData *m_data; + FocusedLineEdit *m_lineEdit; + QToolButton *m_resetButton; + FocusedComboBox *m_tagsBox; + QToolButton *m_inAllBasketsButton; + + QMap m_tagsMap; + QMap m_statesMap; +}; + +#endif // FILTER_H diff --git a/src/focusedwidgets.cpp b/src/focusedwidgets.cpp new file mode 100644 index 0000000..05c8b84 --- /dev/null +++ b/src/focusedwidgets.cpp @@ -0,0 +1,295 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include + +#include + +#include "focusedwidgets.h" +#include "bnpview.h" +#include "global.h" +#include "basket.h" + +#ifdef KeyPress +#undef KeyPress +#endif +#include + +/** class FocusedTextEdit */ + +FocusedTextEdit::FocusedTextEdit(bool disableUpdatesOnKeyPress, QWidget *parent, const char *name) + : KTextEdit(parent, name), + m_disableUpdatesOnKeyPress(disableUpdatesOnKeyPress) +{ + setWFlags(Qt::WNoAutoErase); // Does not work, we still need the disableUpdatesOnKeyPress hack! +} + +FocusedTextEdit::~FocusedTextEdit() +{ +} + +/** + * Thanks to alex.theel@gmx.net, author of TuxCards + * Code copied from tuxcards-1.2/src/gui/editor/editor.cpp + * + *** + * Override the regular paste() methode, so that lines are + * not separated by each other with an blank line. + */ +void FocusedTextEdit::paste() +{ + adaptClipboardText(QClipboard::Selection); + adaptClipboardText(QClipboard::Clipboard); + + // If we paste a application/x-qrichtext content starting with a "-" or a "*", + // then auto-bulletting will crash. + // So we insert a space to be sure what we paste will not trigger the auto-bulleting. + +// enum AutoFormatting { AutoNone = 0, AutoBulletList = 0x00000001, AutoAll = 0xffffffff } +// uint oldAutoFormating = autoFormatting(); +// setAutoFormatting(AutoNone); + + QClipboard *clipboard = QApplication::clipboard(); + int paragraph; + int index; + getCursorPosition(¶graph, &index); + + bool preventAutoBullet = (index == 0) && + (clipboard->data(QClipboard::Selection)->provides("application/x-qrichtext") || + clipboard->data(QClipboard::Clipboard)->provides("application/x-qrichtext") ); + + if (preventAutoBullet) + insert(" "); + + KTextEdit::paste(); + + if (preventAutoBullet) { + int paragraph2; + int index2; + getCursorPosition(¶graph2, &index2); + setSelection(paragraph, index, paragraph, index + 1); + removeSelectedText(); + if (paragraph == paragraph2) // We removed one character in that paragraph, so we should move the cursor back to old position... minus one character + index2--; + setCursorPosition(paragraph2, index2); + } + + +// setAutoFormatting(oldAutoFormating); +} + +/** + * Thanks to alex.theel@gmx.net, author of TuxCards + * Code copied from tuxcards-1.2/src/gui/editor/editor.cpp + * + *** + * Auxiliar method that takes the text from the clipboard - using the + * specified 'mode' -, replaces all '\n' within that text and writes + * it back to the clipboard. + */ +void FocusedTextEdit::adaptClipboardText(QClipboard::Mode mode) +{ + QClipboard *clipboard = QApplication::clipboard(); + if (!clipboard) + return; + + if ( (textFormat() == Qt::RichText) && (!clipboard->data(mode)->provides("application/x-qrichtext")) ) { + QString text = clipboard->text(mode); + if (text) { + text = text.replace("\n", QChar(0x2028)); + clipboard->setText(text, mode); + } + } +} + + +QTextCursor* FocusedTextEdit::textCursor() const +{ + return KTextEdit::textCursor(); +} + + +void FocusedTextEdit::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) { + emit escapePressed(); + return; + // In RichTextFormat mode, [Return] create a new paragraphe. + // To keep consistency with TextFormat mode (new line on [Return]), + // we redirect [Return] to simulate [Ctrl+Return] (create a new line in both modes). + // Create new paragraphes still possible in RichTextFormat mode with [Shift+Enter]. + } else if (event->key() == Qt::Key_Return && event->state() == 0) + event = new QKeyEvent(QEvent::KeyPress, event->key(), event->ascii(), Qt::ControlButton, + event->text(), event->isAutoRepeat(), event->count() ); + else if (event->key() == Qt::Key_Return && event->state() & Qt::ControlButton) + event = new QKeyEvent(QEvent::KeyPress, event->key(), event->ascii(), Qt::ShiftButton, + event->text(), event->isAutoRepeat(), event->count() ); + + if (m_disableUpdatesOnKeyPress) + setUpdatesEnabled(false); + KTextEdit::keyPressEvent(event); + // Workarround (for ensuring the cursor to be visible): signal not emited when pressing those keys: + if (event->key() == Qt::Key_Home || event->key() == Qt::Key_End || event->key() == Qt::Key_PageUp || event->key() == Qt::Key_PageDown) { + int para; + int index; + getCursorPosition(¶, &index); + emit cursorPositionChanged(para, index); + } + if (m_disableUpdatesOnKeyPress) { + setUpdatesEnabled(true); + if (text().isEmpty()) + ;// emit textChanged(); // TODO: DOESN'T WORK: the editor is not resized down to only one line of text + else + ensureCursorVisible(); + updateContents(); + } +} + +void FocusedTextEdit::wheelEvent(QWheelEvent *event) +{ + if (event->delta() > 0 && contentsY() > 0) { + KTextEdit::wheelEvent(event); + return; + } else if (event->delta() < 0 && contentsY() + visibleHeight() < contentsHeight()) { + KTextEdit::wheelEvent(event); + return; + } else + Global::bnpView->currentBasket()->wheelEvent(event); +} + +void FocusedTextEdit::enterEvent(QEvent *event) +{ + emit mouseEntered(); + KTextEdit::enterEvent(event); +} + +QPopupMenu* FocusedTextEdit::createPopupMenu(const QPoint &pos) +{ + QPopupMenu *menu = KTextEdit::createPopupMenu(pos); + + int index = 0; + int id = 0; + while (true) { + id = menu->idAt(index); + if (id == -1) + break; + // Disable Spell Check for rich text editors, because it doesn't work anyway: + if (textFormat() == Qt::RichText && (menu->text(id) == i18n("Auto Spell Check") || menu->text(id) == i18n("Check Spelling..."))) + menu->setItemEnabled(id, false); + // Always enable tabulations!: + if (menu->text(id) == i18n("Allow Tabulations")) + menu->setItemEnabled(id, false); + index++; + } + + // And return the menu: + return menu; +} + +/** class FocusedColorCombo: */ + +FocusedColorCombo::FocusedColorCombo(QWidget *parent, const char *name) + : KColorCombo(parent, name) +{ +} + +FocusedColorCombo::~FocusedColorCombo() +{ +} + +void FocusedColorCombo::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + emit escapePressed(); + else if (event->key() == Qt::Key_Return) + emit returnPressed2(); + else + KColorCombo::keyPressEvent(event); +} + +/** class FocusedFontCombo: */ + +FocusedFontCombo::FocusedFontCombo(QWidget *parent, const char *name) + : KFontCombo(parent, name) +{ +} + +FocusedFontCombo::~FocusedFontCombo() +{ +} + +void FocusedFontCombo::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + emit escapePressed(); + else if (event->key() == Qt::Key_Return) + emit returnPressed2(); + else + KFontCombo::keyPressEvent(event); +} + +/** class FocusedComboBox: */ + +FocusedComboBox::FocusedComboBox(QWidget *parent, const char *name) + : KComboBox(parent, name) +{ +} + +FocusedComboBox::~FocusedComboBox() +{ +} + +void FocusedComboBox::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + emit escapePressed(); + else if (event->key() == Qt::Key_Return) + emit returnPressed2(); + else + KComboBox::keyPressEvent(event); +} + +/** class FocusedLineEdit: */ + +FocusedLineEdit::FocusedLineEdit(QWidget *parent, const char *name) + : KLineEdit(parent, name) +{ +} + +FocusedLineEdit::~FocusedLineEdit() +{ +} + +void FocusedLineEdit::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + emit escapePressed(); + else + KLineEdit::keyPressEvent(event); +} + +void FocusedLineEdit::enterEvent(QEvent *event) +{ + emit mouseEntered(); + KLineEdit::enterEvent(event); +} + +#include "focusedwidgets.moc" diff --git a/src/focusedwidgets.h b/src/focusedwidgets.h new file mode 100644 index 0000000..4d1bfcb --- /dev/null +++ b/src/focusedwidgets.h @@ -0,0 +1,110 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FOCUSEDWIDGETS_H +#define FOCUSEDWIDGETS_H + +#include +#include +#include +#include +#include +#include +#include + +class FocusedTextEdit : public KTextEdit +{ + Q_OBJECT + public: + FocusedTextEdit(bool disableUpdatesOnKeyPress, QWidget *parent = 0, const char *name = 0); + ~FocusedTextEdit(); + void paste(); + QTextCursor* textCursor() const; + protected: + void adaptClipboardText(QClipboard::Mode mode); + void keyPressEvent(QKeyEvent *event); + void wheelEvent(QWheelEvent *event); + void enterEvent(QEvent *event); + QPopupMenu* createPopupMenu(const QPoint &pos); + signals: + void escapePressed(); + void mouseEntered(); + private: + bool m_disableUpdatesOnKeyPress; +}; + +// TODO: Rename to EscapableKColorCombo +class FocusedColorCombo : public KColorCombo +{ + Q_OBJECT + public: + FocusedColorCombo(QWidget *parent = 0, const char *name = 0); + ~FocusedColorCombo(); + protected: + void keyPressEvent(QKeyEvent *event); + signals: + void escapePressed(); + void returnPressed2(); +}; + +// TODO: Rename to EscapableKFontCombo +class FocusedFontCombo : public KFontCombo +{ + Q_OBJECT + public: + FocusedFontCombo(QWidget *parent = 0, const char *name = 0); + ~FocusedFontCombo(); + protected: + void keyPressEvent(QKeyEvent *event); + signals: + void escapePressed(); + void returnPressed2(); +}; + +// TODO: Rename to EscapableKComboBox +class FocusedComboBox : public KComboBox +{ + Q_OBJECT + public: + FocusedComboBox(QWidget *parent = 0, const char *name = 0); + ~FocusedComboBox(); + protected: + void keyPressEvent(QKeyEvent *event); + signals: + void escapePressed(); + void returnPressed2(); +}; + +// TODO: Rename to EscapableKLineEdit +class FocusedLineEdit : public KLineEdit +{ + Q_OBJECT + public: + FocusedLineEdit(QWidget *parent = 0, const char *name = 0); + ~FocusedLineEdit(); + protected: + void keyPressEvent(QKeyEvent *event); + void enterEvent(QEvent *event); + signals: + void escapePressed(); + void mouseEntered(); +}; + +#endif // FOCUSEDWIDGETS_H diff --git a/src/formatimporter.cpp b/src/formatimporter.cpp new file mode 100644 index 0000000..c98ad38 --- /dev/null +++ b/src/formatimporter.cpp @@ -0,0 +1,307 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "formatimporter.h" +#include "notecontent.h" +#include "notefactory.h" +#include "bnpview.h" +#include "basket.h" +#include "global.h" +#include "xmlwork.h" +#include "tools.h" + +bool FormatImporter::shouldImportBaskets() +{ + // We should import if the application have not successfully loaded any basket... + if (Global::bnpView->firstListViewItem()) + return false; + + // ... And there is at least one folder in the save folder, with a ".basket" file inside that folder. + QDir dir(Global::savesFolder(), QString::null, QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoSymLinks); + QStringList list = dir.entryList(); + for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) + if (*it != "." && *it != ".." && dir.exists(Global::savesFolder() + *it + "/.basket")) + return true; + + return false; +} + +void FormatImporter::copyFolder(const QString &folder, const QString &newFolder) +{ + copyFinished = false; + KIO::CopyJob *copyJob = KIO::copyAs(KURL(folder), KURL(newFolder), /*showProgressInfo=*/false); + connect( copyJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotCopyingDone(KIO::Job*)) ); + while (!copyFinished) + kapp->processEvents(); +} + +void FormatImporter::moveFolder(const QString &folder, const QString &newFolder) +{ + copyFinished = false; + KIO::CopyJob *copyJob = KIO::moveAs(KURL(folder), KURL(newFolder), /*showProgressInfo=*/false); + connect( copyJob, SIGNAL(result(KIO::Job*)), this, SLOT(slotCopyingDone(KIO::Job*)) ); + while (!copyFinished) + kapp->processEvents(); +} + +void FormatImporter::slotCopyingDone(KIO::Job *) +{ +// std::cout << "Copy finished of " + from.path() + " to " + to.path() << std::endl; + copyFinished = true; +} + +void FormatImporter::importBaskets() +{ + std::cout << "Import Baskets: Preparing..." << std::endl; + + // Some preliminary preparations (create the destination folders and the basket tree file): + QDir dirPrep; + dirPrep.mkdir(Global::savesFolder()); + dirPrep.mkdir(Global::basketsFolder()); + QDomDocument document("basketTree"); + QDomElement root = document.createElement("basketTree"); + document.appendChild(root); + + // First up, establish a list of every baskets, ensure the old order (if any), and count them. + QStringList baskets; + + // Read the 0.5.0 baskets order: + QDomDocument *doc = XMLWork::openFile("container", Global::savesFolder() + "container.baskets"); + if (doc != 0) { + QDomElement docElem = doc->documentElement(); + QDomElement basketsElem = XMLWork::getElement(docElem, "baskets"); + QDomNode n = basketsElem.firstChild(); + while (!n.isNull()) { + QDomElement e = n.toElement(); + if ((!e.isNull()) && e.tagName() == "basket") + baskets.append(e.text()); + n = n.nextSibling(); + } + } + + // Then load the baskets that weren't loaded (import < 0.5.0 ones): + QDir dir(Global::savesFolder(), QString::null, QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoSymLinks); + QStringList list = dir.entryList(); + if (list.count() > 2) // Pass "." and ".." + for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) // For each folder + if (*it != "." && *it != ".." && dir.exists(Global::savesFolder() + *it + "/.basket")) // If it can be a basket folder + if ( baskets.find((*it) + "/") == baskets.end() && + baskets.find(*it) == baskets.end() ) // And if it is not already in the imported baskets list + baskets.append(*it); + + std::cout << "Import Baskets: Found " << baskets.count() << " baskets to import." << std::endl; + + // Import every baskets: + int i = 0; + for (QStringList::iterator it = baskets.begin(); it != baskets.end(); ++it) { + ++i; + std::cout << "Import Baskets: Importing basket " << i << " of " << baskets.count() << "..." << std::endl; + + // Move the folder to the new repository (normal basket) or copy the folder (mirorred folder): + QString folderName = *it; + if (folderName.startsWith("/")) { // It was a folder mirror: + KMessageBox::information(0, i18n("

      Folder mirroring is not possible anymore (see basket.kde.org for more information).

      " + "

      The folder %1 has been copied for the basket needs. You can either delete this folder or delete the basket, or use both. But remember that " + "modifying one will not modify the other anymore as they are now separate entities.

      ").arg(folderName), i18n("Folder Mirror Import"), + "", KMessageBox::AllowLink); + // Also modify folderName to be only the folder name and not the full path anymore: + QString newFolderName = folderName; + if (newFolderName.endsWith("/")) + newFolderName = newFolderName.left(newFolderName.length() - 1); + newFolderName = newFolderName.mid(newFolderName.findRev('/') + 1); + newFolderName = Tools::fileNameForNewFile(newFolderName, Global::basketsFolder()); + FormatImporter f; + f.copyFolder(folderName, Global::basketsFolder() + newFolderName); + folderName = newFolderName; + } else + dir.rename(Global::savesFolder() + folderName, Global::basketsFolder() + folderName); // Move the folder + + // Import the basket structure file and get the properties (to add them in the tree basket-properties cache): + QDomElement properties = importBasket(folderName); + + // Add it to the XML document: + QDomElement basketElement = document.createElement("basket"); + root.appendChild(basketElement); + basketElement.setAttribute("folderName", folderName); + basketElement.appendChild(properties); + } + + // Finalize (write to disk and delete now useless files): + std::cout << "Import Baskets: Finalizing..." << std::endl; + + QFile file(Global::basketsFolder() + "baskets.xml"); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + QString xml = document.toString(); + stream << "\n"; + stream << xml; + file.close(); + } + + Tools::deleteRecursively(Global::savesFolder() + ".tmp"); + dir.remove(Global::savesFolder() + "container.baskets"); + + std::cout << "Import Baskets: Finished." << std::endl; +} + +QDomElement FormatImporter::importBasket(const QString &folderName) +{ + // Load the XML file: + QDomDocument *document = XMLWork::openFile("basket", Global::basketsFolder() + folderName + "/.basket"); + if (!document) { + std::cout << "Import Baskets: Failed to read the basket file!" << std::endl; + return QDomElement(); + } + QDomElement docElem = document->documentElement(); + + // Import properties (change to , and figure out if is a checklist or not): + QDomElement properties = XMLWork::getElement(docElem, "properties"); + QDomElement background = XMLWork::getElement(properties, "background"); + QColor backgroundColor = QColor(background.attribute("color")); + if (backgroundColor.isValid() && (backgroundColor != KGlobalSettings::baseColor())) { // Use the default color if it was already that color: + QDomElement appearance = document->createElement("appearance"); + appearance.setAttribute("backgroundColor", backgroundColor.name()); + properties.appendChild(appearance); + } + QDomElement disposition = document->createElement("disposition"); + disposition.setAttribute("mindMap", "false"); + disposition.setAttribute("columnCount", "1"); + disposition.setAttribute("free", "false"); + bool isCheckList = XMLWork::trueOrFalse( XMLWork::getElementText(properties, "showCheckBoxes", false) ); + + // Insert all notes in a group (column): 1/ rename "items" to "group", 2/ add "notes" to root, 3/ move "group" into "notes" + QDomElement column = XMLWork::getElement(docElem, "items"); + column.setTagName("group"); + QDomElement notes = document->createElement("notes"); + notes.appendChild(column); + docElem.appendChild(notes); + + // Import notes from older representations: + QDomNode n = column.firstChild(); + while ( ! n.isNull() ) { + QDomElement e = n.toElement(); + if (!e.isNull()) { + e.setTagName("note"); + QDomElement content = XMLWork::getElement(e, "content"); + // Add Check tag: + if (isCheckList) { + bool isChecked = XMLWork::trueOrFalse(e.attribute("checked", "false")); + XMLWork::addElement(*document, e, "tags", (isChecked ? "todo_done" : "todo_unchecked")); + } + // Import annotations as folded groups: + QDomElement parentE = column; + QString annotations = XMLWork::getElementText(e, "annotations", ""); + if (!annotations.isEmpty()) { + QDomElement annotGroup = document->createElement("group"); + column.insertBefore(annotGroup, e); + annotGroup.setAttribute("folded", "true"); + annotGroup.appendChild(e); + parentE = annotGroup; + // Create the text note and add it to the DOM tree: + QDomElement annotNote = document->createElement("note"); + annotNote.setAttribute("type", "text"); + annotGroup.appendChild(annotNote); + QString annotFileName = Tools::fileNameForNewFile("annotations1.txt", Basket::fullPathForFolderName(folderName)); + QString annotFullPath = Basket::fullPathForFolderName(folderName) + "/" + annotFileName; + QFile file(annotFullPath); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream << annotations; + file.close(); + } + XMLWork::addElement(*document, annotNote, "content", annotFileName); + n = annotGroup; + } + // Import Launchers from 0.3.x, 0.4.0 and 0.5.0-alphas: + QString runCommand = e.attribute("runcommand"); // Keep compatibility with 0.4.0 and 0.5.0-alphas versions + runCommand = XMLWork::getElementText(e, "action", runCommand); // Keep compatibility with 0.3.x versions + if ( ! runCommand.isEmpty() ) { // An import should be done + // Prepare the launcher note: + QString title = content.attribute("title", ""); + QString icon = content.attribute("icon", ""); + if (title.isEmpty()) title = runCommand; + if (icon.isEmpty()) icon = NoteFactory::iconForCommand(runCommand); + // Import the launcher note: + // Adapted version of "QString launcherName = NoteFactory::createNoteLauncherFile(runCommand, title, icon, this)": + QString launcherContent = QString( + "[Desktop Entry]\n" + "Exec=%1\n" + "Name=%2\n" + "Icon=%3\n" + "Encoding=UTF-8\n" + "Type=Application\n").arg(runCommand, title, icon.isEmpty() ? QString("exec") : icon); + QString launcherFileName = Tools::fileNameForNewFile("launcher.desktop", Global::basketsFolder() + folderName /*+ "/"*/); + QString launcherFullPath = Global::basketsFolder() + folderName /*+ "/"*/ + launcherFileName; + QFile file(launcherFullPath); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + stream << launcherContent; + file.close(); + } + // Add the element to the DOM: + QDomElement launcherElem = document->createElement("note"); + parentE.insertBefore(launcherElem, e); + launcherElem.setAttribute("type", "launcher"); + XMLWork::addElement(*document, launcherElem, "content", launcherFileName); + } + // Import unknown ns to 0.6.0: + if (e.attribute("type") == "unknow") + e.setAttribute("type", "unknown"); + // Import links from version < 0.5.0: + if (!content.attribute("autotitle").isEmpty() && content.attribute("autoTitle").isEmpty()) + content.setAttribute("autoTitle", content.attribute("autotitle")); + if (!content.attribute("autoicon").isEmpty() && content.attribute("autoIcon").isEmpty()) + content.setAttribute("autoIcon", content.attribute("autoicon")); + } + n = n.nextSibling(); + } + + // Save the resulting XML file: + QFile file(Global::basketsFolder() + folderName + "/.basket"); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); +// QString xml = document->toString(); +// stream << "\n"; +// stream << xml; + stream << document->toString(); // Document is ALREADY using UTF-8 + file.close(); + } else + std::cout << "Import Baskets: Failed to save the basket file!" << std::endl; + + // Return the newly created properties (to put in the basket tree): + return properties; +} + +#include "formatimporter.moc" diff --git a/src/formatimporter.h b/src/formatimporter.h new file mode 100644 index 0000000..18c8af8 --- /dev/null +++ b/src/formatimporter.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FORMATIMPORTER_H +#define FORMATIMPORTER_H + +#include +//#include +#include + +namespace KIO { + class Job; +} + +/** + * @author S�astien Laot + */ +class FormatImporter : QObject +{ + Q_OBJECT + public: + static bool shouldImportBaskets(); + static void importBaskets(); + static QDomElement importBasket(const QString &folderName); + + void copyFolder(const QString &folder, const QString &newFolder); + void moveFolder(const QString &folder, const QString &newFolder); + private slots: + void slotCopyingDone(KIO::Job*); + private: + bool copyFinished; +}; + +#endif // FORMATIMPORTER_H diff --git a/src/global.cpp b/src/global.cpp new file mode 100644 index 0000000..7645248 --- /dev/null +++ b/src/global.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "global.h" +#include "bnpview.h" +#include "settings.h" + +/** Define initial values for global variables : */ + +QString Global::s_customSavesFolder = ""; +LikeBack *Global::likeBack = 0L; +DebugWindow *Global::debugWindow = 0L; +BackgroundManager *Global::backgroundManager = 0L; +SystemTray *Global::systemTray = 0L; +BNPView *Global::bnpView = 0L; +KGlobalAccel *Global::globalAccel = 0L; +KConfig *Global::basketConfig = 0L; +AboutData Global::basketAbout; + +void Global::setCustomSavesFolder(const QString &folder) +{ + s_customSavesFolder = folder; +} + +#include +QString Global::savesFolder() +{ + static QString *folder = 0L; // Memorize the folder to do not have to re-compute it each time it's needed + + if (folder == 0L) { // Initialize it if not yet done + if (!s_customSavesFolder.isEmpty()) { // Passed by command line (for development & debug purpose) + QDir dir; + dir.mkdir(s_customSavesFolder); + folder = new QString(s_customSavesFolder.endsWith("/") ? s_customSavesFolder : s_customSavesFolder + "/"); + } else if (!Settings::dataFolder().isEmpty()) { // Set by config option (in Basket -> Backup & Restore) + QDir dir; + dir.mkdir(s_customSavesFolder); + folder = new QString(Settings::dataFolder().endsWith("/") ? Settings::dataFolder() : Settings::dataFolder() + "/"); + } else { // The default path (should be that for most computers) + folder = new QString(KGlobal::dirs()->saveLocation("data", "basket/")); + } + } + + return *folder; +} + +QString Global::basketsFolder() { return savesFolder() + "baskets/"; } +QString Global::backgroundsFolder() { return savesFolder() + "backgrounds/"; } +QString Global::templatesFolder() { return savesFolder() + "templates/"; } +QString Global::tempCutFolder() { return savesFolder() + "temp-cut/"; } + +QString Global::openNoteIcon() // FIXME: Now an edit icon +{ + return Global::bnpView->m_actEditNote->icon(); +} + +KMainWindow* Global::mainWindow() +{ + QWidget* res = kapp->mainWidget(); + + if(res && res->inherits("KMainWindow")) + { + return static_cast(res); + } + return 0; +} + +KConfig* Global::config() +{ + if(!Global::basketConfig) + Global::basketConfig = KSharedConfig::openConfig("basketrc"); + return Global::basketConfig; +} diff --git a/src/global.h b/src/global.h new file mode 100644 index 0000000..6337358 --- /dev/null +++ b/src/global.h @@ -0,0 +1,71 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef GLOBAL_H +#define GLOBAL_H + +#include +#include "aboutdata.h" + +class LikeBack; +class DebugWindow; +class BackgroundManager; +class SystemTray; +class BNPView; +class KGlobalAccel; +class KMainWindow; +class KAboutData; + +/** Handle all global variables of the application. + * This file only declare classes : developer should include + * the .h files of variables he use. + * @author S�astien Laot + */ +class Global +{ + private: + static QString s_customSavesFolder; + public: + // Global Variables: + static LikeBack *likeBack; + static DebugWindow *debugWindow; + static BackgroundManager *backgroundManager; + static SystemTray *systemTray; + static BNPView *bnpView; + static KGlobalAccel *globalAccel; + static KConfig *basketConfig; + static AboutData basketAbout; + + // Application Folders: + static void setCustomSavesFolder(const QString &folder); + static QString savesFolder(); /// << @return e.g. "/home/username/.kde/share/apps/basket/". + static QString basketsFolder(); /// << @return e.g. "/home/username/.kde/share/apps/basket/baskets/". + static QString backgroundsFolder(); /// << @return e.g. "/home/username/.kde/share/apps/basket/backgrounds/". + static QString templatesFolder(); /// << @return e.g. "/home/username/.kde/share/apps/basket/templates/". + static QString tempCutFolder(); /// << @return e.g. "/home/username/.kde/share/apps/basket/temp-cut/". (was ".tmp/") + + // Various Things: + static QString openNoteIcon(); /// << @return the icon used for the "Open" action on notes. + static KMainWindow* mainWindow(); + static KConfig* config(); + static KAboutData* about() { return &basketAbout; }; +}; + +#endif // GLOBAL_H diff --git a/src/htmlexporter.cpp b/src/htmlexporter.cpp new file mode 100644 index 0000000..9e41d35 --- /dev/null +++ b/src/htmlexporter.cpp @@ -0,0 +1,560 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "htmlexporter.h" +#include "bnpview.h" +#include "basketlistview.h" +#include "basket.h" +#include "note.h" +#include "tools.h" +#include "config.h" +#include "tag.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +HTMLExporter::HTMLExporter(Basket *basket) +{ + QDir dir; + + // Compute a default file name & path: + KConfig *config = KGlobal::config(); + config->setGroup("Export to HTML"); + QString folder = config->readEntry("lastFolder", QDir::homeDirPath()) + "/"; + QString url = folder + QString(basket->basketName()).replace("/", "_") + ".html"; + + // Ask a file name & path to the user: + QString filter = "*.html *.htm|" + i18n("HTML Documents") + "\n*|" + i18n("All Files"); + QString destination = url; + for (bool askAgain = true; askAgain; ) { + // Ask: + destination = KFileDialog::getSaveFileName(destination, filter, 0, i18n("Export to HTML")); + // User canceled? + if (destination.isEmpty()) + return; + // File already existing? Ask for overriding: + if (dir.exists(destination)) { + int result = KMessageBox::questionYesNoCancel( + 0, + "" + i18n("The file %1 already exists. Do you really want to override it?") + .arg(KURL(destination).fileName()), + i18n("Override File?"), + KGuiItem(i18n("&Override"), "filesave") + ); + if (result == KMessageBox::Cancel) + return; + else if (result == KMessageBox::Yes) + askAgain = false; + } else + askAgain = false; + } + + // Create the progress dialog that will always be shown during the export: + KProgressDialog dialog(0, 0, i18n("Export to HTML"), i18n("Exporting to HTML. Please wait..."), /*Not modal, for password dialogs!*/false); + dialog.showCancelButton(false); + dialog.setAutoClose(true); + dialog.show(); + progress = dialog.progressBar(); + + // Remember the last folder used for HTML exporation: + config->writeEntry("lastFolder", KURL(destination).directory()); + config->sync(); + + prepareExport(basket, destination); + exportBasket(basket, /*isSubBasket*/false); + + progress->advance(1); // Finishing finished +} + +HTMLExporter::~HTMLExporter() +{ +} + +void HTMLExporter::prepareExport(Basket *basket, const QString &fullPath) +{ + progress->setTotalSteps(/*Preparation:*/1 + /*Finishing:*/1 + /*Basket:*/1 + /*SubBaskets:*/Global::bnpView->basketCount(Global::bnpView->listViewItemForBasket(basket))); + progress->setValue(0); + kapp->processEvents(); + + // Remember the file path choosen by the user: + filePath = fullPath; + fileName = KURL(fullPath).fileName(); + exportedBasket = basket; + + BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket); + withBasketTree = (item->firstChild() != 0); + + // Create and empty the files folder: + QString filesFolderPath = i18n("HTML export folder (files)", "%1_files").arg(filePath) + "/"; // eg.: "/home/seb/foo.html_files/" + Tools::deleteRecursively(filesFolderPath); + QDir dir; + dir.mkdir(filesFolderPath); + + // Create sub-folders: + iconsFolderPath = filesFolderPath + i18n("HTML export folder (icons)", "icons") + "/"; // eg.: "/home/seb/foo.html_files/icons/" + imagesFolderPath = filesFolderPath + i18n("HTML export folder (images)", "images") + "/"; // eg.: "/home/seb/foo.html_files/images/" + basketsFolderPath = filesFolderPath + i18n("HTML export folder (baskets)", "baskets") + "/"; // eg.: "/home/seb/foo.html_files/baskets/" + dir.mkdir(iconsFolderPath); + dir.mkdir(imagesFolderPath); + dir.mkdir(basketsFolderPath); + + progress->advance(1); // Preparation finished +} + +#include + +void HTMLExporter::exportBasket(Basket *basket, bool isSubBasket) +{ + if (!basket->isLoaded()) { + basket->load(); + } + + // Compute the absolute & relative paths for this basket: + filesFolderPath = i18n("HTML export folder (files)", "%1_files").arg(filePath) + "/"; + if (isSubBasket) { + basketFilePath = basketsFolderPath + basket->folderName().left(basket->folderName().length() - 1) + ".html"; + filesFolderName = "../"; + dataFolderName = basket->folderName().left(basket->folderName().length() - 1) + "-" + i18n("HTML export folder (data)", "data") + "/"; + dataFolderPath = basketsFolderPath + dataFolderName; + basketsFolderName = ""; + } else { + basketFilePath = filePath; + filesFolderName = i18n("HTML export folder (files)", "%1_files").arg(KURL(filePath).fileName()) + "/"; + dataFolderName = filesFolderName + i18n("HTML export folder (data)", "data") + "/"; + dataFolderPath = filesFolderPath + i18n("HTML export folder (data)", "data") + "/"; + basketsFolderName = filesFolderName + i18n("HTML export folder (baskets)", "baskets") + "/"; + } + iconsFolderName = (isSubBasket ? "../" : filesFolderName) + i18n("HTML export folder (icons)", "icons") + "/"; // eg.: "foo.html_files/icons/" or "../icons/" + imagesFolderName = (isSubBasket ? "../" : filesFolderName) + i18n("HTML export folder (images)", "images") + "/"; // eg.: "foo.html_files/images/" or "../images/" + + std::cout << "Exporting ================================================" << std::endl; + std::cout << " filePath:" << filePath << std::endl; + std::cout << " basketFilePath:" << basketFilePath << std::endl; + std::cout << " filesFolderPath:" << filesFolderPath << std::endl; + std::cout << " filesFolderName:" << filesFolderName << std::endl; + std::cout << " iconsFolderPath:" << iconsFolderPath << std::endl; + std::cout << " iconsFolderName:" << iconsFolderName << std::endl; + std::cout << " imagesFolderPath:" << imagesFolderPath << std::endl; + std::cout << " imagesFolderName:" << imagesFolderName << std::endl; + std::cout << " dataFolderPath:" << dataFolderPath << std::endl; + std::cout << " dataFolderName:" << dataFolderName << std::endl; + std::cout << " basketsFolderPath:" << basketsFolderPath << std::endl; + std::cout << " basketsFolderName:" << basketsFolderName << std::endl; + + // Create the data folder for this basket: + QDir dir; + dir.mkdir(dataFolderPath); + + backgroundColorName = basket->backgroundColor().name().lower().mid(1); + + // Generate basket icons: + QString basketIcon16 = iconsFolderName + copyIcon(basket->icon(), 16); + QString basketIcon32 = iconsFolderName + copyIcon(basket->icon(), 32); + + // Generate the [+] image for groups: + QPixmap expandGroup(Note::EXPANDER_WIDTH, Note::EXPANDER_HEIGHT); + expandGroup.fill(basket->backgroundColor()); + QPainter painter(&expandGroup); + Note::drawExpander(&painter, 0, 0, basket->backgroundColor(), /*expand=*/true, basket); + painter.end(); + expandGroup.save(imagesFolderPath + "expand_group_" + backgroundColorName + ".png", "PNG"); + + // Generate the [-] image for groups: + QPixmap foldGroup(Note::EXPANDER_WIDTH, Note::EXPANDER_HEIGHT); + foldGroup.fill(basket->backgroundColor()); + painter.begin(&foldGroup); + Note::drawExpander(&painter, 0, 0, basket->backgroundColor(), /*expand=*/false, basket); + painter.end(); + foldGroup.save(imagesFolderPath + "fold_group_" + backgroundColorName + ".png", "PNG"); + + // Open the file to write: + QFile file(basketFilePath); + if (!file.open(IO_WriteOnly)) + return; + stream.setDevice(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + + // Compute the colors to draw dragient for notes: + QColor topBgColor; + QColor bottomBgColor; + Note::getGradientColors(basket->backgroundColor(), &topBgColor, &bottomBgColor); + // Compute the gradient image for notes: + QString gradientImageFileName = Basket::saveGradientBackground(basket->backgroundColor(), basket->QScrollView::font(), imagesFolderPath); + + // Output the header: + QString borderColor = Tools::mixColor(basket->backgroundColor(), basket->textColor()).name(); + stream << + "\n" + "\n" + " \n" + " \n" + " aboutData()->programName() << " " << VERSION << " http://basket.kde.org/\">\n" + " \n" + " " << Tools::textToHTMLWithoutP(basket->basketName()) << "\n" + " \n"; + // Create the column handle image: + QPixmap columnHandle(Note::RESIZER_WIDTH, 50); + painter.begin(&columnHandle); + Note::drawInactiveResizer(&painter, 0, 0, columnHandle.height(), basket->backgroundColor(), /*column=*/true); + painter.end(); + columnHandle.save(imagesFolderPath + "column_handle_" + backgroundColorName + ".png", "PNG"); + + stream << + " \n" + " \n" + "

      \"\" " << Tools::textToHTMLWithoutP(basket->basketName()) << "

      \n"; + + if (withBasketTree) + writeBasketTree(basket); + + // If filtering, only export filtered notes, inform to the user: + // TODO: Filtering tags too!! + // TODO: Make sure only filtered notes are exported! +// if (decoration()->filterData().isFiltering) +// stream << +// "

      " << i18n("Notes matching the filter "%1":").arg(Tools::textToHTMLWithoutP(decoration()->filterData().string)) << "

      \n"; + + stream << + "
      \n"; + + if (basket->isColumnsLayout()) + stream << + " \n" + " \n"; + else + stream << + "
      contentsHeight() << "px; width: " << basket->contentsWidth() << "px; min-width: 100%;\">\n"; + + for (Note *note = basket->firstNote(); note; note = note->next()) + exportNote(note, /*indent=*/(basket->isFreeLayout() ? 4 : 5)); + + // Output the footer: + if (basket->isColumnsLayout()) + stream << + "
      \n" + "
      \n"; + else + stream << + "
      \n"; + stream << QString( + " \n" + "

      %1

      \n").arg( + i18n("Made with %1, a KDE tool to take notes and keep information at hand.") + .arg("%1 %2") + .arg(kapp->aboutData()->programName(), VERSION)); + + // Copy a transparent GIF image in the folder, needed for the JavaScript hack: + QString gifFileName = "spacer.gif"; + QFile transGIF(imagesFolderPath + gifFileName); + if (!transGIF.exists() && transGIF.open(IO_WriteOnly)) { + QDataStream streamGIF(&transGIF); + // This is a 1px*1px transparent GIF image: + const uchar blankGIF[] = { + 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x0a, 0x00, 0x0a, 0x00, + 0x80, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, + 0xfe, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, + 0x49, 0x4d, 0x50, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x0a, 0x00, + 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, + 0x00, 0x00, 0x02, 0x08, 0x8c, 0x8f, 0xa9, 0xcb, 0xed, 0x0f, + 0x63, 0x2b, 0x00, 0x3b }; + streamGIF.writeRawBytes((const char*)blankGIF, (unsigned int)74); + transGIF.close(); + } + stream << + " \n" + " \n" + "\n"; + + file.close(); + stream.unsetDevice(); + progress->advance(1); // Basket exportation finished + + // Recursively export child baskets: + BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket); + if (item->firstChild()) { + for (BasketListViewItem *child = (BasketListViewItem*) item->firstChild(); child; child = (BasketListViewItem*) child->nextSibling()) { + exportBasket(child->basket(), /*isSubBasket=*/true); + } + } +} + +void HTMLExporter::exportNote(Note *note, int indent) +{ + QString spaces; + + if (note->isColumn()) { + QString width = ""; + if (false/*TODO: DEBUG AND REENABLE: hasResizer()*/) { + // As we cannot be precise in CSS (say eg. "width: 50%-40px;"), + // we output a percentage that is approximatively correct. + // For instance, we compute the currently used percentage of width in the basket + // and try make make it the same on a 1024*768 display in a Web browser: + int availableSpaceForColumnsInThisBasket = note->basket()->contentsWidth() - (note->basket()->columnsCount() - 1) * Note::RESIZER_WIDTH; + int availableSpaceForColumnsInBrowser = 1024 /* typical screen width */ + - 25 /* window border and scrollbar width */ + - 2 * 5 /* page margin */ + - (note->basket()->columnsCount() - 1) * Note::RESIZER_WIDTH; + if (availableSpaceForColumnsInThisBasket <= 0) + availableSpaceForColumnsInThisBasket = 1; + int widthValue = (int)(availableSpaceForColumnsInBrowser * (double) note->groupWidth() / availableSpaceForColumnsInThisBasket); + if (widthValue <= 0) + widthValue = 1; + if (widthValue > 100) + widthValue = 100; + width = QString(" width=\"%1%\"").arg(QString::number(widthValue)); + } + stream << spaces.fill(' ', indent) << "\n"; + + // Export child notes: + for (Note *child = note->firstChild(); child; child = child->next()) { + stream << spaces.fill(' ', indent + 1); + exportNote(child, indent + 1); + stream << '\n'; + } + + stream << spaces.fill(' ', indent) << "\n"; + if (note->hasResizer()) + stream << spaces.fill(' ', indent) << "\n"; + return; + } + + QString freeStyle; + if (note->isFree()) + freeStyle = " style=\"position: absolute; left: " + QString::number(note->x()) + "px; top: " + QString::number(note->y()) + "px; width: " + QString::number(note->groupWidth()) + "px\""; + + if (note->isGroup()) { + stream << '\n' << spaces.fill(' ', indent) << "\n"; // Note content is expected to be on the same HTML line, but NOT groups + int i = 0; + for (Note *child = note->firstChild(); child; child = child->next()) { + stream << spaces.fill(' ', indent); + if (i == 0) + stream << " isFolded() ? "expand_group_" : "fold_group_") << backgroundColorName << ".png" + << "\" width=\"" << Note::EXPANDER_WIDTH << "\" height=\"" << Note::EXPANDER_HEIGHT << "\">\n"; + else if (i == 1) + stream << " countDirectChilds() << "\">\n"; + else + stream << " \n"; + stream << spaces.fill(' ', indent) << " "; + exportNote(child, indent + 3); + stream << "\n" + << spaces.fill(' ', indent) << " \n"; + ++i; + } + stream << '\n' << spaces.fill(' ', indent) << "\n" /*<< spaces.fill(' ', indent - 1)*/; + } else { + // Additionnal class for the content (link, netword, color...): + QString additionnalClasses = note->content()->cssClass(); + if (!additionnalClasses.isEmpty()) + additionnalClasses = " " + additionnalClasses; + // Assign the style of each associted tags: + for (State::List::Iterator it = note->states().begin(); it != note->states().end(); ++it) + additionnalClasses += " tag_" + (*it)->id(); + //stream << spaces.fill(' ', indent); + stream << ""; + if (note->emblemsCount() > 0) { + stream << ""; + } + stream << "
      "; + for (State::List::Iterator it = note->states().begin(); it != note->states().end(); ++it) + if (!(*it)->emblem().isEmpty()) { + int emblemSize = 16; + QString iconFileName = copyIcon((*it)->emblem(), emblemSize); + stream << "\""textEquivalent() << "\" title=\"" << (*it)->fullName() << "\">"; + } + stream << ""; + note->content()->exportToHTML(this, indent); + stream << "
      "; + } +} + +void HTMLExporter::writeBasketTree(Basket *currentBasket) +{ + stream << "
        \n"; + writeBasketTree(currentBasket, exportedBasket, 3); + stream << "
      \n"; +} + +void HTMLExporter::writeBasketTree(Basket *currentBasket, Basket *basket, int indent) +{ + // Compute variable HTML code: + QString spaces; + QString cssClass = (basket == currentBasket ? " class=\"current\"" : ""); + QString link = "#"; + if (currentBasket != basket) { + if (currentBasket == exportedBasket) { + link = basketsFolderName + basket->folderName().left(basket->folderName().length() - 1) + ".html"; + } else if (basket == exportedBasket) { + link = "../../" + fileName; + } else { + link = basket->folderName().left(basket->folderName().length() - 1) + ".html"; + } + } + QString spanStyle = ""; + if (basket->backgroundColorSetting().isValid() || basket->textColorSetting().isValid()) { + spanStyle = " style=\"background-color: " + basket->backgroundColor().name() + "; color: " + basket->textColor().name() + "\""; + } + + // Write the basket tree line: + stream << + spaces.fill(' ', indent) << "
    • " + "basketName()) << "\">" + "icon(), 16) << "\" width=\"16\" height=\"16\" alt=\"\">" << Tools::textToHTMLWithoutP(basket->basketName()) << ""; + + // Write the sub-baskets lines & end the current one: + BasketListViewItem *item = Global::bnpView->listViewItemForBasket(basket); + if (item->firstChild() != 0) { + stream << + "\n" << + spaces.fill(' ', indent) << "
        \n"; + for (BasketListViewItem *child = (BasketListViewItem*) item->firstChild(); child; child = (BasketListViewItem*) child->nextSibling()) + writeBasketTree(currentBasket, child->basket(), indent + 2); + stream << + spaces.fill(' ', indent) << "
      \n" << + spaces.fill(' ', indent) << "
    • \n"; + } else { + stream << "\n"; + } +} + +/** Save an icon to a folder. + * If an icon with the same name already exist in the destination, + * it is assumed the icon is already copied, so no action is took. + * It is optimized so that you can have an empty folder receiving the icons + * and call copyIcon() each time you encounter one during export process. + */ +QString HTMLExporter::copyIcon(const QString &iconName, int size) +{ + if (iconName.isEmpty()) + return ""; + + // Sometimes icon can be "favicons/www.kde.org", we replace the '/' with a '_' + QString fileName = iconName; // QString::replace() isn't const, so I must copy the string before + fileName = "ico" + QString::number(size) + "_" + fileName.replace("/", "_") + ".png"; + QString fullPath = iconsFolderPath + fileName; + if (!QFile::exists(fullPath)) + DesktopIcon(iconName, size).save(fullPath, "PNG"); + return fileName; +} + +/** Done: Sometimes we can call two times copyFile() with the same srcPath and dataFolderPath + * (eg. when exporting basket to HTML with two links to same filename + * (but not necesary same path, as in "/home/foo.txt" and "/foo.txt") ) + * The first copy isn't yet started, so the dest file isn't created and this method + * returns the same filename !!!!!!!!!!!!!!!!!!!! + */ +QString HTMLExporter::copyFile(const QString &srcPath, bool createIt) +{ + QString fileName = Tools::fileNameForNewFile(KURL(srcPath).fileName(), dataFolderPath); + QString fullPath = dataFolderPath + fileName; + + if (createIt) { + // We create the file to be sure another very near call to copyFile() willn't choose the same name: + QFile file(KURL(fullPath).path()); + if (file.open(IO_WriteOnly)) + file.close(); + // And then we copy the file AND overwriting the file we juste created: + new KIO::FileCopyJob( + KURL(srcPath), KURL(fullPath), 0666, /*move=*/false, + /*overwrite=*/true, /*resume=*/true, /*showProgress=*/false ); + } else + /*KIO::CopyJob *copyJob = */KIO::copy(KURL(srcPath), KURL(fullPath)); // Do it as before + + return fileName; +} diff --git a/src/htmlexporter.h b/src/htmlexporter.h new file mode 100644 index 0000000..5b75ab6 --- /dev/null +++ b/src/htmlexporter.h @@ -0,0 +1,79 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef HTMLEXPORTER_H +#define HTMLEXPORTER_H + +#include +#include + +class KProgress; + +class Basket; +class Note; + +/** + * @author Sébastien Laoût + */ +class HTMLExporter +{ + public: + HTMLExporter(Basket *basket); + ~HTMLExporter(); + private: + void prepareExport(Basket *basket, const QString &fullPath); + void exportBasket(Basket *basket, bool isSubBasket); + void exportNote(Note *note, int indent); + void writeBasketTree(Basket *currentBasket); + void writeBasketTree(Basket *currentBasket, Basket *basket, int indent); + + public: + QString copyIcon(const QString &iconName, int size); + QString copyFile(const QString &srcPath, bool createIt); + + public: + // Absolute path of the file name the user choosen: + QString filePath; // eg.: "/home/seb/foo.html" + QString fileName; // eg.: "foo.html" + + // Absolute & relative paths for the current basket to be exported: + QString basketFilePath; // eg.: "/home/seb/foo.html" or "/home/seb/foo.html_files/baskets/basketN.html" + QString filesFolderPath; // eg.: "/home/seb/foo.html_files/" + QString filesFolderName; // eg.: "foo.html_files/" or "../" + QString iconsFolderPath; // eg.: "/home/seb/foo.html_files/icons/" + QString iconsFolderName; // eg.: "foo.html_files/icons/" or "../icons/" + QString imagesFolderPath; // eg.: "/home/seb/foo.html_files/images/" + QString imagesFolderName; // eg.: "foo.html_files/images/" or "../images/" + QString dataFolderPath; // eg.: "/home/seb/foo.html_files/data/" or "/home/seb/foo.html_files/baskets/basketN-data/" + QString dataFolderName; // eg.: "foo.html_files/data/" or "basketN-data/" + QString basketsFolderPath; // eg.: "/home/seb/foo.html_files/baskets/" + QString basketsFolderName; // eg.: "foo.html_files/baskets/" or "" + + // Various properties of the currently exporting basket: + QString backgroundColorName; + + // Variables used by every export methods: + QTextStream stream; + Basket *exportedBasket; + bool withBasketTree; + KProgress *progress; +}; + +#endif // HTMLEXPORTER_H diff --git a/src/kcm_basket.cpp b/src/kcm_basket.cpp new file mode 100644 index 0000000..5c1efa6 --- /dev/null +++ b/src/kcm_basket.cpp @@ -0,0 +1,72 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +// This must be first +#include +#include "settings.h" +#include + +//---------------------------- +// KCM stuff +//---------------------------- +extern "C" +{ + KDE_EXPORT KCModule *create_basket_config_general(QWidget *parent, const char *) + { + GeneralPage *page = new GeneralPage(parent, "kcmbasket_config_general"); + return page; + } +} + +extern "C" +{ + KDE_EXPORT KCModule *create_basket_config_baskets(QWidget *parent, const char *) + { + BasketsPage *page = new BasketsPage(parent, "kcmbasket_config_baskets"); + return page; + } +} + +extern "C" +{ + KDE_EXPORT KCModule *create_basket_config_new_notes(QWidget *parent, const char *) + { + NewNotesPage *page = new NewNotesPage(parent, "kcmbasket_config_new_notes"); + return page; + } +} + +extern "C" +{ + KDE_EXPORT KCModule *create_basket_config_notes_appearance(QWidget *parent, const char *) + { + NotesAppearancePage *page = new NotesAppearancePage(parent, "kcmbasket_config_notes_appearance"); + return page; + } +} + +extern "C" +{ + KDE_EXPORT KCModule *create_basket_config_apps(QWidget *parent, const char *) + { + ApplicationsPage *page = new ApplicationsPage(parent, "kcmbasket_config_apps"); + return page; + } +} diff --git a/src/kcolorcombo2.cpp b/src/kcolorcombo2.cpp new file mode 100644 index 0000000..b5ac1e3 --- /dev/null +++ b/src/kcolorcombo2.cpp @@ -0,0 +1,769 @@ +/*************************************************************************** + * Copyright (C) 2005 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kcolorcombo2.h" + +//#include "qeffects.h" + +//#define DEBUG_COLOR_ARRAY +//#define OUTPUT_GIMP_PALETTE + +#ifdef DEBUG_COLOR_ARRAY + #include + #include +#endif +#ifdef OUTPUT_GIMP_PALETTE + #include + #include +#endif + +/** class KColorPopup: */ + +const int KColorPopup::MARGIN = 1; +const int KColorPopup::FRAME_WIDTH = 1; + + +KColorPopup::KColorPopup(KColorCombo2 *parent) + : QWidget(/*parent=*/0, /*name=*/0, WType_Popup | WNoAutoErase), + m_selector(parent) +{ + hide(); + setMouseTracking(true); + //resize(20, 20); + //setWFlags(Qt::WNoAutoErase); +} + +KColorPopup::~KColorPopup() +{ +} + +#include + +void KColorPopup::relayout() // FIXME: relayout should NOT redraw the pixmap! +{ + int columnCount = m_selector->columnCount(); + int rowCount = m_selector->rowCount(); + int colorHeight = m_selector->colorRectHeight(); + int colorWidth = m_selector->colorRectWidthForHeight(colorHeight); + bool haveDefault = m_selector->defaultColor().isValid(); + + int width = 2 + MARGIN + (colorWidth + MARGIN) * columnCount; + int height = 2 + MARGIN + (colorHeight + MARGIN) * rowCount + (colorHeight + MARGIN); + + resize(width, height); + + // Initialize the pixmap: + m_pixmap.resize(width, height); + QPainter painter(&m_pixmap); + painter.fillRect(0, 0, width, height, KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, width, height); + + // Needed to draw: + int x, y; + QRect selectionRect; + + // Draw the color array: + for (int i = 0; i < columnCount; ++i) { + for (int j = 0; j < rowCount; ++j) { + x = 1 + MARGIN + (colorWidth + MARGIN) * i; + y = 1 + MARGIN + (colorHeight + MARGIN) * j; + if (i == m_selectedColumn && j == m_selectedRow) { + selectionRect = QRect(x - 2, y - 2, colorWidth + 4, colorHeight + 4); + painter.fillRect(selectionRect, KGlobalSettings::highlightColor()); + } + m_selector->drawColorRect(painter, x, y, m_selector->colorAt(i, j), /*isDefault=*/false, colorWidth, colorHeight); + } + } + + m_columnOther = (haveDefault ? columnCount / 2 : 0); // "(Default)" is allowed, paint "Other..." on the right + int defaultCellWidth = (colorWidth + MARGIN) * m_columnOther; + int otherCellWidth = (colorWidth + MARGIN) * (columnCount - m_columnOther); + + // Draw the "(Default)" and "Other..." colors: + y = height - (colorHeight + MARGIN) - 1; + QColor textColor; + if (m_selector->defaultColor().isValid()) { + x = 1 + MARGIN; + if (m_selectedColumn < m_columnOther && rowCount == m_selectedRow) { + selectionRect = QRect(x - 2, y - 2, defaultCellWidth, colorHeight + 4); + painter.fillRect(selectionRect, KGlobalSettings::highlightColor()); + textColor = KGlobalSettings::highlightedTextColor(); + } else + textColor = KGlobalSettings::textColor(); + m_selector->drawColorRect(painter, x, y, m_selector->defaultColor(), /*isDefault=*/true, colorWidth, colorHeight); + painter.setFont(m_selector->font()); + painter.setPen(textColor); + painter.drawText(x + 2 + colorWidth, y, /*width=*/5000, colorHeight, AlignLeft | AlignVCenter | DontClip, i18n("(Default)")); + } + x = 1 + MARGIN + m_columnOther * (colorWidth + MARGIN); + if (m_selectedColumn >= m_columnOther && rowCount == m_selectedRow) { + selectionRect = QRect(x - 2, y - 2, otherCellWidth, colorHeight + 4); + painter.fillRect(selectionRect, KGlobalSettings::highlightColor()); + textColor = KGlobalSettings::highlightedTextColor(); + } else + textColor = KGlobalSettings::textColor(); + m_selector->drawColorRect(painter, x, y, m_otherColor, /*isDefault=*/false, colorWidth, colorHeight); + painter.setFont(m_selector->font()); + painter.setPen(textColor); + painter.drawText(x + 2 + colorWidth, y, /*width=*/5000, colorHeight, AlignLeft | AlignVCenter | DontClip, i18n("Other...")); + +// QPoint pos = mapFromGlobal(QCursor::pos()); +// painter.drawRect(pos.x(), pos.y(), 5000, 5000); +} + +void KColorPopup::updateCell(int column, int row) +{ + int colorHeight = m_selector->colorRectHeight(); + int colorWidth = m_selector->colorRectWidthForHeight(colorHeight); + + int x = 1 + MARGIN + - 2 + column * (colorWidth + MARGIN); + int y = 1 + MARGIN + - 2 + row * (colorHeight + MARGIN); + int width = colorWidth + MARGIN; + int height = colorHeight + MARGIN; + + if (row == m_selector->rowCount()) { + if (m_selectedColumn < m_columnOther) // The "(Default)" cell: + width = (colorWidth + MARGIN) * m_columnOther; + else // The "Other..." cell: + width = (colorWidth + MARGIN) * (m_selector->columnCount() - m_columnOther); + } + + update(x, y, width, height); +} + +void KColorPopup::doSelection() +{ + m_otherColor = QColor(); + + // If the selected color is not the default one, try to find it in the array: + if (m_selector->color().isValid()) { + bool isInArray = false; + for (int column = 0; column < m_selector->columnCount(); ++column) + for (int row = 0; row < m_selector->rowCount(); ++row) + if (m_selector->color() == m_selector->colorAt(column, row)) { + m_selectedColumn = column; + m_selectedRow = row; + isInArray = true; + } + // If not found in array, it's another one: + if (!isInArray) { + m_selectedColumn = m_columnOther; + m_selectedRow = m_selector->rowCount(); + m_otherColor = m_selector->color(); + } + // If it's the default one: + } else { + m_selectedColumn = 0; + m_selectedRow = m_selector->rowCount(); + } +} + +void KColorPopup::validate() +{ + hide(); + close(); + + if (m_selectedRow != m_selector->rowCount()) // A normal row: + m_selector->setColor(m_selector->colorAt(m_selectedColumn, m_selectedRow)); + else if (m_selectedColumn < m_columnOther) // The default color: + m_selector->setColor(QColor()); + else { // The user want to choose one: + QColor color = m_selector->effectiveColor(); + if (KColorDialog::getColor(color, this) == QDialog::Accepted) + m_selector->setColor(color); + } +} + +void KColorPopup::mousePressEvent(QMouseEvent *event) +{ + int x = event->pos().x(); + int y = event->pos().y(); + if (x < 0 || y < 0 || x >= width() || y >= height()) { + hide(); + close(); + } else + validate(); + + event->accept(); +} + +void KColorPopup::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.drawPixmap(0, 0, m_pixmap); + painter.setPen(Qt::black); + painter.drawRect(event->rect()); +} + +void KColorPopup::mouseMoveEvent(QMouseEvent *event) +{ + int x = event->pos().x(); + int y = event->pos().y(); + if (x < FRAME_WIDTH + 2 || y < FRAME_WIDTH + 2 || x > width() - 2 - 2*FRAME_WIDTH || y > height() - 2 - 2*FRAME_WIDTH) + return; + + int colorHeight = m_selector->colorRectHeight(); + int colorWidth = m_selector->colorRectWidthForHeight(colorHeight); + +// int oldSelectedColumn = m_selectedColumn; +// int oldSelectedRow = m_selectedRow; + m_selectedColumn = (x - FRAME_WIDTH - MARGIN + 2) / (colorWidth + MARGIN); + m_selectedRow = (y - FRAME_WIDTH - MARGIN + 2) / (colorHeight + MARGIN); + + relayout(); + update(); +} + +void KColorPopup::keyPressEvent(QKeyEvent *event) +{ + int column = m_selectedColumn; + int row = m_selectedRow; + int columnCount = m_selector->columnCount(); + int rowCount = m_selector->rowCount(); + + switch (event->key()) { + case Qt::Key_Right: + if (m_selectedRow != rowCount) // A normal row: + column = (column + 1) % columnCount; + else { + // The last row, if there are two choices, switch. Else, do nothing: + if (m_selector->defaultColor().isValid()) + column = (m_selectedColumn < m_columnOther ? m_columnOther : 0); + } + break; + case Qt::Key_Left: + if (m_selectedRow != rowCount) { // A normal row: + column = (column - 1); + if (column < 0) + column = columnCount - 1; + } else { + // The last row, if there are two choices, switch. Else, do nothing: + if (m_selector->defaultColor().isValid()) + column = (m_selectedColumn < m_columnOther ? m_columnOther : 0); + } + break; + case Qt::Key_Up: row = (row - 1); if (row < 0) row = rowCount; break; + case Qt::Key_Down: row = (row + 1) % (rowCount+1); break; + case Qt::Key_PageDown: row += 10; if (row > rowCount) row = rowCount; break; + case Qt::Key_PageUp: row -= 10; if (row < 0) row = 0; break; + case Qt::Key_Home: row = 0; column = 0; break; + case Qt::Key_End: row = rowCount; column = columnCount - 1; break; + case Qt::Key_Return: + validate(); + break; + default: + QWidget::keyPressEvent(event); + } + + if (row != m_selectedRow || column != m_selectedColumn) { + m_selectedRow = row; + m_selectedColumn = column; + relayout(); + update(); + } +} + +/** Helper function: */ + +QColor Tool_mixColors(const QColor &color1, const QColor &color2) +{ + QColor mixedColor; + mixedColor.setRgb( (color1.red() + color2.red()) / 2, + (color1.green() + color2.green()) / 2, + (color1.blue() + color2.blue()) / 2 ); + return mixedColor; +} + +/** class KColorCombo2Private */ + +class KColorCombo2::KColorCombo2Private +{ +}; + +/** class KColorCombo2: */ + +/* All code for the popup management (including the constructor, popup() and eventFilter()) + * has been copied from the KDateEdit widget (in libkdepim). + * + * Some other piece of code comes from KColorButton (in libkdeui) to enable color drag, drop, copy and paste. + */ + +KColorCombo2::KColorCombo2(const QColor &color, const QColor &defaultColor, QWidget *parent, const char *name) + : QComboBox(/*editable=*/false, parent, name), + m_color(color), m_defaultColor(defaultColor) +{ + init(); +} + +KColorCombo2::KColorCombo2(const QColor &color, QWidget *parent, const char *name) + : QComboBox(/*editable=*/false, parent, name), + m_color(color), m_defaultColor() +{ + init(); +} + +void KColorCombo2::init() +{ + m_discardNextMousePress = false; + m_colorArray = 0; + d = new KColorCombo2Private(); + + setDefaultColor(m_defaultColor); + insertItem("", /*index=*/0); + updateComboBox(); // It need an item of index 0 to exists, so we created it. + setAcceptDrops(true); + + m_popup = new KColorPopup(this); + m_popup->installEventFilter(this); + + // By default, the array is filled with setRainbowPreset(). + // But we allocate it on demand (the later as possible) to avoid performances issues if the developer set another array. + // However, to keep columnCount() rowCount() const, we define theme here: + m_columnCount = 13; + m_rowCount = 9; +} + +KColorCombo2::~KColorCombo2() +{ + deleteColorArray(); +} + +void KColorCombo2::setColor(const QColor &color) +{ + // Do nothing if the color should be set to the default one and there is no such default color allowed: + if (!color.isValid() && !m_defaultColor.isValid()) { + // kdebug << this::FUNCTION << "Trying to assign the default color (an invalid one) whereas no such default color is allowed"; + return; + } + + if (m_color != color) { + m_color = color; + updateComboBox(); + emit changed(color); + } +} + +QColor KColorCombo2::color() const +{ + return m_color; +} + +QColor KColorCombo2::effectiveColor() const +{ + if (m_color.isValid()) + return m_color; + else + return m_defaultColor; +} + +void KColorCombo2::setRainbowPreset(int colorColumnCount, int lightRowCount, int darkRowCount, bool withGray) +{ + // At least one row and one column: + if (colorColumnCount < 1 - (withGray ? 1 : 0)) + colorColumnCount = 1 - (withGray ? 1 : 0); + if (lightRowCount < 0) + lightRowCount = 0; + if (darkRowCount < 0) + darkRowCount = 0; + + // Create the array: + int columnCount = colorColumnCount + (withGray ? 1 : 0); + int rowCount = lightRowCount + 1 + darkRowCount; + newColorArray(columnCount, rowCount); + + // Fill the array: + for (int i = 0; i < colorColumnCount; ++i) { + int hue = i * 360 / colorColumnCount; + // With light colors: + for (int j = 1; j <= lightRowCount; ++j) { // Start to 1 because we don't want a row full of white! + int saturation = j * 255 / (lightRowCount + 1); + setColorAt(i, j - 1, QColor(hue, saturation, 255, QColor::Hsv)); + } + // With pure colors: + setColorAt(i, lightRowCount, QColor(hue, 255, 255, QColor::Hsv)); + // With dark colors: + for (int j = 1; j <= darkRowCount; ++j) { + int value = 255 - j * 255 / (darkRowCount + 1); + setColorAt(i, lightRowCount + j, QColor(hue, 255, value, QColor::Hsv)); + } + } + + // Fill the gray column: + if (withGray) { + for (int i = 0; i < rowCount; ++i) { + int gray = ( rowCount == 1 ? 128 : 255 - (i * 255 / (rowCount - 1)) ); + setColorAt(columnCount-1, i, QColor(gray, gray, gray)); + } + } + +#ifdef DEBUG_COLOR_ARRAY + std::cout << "KColorCombo2::setColorPreset" << std::endl; + for (int j = 0; j < rowCount; ++j) { + for (int i = 0; i < columnCount; ++i) { + int h, s, v; + m_colorArray[i][j].getHsv(h, s, v); + std::cout << "(" << std::setw(3) << h << "," << std::setw(3) << s << "," << std::setw(3) << v << ") "; + //std::cout << colorArray[i][j].name() << " "; + } + std::cout << std::endl; + } +#endif +#ifdef OUTPUT_GIMP_PALETTE + std::cout << "GIMP Palette" << std::endl; + for (int j = 0; j < rowCount; ++j) { + for (int i = 0; i < columnCount; ++i) { + std::cout << std::setw(3) << m_colorArray[i][j].red() << ", " << std::setw(3) << m_colorArray[i][j].green() << ", " << std::setw(3) << m_colorArray[i][j].blue() << std::endl; + } + } +#endif +} + +int KColorCombo2::columnCount() const +{ + return m_columnCount; +} + +int KColorCombo2::rowCount() const +{ + return m_rowCount; +} + +QColor KColorCombo2::colorAt(int column, int row)/* const*/ +{ + if (!m_colorArray) + setRainbowPreset(); + + if (column < 0 || row < 0 || column >= m_columnCount || row >= m_rowCount) + return QColor(); + + return m_colorArray[column][row]; +} + +QColor KColorCombo2::defaultColor() const +{ + return m_defaultColor; +} + +void KColorCombo2::newColorArray(int columnCount, int rowCount) +{ + if (columnCount <= 0 || rowCount <= 0) { + // kdebug << this::FUNCTION << "Trying to create an empty new color array (with %d columns and %d rows)"; + return; + } + + // Delete any previous array (if any): + deleteColorArray(); + + // Create a new array of the wanted dimentions: + m_columnCount = columnCount; + m_rowCount = rowCount; + m_colorArray = new QColor* [columnCount]; + for (int i = 0; i < columnCount; ++i) + m_colorArray[i] = new QColor[rowCount]; + + m_popup->relayout(); +} + +void KColorCombo2::setColorAt(int column, int row, const QColor &color) +{ + if (!m_colorArray) + setRainbowPreset(); + + if (column < 0 || row < 0 || column >= m_columnCount || row >= m_rowCount) { + // kdebug << this::FUNCTION << "Trying to set a color at an invalid index (at column %d and row %d, whereas the array have %d columns and %d rows)"; + return; + } + + m_colorArray[column][row] = color; +} + +void KColorCombo2::setDefaultColor(const QColor &color) +{ + m_defaultColor = color; + if (!m_defaultColor.isValid() && !m_color.isValid()) + m_color = Qt::white; // FIXME: Use the first one. +} + +QPixmap KColorCombo2::colorRectPixmap(const QColor &color, bool isDefault, int width, int height) +{ + // Prepare to draw: + QPixmap pixmap(width, height); + QBitmap mask(width, height); + QPainter painter(&pixmap); + QPainter maskPainter(&mask); + + // Draw pixmap: + drawColorRect(painter, 0, 0, color, isDefault, width, height); + + // Draw mask (make the four corners transparent): + maskPainter.fillRect(0, 0, width, height, Qt::color1); // opaque + maskPainter.setPen(Qt::color0); // transparent + maskPainter.drawPoint(0, 0); + maskPainter.drawPoint(0, height - 1); + maskPainter.drawPoint(width - 1, height - 1); + maskPainter.drawPoint(width - 1, 0); + + // Finish: + painter.end(); + maskPainter.end(); + pixmap.setMask(mask); + return pixmap; +} + +void KColorCombo2::drawColorRect(QPainter &painter, int x, int y, const QColor &color, bool isDefault, int width, int height) +{ + // Fill: + if (color.isValid()) + painter.fillRect(x /*+ 1*/, y /*+ 1*/, width /*- 2*/, height /*- 2*/, color); + else { + // If it's an invalid color, it's for the "Other..." entry: draw a rainbow. + // If it wasn't for the "Other..." entry, the programmer made a fault, so (s)he will be informed about that visually. + for (int i = 0; i < width-2; ++i) { + int hue = i * 360 / (width-2); + for (int j = 0; j < height-2; ++j) { + int saturation = 255 - (j * 255 / (height-2)); + painter.setPen( QColor(hue, saturation, /*value=*/255, QColor::Hsv) ); + painter.drawPoint(x + i + 1, y + j + 1); + } + } + } + + // Stroke: + int dontCare, value; + color.getHsv(/*hue:*/dontCare, /*saturation:*/dontCare, value); + QColor stroke = (color.isValid() ? color.dark(125) : KGlobalSettings::textColor()); + painter.setPen(/*color);//*/stroke); + painter.drawLine(x + 1, y, x + width - 2, y); + painter.drawLine(x, y + 1, x, y + height - 2); + painter.drawLine(x + 1, y + height - 1, x + width - 2, y + height - 1); + painter.drawLine(x + width - 1, y + 1, x + width - 1, y + height - 2); + + // Round corners: + QColor antialiasing; + if (color.isValid()) { + antialiasing = Tool_mixColors(color, stroke); + painter.setPen(antialiasing); + painter.drawPoint(x + 1, y + 1); + painter.drawPoint(x + 1, y + height - 2); + painter.drawPoint(x + width - 2, y + height - 2); + painter.drawPoint(x + width - 2, y + 1); + } else { + // The two top corners: + antialiasing = Tool_mixColors(Qt::red, stroke); + painter.setPen(antialiasing); + painter.drawPoint(x + 1, y + 1); + painter.drawPoint(x + width - 2, y + 1); + // The two bottom ones: + antialiasing = Tool_mixColors(Qt::white, stroke); + painter.setPen(antialiasing); + painter.drawPoint(x + 1, y + height - 2); + painter.drawPoint(x + width - 2, y + height - 2); + } + + // Mark default color: + if (isDefault) { + painter.setPen(stroke); + painter.drawLine(x + 1, y + height - 2, x + width - 2, y + 1); + } +} + +int KColorCombo2::colorRectHeight() const +{ + return (fontMetrics().boundingRect(i18n("(Default)")).height() + 2)*3/2; +} + +int KColorCombo2::colorRectWidthForHeight(int height) const +{ + return height * 14 / 10; // 1.4 times the height, like A4 papers. +} + +void KColorCombo2::deleteColorArray() +{ + if (m_colorArray) { + for (int i = 0; i < m_columnCount; ++i) + delete[] m_colorArray[i]; + delete[] m_colorArray; + m_colorArray = 0; + } +} + +void KColorCombo2::updateComboBox() +{ + int height = colorRectHeight()*2/3; // fontMetrics().boundingRect(i18n("(Default)")).height() + 2 + QPixmap pixmap = colorRectPixmap(effectiveColor(), !m_color.isValid(), colorRectWidthForHeight(height), height); // TODO: isDefaultColorSelected() + changeItem(pixmap, (m_color.isValid() ? "" : i18n("(Default)")), /*index=*/0); +} + +void KColorCombo2::popup() +{ + if (!m_colorArray) + setRainbowPreset(); + + // Compute where to show the popup: + QRect desk = KGlobalSettings::desktopGeometry(this); + + QPoint popupPoint = mapToGlobal(QPoint(0, 0)); + + int popupHeight = m_popup->sizeHint().height(); + if (popupPoint.y() + height() + popupHeight > desk.bottom()) + popupPoint.setY(popupPoint.y() - popupHeight); + else + popupPoint.setY(popupPoint.y() + height()); + + int popupWidth = m_popup->sizeHint().width(); + if (popupPoint.x() + popupWidth > desk.right()) + popupPoint.setX(desk.right() - popupWidth); + + if (popupPoint.x() < desk.left()) + popupPoint.setX(desk.left()); + + if (popupPoint.y() < desk.top()) + popupPoint.setY(desk.top()); + + // Configure the popup: + m_popup->move(popupPoint); + //m_popup->setColor(m_color); + m_popup->doSelection(); + m_popup->relayout(); // FIXME: In aboutToShow() ? +#if 0 +//#ifndef QT_NO_EFFECTS + if (QApplication::isEffectEnabled(UI_AnimateCombo)) { + if (m_popup->y() < mapToGlobal(QPoint(0,0)).y()) + qScrollEffect(m_popup, QEffects::UpScroll); + else + qScrollEffect(m_popup); + } else +#endif + m_popup->show(); + + // The combo box is now shown pressed. Make it show not pressed again + // by causing its (invisible) list box to emit a 'selected' signal. + // Simulate an Enter to unpress it: + QListBox *lb = listBox(); + if (lb) { + lb->setCurrentItem(0); + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, 0, 0); + QApplication::postEvent(lb, keyEvent); + } +} + +bool KColorCombo2::eventFilter(QObject */*object*/, QEvent *event) +{ + QMouseEvent *mouseEvent; + + switch (event->type()) { + case QEvent::MouseButtonDblClick: + case QEvent::MouseButtonPress: + mouseEvent = (QMouseEvent*)event; + if ( !m_popup->rect().contains(mouseEvent->pos()) ) { + QPoint globalPos = m_popup->mapToGlobal(mouseEvent->pos()); + if (QApplication::widgetAt(globalPos, /*child=*/true) == this) { + // The popup is being closed by a click on the KColorCombo2 widget. + // Avoid popping it up again immediately: + m_discardNextMousePress = true; + } + } + break; + default: + break; + } + + // Don't stop the event being handled further: + return false; +} + +void KColorCombo2::mousePressEvent(QMouseEvent *event) +{ + m_dragStartPos = event->pos(); + + if (event->button() == Qt::LeftButton && m_discardNextMousePress) + m_discardNextMousePress = false; + else + QComboBox::mousePressEvent(event); +} + +void KColorCombo2::mouseMoveEvent(QMouseEvent *event) +{ + if( (event->state() & Qt::LeftButton) && + (event->pos() - m_dragStartPos).manhattanLength() > KGlobalSettings::dndEventDelay() ) { + // Drag color object: + KColorDrag *colorDrag = new KColorDrag(effectiveColor(), this); + // Replace the drag pixmap with our own rounded one, at the same position and dimetions: + QPixmap pixmap = colorDrag->pixmap(); + pixmap = colorRectPixmap(effectiveColor(), /*isDefault=*/false, pixmap.width(), pixmap.height()); + colorDrag->setPixmap(pixmap, colorDrag->pixmapHotSpot()); + colorDrag->dragCopy(); + //setDown(false); + } +} + +void KColorCombo2::dragEnterEvent(QDragEnterEvent *event) +{ + event->accept(isEnabled() && KColorDrag::canDecode(event)); +} + +void KColorCombo2::dropEvent(QDropEvent *event) +{ + QColor color; + if (KColorDrag::decode(event, color)) + setColor(color); +} + +void KColorCombo2::keyPressEvent(QKeyEvent *event) +{ + KKey key(event); + + if (KStdAccel::copy().contains(key)) { + QMimeSource *mime = new KColorDrag(effectiveColor()); + QApplication::clipboard()->setData(mime, QClipboard::Clipboard); + } else if (KStdAccel::paste().contains(key)) { + QColor color; + KColorDrag::decode(QApplication::clipboard()->data(QClipboard::Clipboard), color); + setColor(color); + } else + QComboBox::keyPressEvent(event); +} + +void KColorCombo2::fontChange(const QFont &oldFont) +{ + // Since the color-rectangle is the same height of the text, we should resize it if the font change: + updateComboBox(); + QComboBox::fontChange(oldFont); // To update geometry. +} + +void KColorCombo2::virtual_hook(int /*id*/, void */*data*/) +{ + /* KBASE::virtual_hook(id, data); */ +} + +#include "kcolorcombo2.moc" diff --git a/src/kcolorcombo2.h b/src/kcolorcombo2.h new file mode 100644 index 0000000..ec264fc --- /dev/null +++ b/src/kcolorcombo2.h @@ -0,0 +1,343 @@ +/*************************************************************************** + * Copyright (C) 2005 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KCOLORCOMBO2_H +#define KCOLORCOMBO2_H + +#include +#include +#include + +class KColorPopup; + +/** + * @short A combobox to display or allow user selection of a color in a user-friendly way. + * + * A combobox widget that popup an array of colors for the user to easily pick a common color.\n + * He/she can use the popup to quickly pick a reasonable color or open a color chooser dialog for a more precise choice.\n + * The user can also choose a default color (the standard background color, text color, etc... it's to the programmer to make sense of this property).\n + * \n + * The user is also offered some facilities: like KColorButton he/she can copy a color or paste it + * (with standard keyboard shortcuts, usually Ctrl+C and Ctrl+V), and he/she can drag or drop colors. + * + * @par Quick usage: + * Just create a new KColorCombo2() with the initial color and eventually an allowed default color + * (eg. KGlobalSettings::baseColor() for a background color, KGlobalSettings::textColor()...).\n + * You will be noticed of the color the user selects with the signal changed(), or you can use color() to get the color at any moment.\n + * Note that they can return an invalid color (see QColor::isValid()) if the user chosen the default color (if he can choose that).\n + * It's then easy to save in settings, but if you want the real color (even for the default), you can get it with effectiveColor(). + * + * @par Notes about default color: + * If you set a default color using Qt or KDE standard colors, the user can change them in the KDE Control Center, + * but this widget willn't be update and will still show the old one.\n + * To be noticed of such color change and then update the widget with the new standard color, you can use one of those two methods: + * @code + * void QWidgetDerivate::paletteChange(const QPalette &oldPalette) { // QWidgetDerivate is a parent or near custom widget + * theComboBox->setDefaultColor(theNewDefaultColor); + * QWidget::paletteChange(oldPalette); + * } + * @endcode + * or connect the signal KApplication::kdisplayPaletteChanged() to a slot that will set the default color of this widget. + * + * @par Advanced usage: + * By default, the combobox show a well balanced rainbow, OK for most usages, and you don't need to do anything for it to work.\n + * You however can set your own color array by calling newColorArray() with the number of columns and rows. + * Then, setColorAt() several times to fill the array.\n + * This allow the most flexibility. But if you just want a rainbow with more or less colors, setRainbowPreset() is what you want.\n + * If you worry about performance issues of creating a combobox with the default color array and then allocating another color array by yourself, + * note that the default color array is not allocated in the constructor, but as soon as it is demanded (on first popup if no array has been + * set before, or on first call of any accessors: colorAt(), columnCount(), setColorAt()...). + * Finally, colorRectPixmap() and drawColorRect() allow to draw the color rounded-rectangle in other places for a consistent look. + * + * @see KGlobalSettings Use one of the static functions to get KDE standard colors for default values. + * @see KColorButton The same, but without the rainbow popup or the choice of a default color. + * @see KColorDialog The dialog that is shown when the user click the "Other..." entry. + * @author Sébastien Laoût + * + * @image html commoncolorselector.png "Common Color Selector ComboBox" + */ +class KColorCombo2 : public QComboBox +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor) + Q_PROPERTY(QColor defaultColor READ defaultColor WRITE setDefaultColor) + + public slots: + /** + * Change the selected color.\n + * If the popup is open, it will not reflect the change. FIXME: Should it? + * @param color The new selected color. Can be invalid to select the default one.\n + * If @p color is invalid and no default color is allowed, the function will keep the old one. + */ + void setColor(const QColor &color); + + /** + * Change the default color. + * @param color The color to return if the user choose the default one. If it is not valid, the user willn't be allowed to choose a default one. + * @see defaultColor() to get it. + */ + void setDefaultColor(const QColor &color); + + signals: + /** + * Emitted when the color of the widget is changed, either with setColor() or via user selection. + * @see color() to know the content of @p newColor. + */ + void changed(const QColor &newColor); + + public: + /** + * Constructs a color combobox with parent @p parent called @p name. + * @param color The initial selected color. If it is not valid, the default one will then be selected.\n + * But if @p color is invalid and there is no default color, the result is undefined. + * @param defaultColor The color to return if the user choose the default one. If it is not valid, the user willn't be allowed to choose a default one. + */ + KColorCombo2(const QColor &color, const QColor &defaultColor, QWidget *parent = 0, const char *name = 0); + + /** + * Constructs a color combobox with parent @p parent called @p name.\n + * The user is not allowed to choose a default color, unless you call setDefaultColor() later. + * @param color The initial selected color. If it is invalid, the result is undefined. + */ + KColorCombo2(const QColor &color, QWidget *parent = 0L, const char *name = 0L); + + /** + * Destroys the combobox. + */ + virtual ~KColorCombo2(); + + /** + * Get the color chosen by the user.\n + * Can be invalid, if the user chosen the default one.\n + * Ideal to store it in settings for later recall. + * @see effectiveColor() if you want the color to be always valid. + */ + QColor color() const; + + /** + * Return the color chosen by the user.\n + * If the user chosen the default color, the default one is then returned, so the returned color is always valid.\n + * Ideal to directly use to draw. + * @see color() if you want to be notified of a default color choice. + */ + QColor effectiveColor() const; + + /** + * Returns the default color or an invalid color if no default color is set (if the user isn't allowed to choose a default color). + * @see setDefaultColor() to change it. + */ + QColor defaultColor() const; + + /** + * Allocate a new color array of the specified dimention.\n + * The new array will have invalid colors: you should then assign them one by one.\n + * If one or both of the dimentions are negative or null, this function do nothing (both dimentions are always ensured to be at least equal to 1). + * @param columnCount The number of columns of the array. + * @param rowCount The number of rows of the array. + * @see setColorAt() to set all colors once the array have been created. + */ + void newColorArray(int columnCount, int rowCount); + + /** + * Get the number of columns in the array that the user can see to choose. + * @see rowCount() for the number of rows, and colorAt() to get a color from the array. + */ + int columnCount() const; + + /** + * Get the number of rows in the array that the user can see to choose. + * @see columnCount() for the number of columns, and colorAt() to get a color from the array. + */ + int rowCount() const; + + /** + * Set a color in the array at position (column,row).\n + * If one or both of the indexes are out of range, this function do nothing.\n + * @p column and @p row start from 0 to columnCount()-1 and columnRow()-1. + * + * @param column The x coordinate of the color to set or change. + * @param row The y coordinate of the color to set or change. + * @param color The color to assign at this position. + */ + void setColorAt(int column, int row, const QColor &color); + + /** + * Get a color in the array that the user can see to choose.\n + * @p column and @p row start from 0 to columnCount()-1 and columnRow()-1. + * + * @return The asked color, or an invalid color if the index is out of limit of the array. + * @see columnCount() and rowCount() to get the array dimentions. + */ + QColor colorAt(int column, int row)/* const*/; + + /** + * Fill the array of colors (that will be shown to the user in the popup that appears when he/she click the arrow) with a rainbow of different luminosity.\n + * This rainbow representation have the advantage of being natural and well structured for a human to be able to select reasonable colors.\n + * This function will allocate a color array by itself depending on the parameters (no need to call newColorArray()). + * @param colorColumnCount The number of columns. The 360 possible colors of the rainbow will be splitted to take the wanted number of colors, equaly separated. + * @param lightRowCount There is always at least 1 row of colors: the "pure" colors: pure red, pure blue, pure green, pure fushia...\n + * Additionnaly, you can add row on top: they will contain the same colors, but lighter.\n + * The parameter @p lightRowCount specify how many different lighting grades shoud be shown (from near to white, but not white, to "pure"). + * @param darkRowCount Finally, on bottom of the row of "pure colors", you can put any variety of dark colors (from "pure", to near to black, but not black).\n + * So, the number of rows is equal to @p lightRowCount + 1 + @p darkRowCount. On top are light colors, gradually going to dark ones on bottom. + * @param withGray If true, another column (so there will be @p colorColumnCount+1 columns) is added on the very-right of the popup + * to show different gray values, matching the brightness of the sibling colors. + * + * The most acceptable parameters: + * @li The default values are good to have the 7 colors of the rainbow + colors between them, and light/dark colors are well distinct. + * @li If the color is a background color, you can set @p darkRowCount to 0, so only light colors are shown. + * @li The inverse is true for text color choice: you can set @p lightRowCount to 0. + * @li But be careful: some advanced users prefer white text on dark background, so you eg. can set @p lightRowCount to a big value and + * @p darkRowCount to a small one for a fewer choice of dark colors, but at least some ones. + */ + void setRainbowPreset(int colorColumnCount = 12, int lightRowCount = 4, int darkRowCount = 4, bool withGray = true); + //void setHsvPreset(QColor hue[], QColor saturation[], QColor value[], bool withGray = true); + + /** + * Returns a pixmap of a colored rounded-rectangle. The four corners are transparent.\n + * Useful if you want to set such a rectangle as an icon for a menu entry, or for drag and drop operation... + * @param color The color of the rectangle. If the color is invalid, a rainbow is then drawn (like for the "Other..." entry in the popup). + * @param isDefault True if @p color is the default one and should then be draw with a diagonal line. + * @param width The width of the rectangle pixmap to return. + * @param height The height of the rectangle pixmap to return. + * + * @see drawColorRect() if you need to draw it directly: it's faster. + */ + static QPixmap colorRectPixmap(const QColor &color, bool isDefault, int width, int height); + + /** + * Draw an image of a colored rounded-rectangle.\n + * This is like colorRectPixmap() but significantly faster because there is nothing to copy, and no transparency mask to create and apply. + * @param painter The painter where to draw the image. + * @param x The x coordinate on the @p painter where to draw the rectangle. + * @param y The y coordinate on the @p painter where to draw the rectangle. + * @param color The color of the rectangle. If the color is invalid, a rainbow is then drawn (like for the "Other..." entry in the popup). + * @param isDefault True if @p color is the default one and should then be draw with a diagonal line. + * @param width The width of the rectangle pixmap to return. + * @param height The height of the rectangle pixmap to return. + * + * @see colorRectPixmap() to get a transparent pixmap of the rectangle. + */ + static void drawColorRect(QPainter &painter, int x, int y, const QColor &color, bool isDefault, int width, int height); + + /** + * Get the height of a color rectangle for this combobox.\n + * This is equal to the text height, regarding to the current font of this combobox. + */ + int colorRectHeight() const; + + /** + * Get the width of a color rectangle, depending of the @p height of it.\n + * It typically return 1.4 * @p height for decent rectangle proportions. + */ + int colorRectWidthForHeight(int height) const; + + protected: + virtual void popup(); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual bool eventFilter(QObject *object, QEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dropEvent(QDropEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void fontChange(const QFont &oldFont); + + private: + /** + * Initialization routine common to every constructors.\n + * Constructors just have to initialize the QComboBox, m_color and m_defaultColor + * and this function do the rest to complete the creation of this widget. + */ + void init(); + + /** + * Free up all memory allocated for the color array.\n + * But only if an array have previously been allocated, of course. + */ + void deleteColorArray(); + + /** + * Update the only item of the combobox to mirror the new selected color.\n + * Mainly called on init() and setColor(). + */ + void updateComboBox(); + + KColorPopup *m_popup; + QColor m_color; + QColor m_defaultColor; + bool m_discardNextMousePress; + QColor **m_colorArray; + int m_columnCount; + int m_rowCount; + QPoint m_dragStartPos; + + protected: + /** + * Keep place for future improvements without having to break binary compatibility.\n + * Does nothing for the moment. + */ + virtual void virtual_hook(int id, void *data); + + private: + /** + * Keep place for future improvements without having to break binary compatibility. + */ + class KColorCombo2Private; + + KColorCombo2Private *d; +}; + + + +// TODO: setColorArray(QColor **, int, int) and use signals/slots ?? + +class KColorPopup : public QWidget +{ + Q_OBJECT + public: + KColorPopup(KColorCombo2 *parent); + ~KColorPopup(); + void relayout(); // updateGeometry() ?? + protected: + void paintEvent(QPaintEvent */*event*/); + void mouseMoveEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent *event); + void doSelection(); + void validate(); + void updateCell(int column, int row); + + friend class KColorCombo2; + + private: + KColorCombo2 *m_selector; + QPixmap m_pixmap; + int m_selectedRow; + int m_selectedColumn; + int m_columnOther; + QColor m_otherColor; + + static const int MARGIN; + static const int FRAME_WIDTH; +}; + + + +#endif // KCOLORCOMBO2_H diff --git a/src/keyboard.cpp b/src/keyboard.cpp new file mode 100644 index 0000000..a7871b3 --- /dev/null +++ b/src/keyboard.cpp @@ -0,0 +1,129 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include // it define Q_WS_X11 + +#include "keyboard.h" + +/* This file contain modified code from klistbox.cpp + */ + +// ShiftMask, ControlMask and Mod1Mask are defined in +#if defined Q_WS_X11 && ! defined K_WS_QTONLY +#include // schroder +#endif + +void Keyboard::pressedKeys(bool &shiftPressed, bool &controlPressed) +{ +#if defined Q_WS_X11 && ! defined K_WS_QTONLY + Window root; + Window child; + int root_x, root_y, win_x, win_y; + uint keybstate; + XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child, + &root_x, &root_y, &win_x, &win_y, &keybstate ); + + shiftPressed = keybstate & ShiftMask; + controlPressed = keybstate & ControlMask; +#endif +} + +/** Same code as pressedKeys(...) but for shift key only + */ +bool Keyboard::shiftPressed() +{ +#if defined Q_WS_X11 && ! defined K_WS_QTONLY + Window root; + Window child; + int root_x, root_y, win_x, win_y; + uint keybstate; + XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child, + &root_x, &root_y, &win_x, &win_y, &keybstate ); + + return (keybstate & ShiftMask) != 0; +#else + return false; +#endif +} + +/** Same code as pressedKeys(...) but for control key only + */ +bool Keyboard::controlPressed() +{ +#if defined Q_WS_X11 && ! defined K_WS_QTONLY + Window root; + Window child; + int root_x, root_y, win_x, win_y; + uint keybstate; + XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child, + &root_x, &root_y, &win_x, &win_y, &keybstate ); + + return (keybstate & ControlMask) != 0; +#else + return false; +#endif +} + +/** Return if Alt key is pressed + */ +bool Keyboard::altPressed() +{ +#if defined Q_WS_X11 && ! defined K_WS_QTONLY + Window root; + Window child; + int root_x, root_y, win_x, win_y; + uint keybstate; + XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child, + &root_x, &root_y, &win_x, &win_y, &keybstate ); + + return (keybstate & Mod1Mask) != 0; +#else + return false; +#endif +} + +/******************* + * What does KDE 3.1 and later: + * FIXME: Use this function in KDE 4 + * (I wasn't knowing it by creating this class) + + / * + * Returns the currently pressed keyboard modifiers (e.g. shift, control, etc.) + * Usually you simply want to test for those in key events, in which case + * QKeyEvent::state() does the job (or QKeyEvent::key() to + * notice when a modifier is pressed alone). + * But it can be useful to query for the status of the modifiers at another moment + * (e.g. some KDE apps do that upon a drop event). + * @return the keyboard modifiers + * @since 3.1 + / +uint KApplication::keyboardModifiers() +{ + Window root; + Window child; + int root_x, root_y, win_x, win_y; + uint keybstate; + XQueryPointer( qt_xdisplay(), qt_xrootwin(), &root, &child, + &root_x, &root_y, &win_x, &win_y, &keybstate ); + return keybstate & 0x00ff; +} + + * + *******************/ diff --git a/src/keyboard.h b/src/keyboard.h new file mode 100644 index 0000000..2be6297 --- /dev/null +++ b/src/keyboard.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KEYBOARD_H +#define KEYBOARD_H + +/** + * Methods to know if Shift and / or Ctrl keys are pressed. + * Depend on X, but neither Qt not KDE provide this class / methods. + * @author Sébastien Laoût + */ +namespace Keyboard +{ + void pressedKeys(bool &shiftPressed, bool &controlPressed); + bool shiftPressed(); + bool controlPressed(); + bool altPressed(); +} + +#endif // KEYBOARD_H diff --git a/src/kgpgme.cpp b/src/kgpgme.cpp new file mode 100644 index 0000000..4aaeeeb --- /dev/null +++ b/src/kgpgme.cpp @@ -0,0 +1,443 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#include "kgpgme.h" + +#ifdef HAVE_LIBGPGME + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// KGpgSelKey class based on class in KGpg with the same name + +class KGpgSelKey : public KDialogBase +{ + private: + KListView* keysListpr; + + public: + + KGpgSelKey(QWidget *parent, const char *name, QString preselected, + const KGpgMe& gpg): + KDialogBase( parent, name, true,i18n("Private Key List"),Ok | Cancel) { + QString keyname; + QVBoxLayout* vbox; + QWidget* page = new QWidget(this); + QLabel* labeltxt; + KIconLoader* loader = KGlobal::iconLoader(); + QPixmap keyPair = loader->loadIcon("kgpg_key2", KIcon::Small, 20); + + setMinimumSize(350,100); + keysListpr = new KListView(page); + keysListpr->setRootIsDecorated(true); + keysListpr->addColumn(i18n("Name")); + keysListpr->addColumn(i18n("Email")); + keysListpr->addColumn(i18n("ID")); + keysListpr->setShowSortIndicator(true); + keysListpr->setFullWidth(true); + keysListpr->setAllColumnsShowFocus(true); + + labeltxt = new QLabel(i18n("Choose a secret key:"),page); + vbox = new QVBoxLayout(page); + + KGpgKeyList list = gpg.keys(true); + + for(KGpgKeyList::iterator it = list.begin(); it != list.end(); ++it) { + QString name = gpg.checkForUtf8((*it).name); + KListViewItem *item = new + KListViewItem(keysListpr, name, (*it).email, (*it).id); + item->setPixmap(0,keyPair); + if(preselected == (*it).id) { + keysListpr->setSelected(item, true); + keysListpr->setCurrentItem(item); + } + } + if(!keysListpr->selectedItem()) { + keysListpr->setSelected(keysListpr->firstChild(), true); + keysListpr->setCurrentItem(keysListpr->firstChild()); + } + vbox->addWidget(labeltxt); + vbox->addWidget(keysListpr); + setMainWidget(page); + }; + + QString key() { + QListViewItem* item = keysListpr->selectedItem(); + + if(item) + return item->text(2); + return ""; + } +}; + +KGpgMe::KGpgMe() : m_ctx(0), m_useGnuPGAgent(true) +{ + init(GPGME_PROTOCOL_OpenPGP); + if(gpgme_new(&m_ctx)) { + m_ctx = 0; + } + else { + gpgme_set_armor(m_ctx, 1); + setPassphraseCb(); + } +} + +KGpgMe::~KGpgMe() +{ + if(m_ctx) + gpgme_release(m_ctx); + clearCache(); +} + +void KGpgMe::clearCache() +{ + if(m_cache.size() > 0) + { + m_cache.fill('\0'); + m_cache.truncate(0); + } +} + +void KGpgMe::init(gpgme_protocol_t proto) +{ + gpgme_error_t err; + + gpgme_check_version(NULL); + setlocale(LC_ALL, ""); + gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); + gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL)); + + err = gpgme_engine_check_version(proto); + if(err) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(gpgme_strsource(err)).arg(gpgme_strerror(err))); + } +} + +QString KGpgMe::checkForUtf8(QString txt) +{ + // code borrowed from KGpg which borrowed it from gpa + const char *s; + + // Make sure the encoding is UTF-8. + // Test structure suggested by Werner Koch + if(txt.isEmpty()) + return QString::null; + + for(s = txt.ascii(); *s && !(*s & 0x80); s++) + ; + if (*s && !strchr (txt.ascii(), 0xc3) && (txt.find("\\x")==-1)) + return txt; + + // The string is not in UTF-8 + //if (strchr (txt.ascii(), 0xc3)) return (txt+" +++"); + if (txt.find("\\x")==-1) + return QString::fromUtf8(txt.ascii()); + // if (!strchr (txt.ascii(), 0xc3) || (txt.find("\\x")!=-1)) { + for(int idx = 0 ; (idx = txt.find( "\\x", idx )) >= 0 ; ++idx) { + char str[2] = "x"; + str[0] = (char)QString(txt.mid(idx + 2, 2)).toShort(0, 16); + txt.replace(idx, 4, str); + } + if (!strchr (txt.ascii(), 0xc3)) + return QString::fromUtf8(txt.ascii()); + else + return QString::fromUtf8(QString::fromUtf8(txt.ascii()).ascii()); + // perform Utf8 twice, or some keys display badly + return txt; +} + +QString KGpgMe::selectKey(QString previous) +{ + KGpgSelKey dlg(kapp->activeWindow(), "", previous, *this); + + if(dlg.exec()) + return dlg.key(); + return ""; +} + +// Rest of the code is mainly based in gpgme examples + +KGpgKeyList KGpgMe::keys(bool privateKeys /* = false */) const +{ + KGpgKeyList keys; + gpgme_error_t err = 0, err2 = 0; + gpgme_key_t key = 0; + gpgme_keylist_result_t result = 0; + + if(m_ctx) { + err = gpgme_op_keylist_start(m_ctx, NULL, privateKeys); + if(!err) { + while(!(err = gpgme_op_keylist_next(m_ctx, &key))) { + KGpgKey gpgkey; + + if(!key->subkeys) + continue; + gpgkey.id = key->subkeys->keyid; + if(key->uids) { + gpgkey.name = key->uids->name; + gpgkey.email = key->uids->email; + } + keys.append(gpgkey); + gpgme_key_unref(key); + } + + if (gpg_err_code (err) == GPG_ERR_EOF) + err = 0; + err2 = gpgme_op_keylist_end(m_ctx); + if(!err) + err = err2; + } + } + + if(err) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(gpgme_strsource(err)).arg(gpgme_strerror(err))); + } + else { + result = gpgme_op_keylist_result(m_ctx); + if (result->truncated) { + KMessageBox::error(kapp->activeWindow(), + i18n("Key listing unexpectedly truncated.")); + } + } + return keys; +} + +bool KGpgMe::encrypt(const QByteArray& inBuffer, Q_ULONG length, + QByteArray* outBuffer, QString keyid /* = QString::null */) +{ + gpgme_error_t err = 0; + gpgme_data_t in = 0, out = 0; + gpgme_key_t keys[2] = { NULL, NULL }; + gpgme_key_t* key = NULL; + gpgme_encrypt_result_t result = 0; + + outBuffer->resize(0); + if(m_ctx) { + err = gpgme_data_new_from_mem(&in, inBuffer.data(), length, 1); + if(!err) { + err = gpgme_data_new(&out); + if(!err) { + if(keyid.isNull()) { + key = NULL; + } + else { + err = gpgme_get_key(m_ctx, keyid.ascii(), &keys[0], 0); + key = keys; + } + + if(!err) { + err = gpgme_op_encrypt(m_ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, + in, out); + if(!err) { + result = gpgme_op_encrypt_result(m_ctx); + if (result->invalid_recipients) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(i18n("That public key is not meant for encryption")) + .arg(result->invalid_recipients->fpr)); + } + else { + err = readToBuffer(out, outBuffer); + } + } + } + } + } + } + if(err != GPG_ERR_NO_ERROR && err != GPG_ERR_CANCELED) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(gpgme_strsource(err)).arg(gpgme_strerror(err))); + } + if(err != GPG_ERR_NO_ERROR) + clearCache(); + if(keys[0]) + gpgme_key_unref(keys[0]); + if(in) + gpgme_data_release(in); + if(out) + gpgme_data_release(out); + return (err == GPG_ERR_NO_ERROR); +} + +bool KGpgMe::decrypt(const QByteArray& inBuffer, QByteArray* outBuffer) +{ + gpgme_error_t err = 0; + gpgme_data_t in = 0, out = 0; + gpgme_decrypt_result_t result = 0; + + outBuffer->resize(0); + if(m_ctx) { + err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1); + if(!err) { + err = gpgme_data_new(&out); + if(!err) { + err = gpgme_op_decrypt(m_ctx, in, out); + if(!err) { + result = gpgme_op_decrypt_result(m_ctx); + if(result->unsupported_algorithm) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(i18n("Unsupported algorithm")) + .arg(result->unsupported_algorithm)); + } + else { + err = readToBuffer(out, outBuffer); + } + } + } + } + } + if(err != GPG_ERR_NO_ERROR && err != GPG_ERR_CANCELED) { + KMessageBox::error(kapp->activeWindow(), QString("%1: %2") + .arg(gpgme_strsource(err)).arg(gpgme_strerror(err))); + } + if(err != GPG_ERR_NO_ERROR) + clearCache(); + if(in) + gpgme_data_release(in); + if(out) + gpgme_data_release(out); + return (err == GPG_ERR_NO_ERROR); +} + +#define BUF_SIZE (32 * 1024) + +gpgme_error_t KGpgMe::readToBuffer(gpgme_data_t in, QByteArray* outBuffer) const +{ + int ret; + gpgme_error_t err = GPG_ERR_NO_ERROR; + + ret = gpgme_data_seek(in, 0, SEEK_SET); + if(ret) { + err = gpgme_err_code_from_errno(errno); + } + else { + char* buf = new char[BUF_SIZE + 2]; + + if(buf) { + while((ret = gpgme_data_read(in, buf, BUF_SIZE)) > 0) { + uint size = outBuffer->size(); + if(outBuffer->resize(size + ret)) + memcpy(outBuffer->data() + size, buf, ret); + } + if(ret < 0) + err = gpgme_err_code_from_errno(errno); + delete[] buf; + } + } + return err; +} + +bool KGpgMe::isGnuPGAgentAvailable() +{ + QString agent_info = getenv("GPG_AGENT_INFO"); + + if (agent_info.find(':') > 0) + return true; + return false; +} + +void KGpgMe::setPassphraseCb() +{ + bool agent = false; + QString agent_info; + + agent_info = getenv("GPG_AGENT_INFO"); + + if(m_useGnuPGAgent) + { + if (agent_info.find(':')) + agent = true; + if(agent_info.startsWith("disable:")) + setenv("GPG_AGENT_INFO", agent_info.mid(8), 1); + } + else + { + if(!agent_info.startsWith("disable:")) + setenv("GPG_AGENT_INFO", "disable:" + agent_info, 1); + } + if (agent) + gpgme_set_passphrase_cb(m_ctx, 0, 0); + else + gpgme_set_passphrase_cb(m_ctx, passphraseCb, this); +} + +gpgme_error_t KGpgMe::passphraseCb(void* hook, const char* uid_hint, + const char* passphrase_info, + int last_was_bad, int fd) +{ + KGpgMe* gpg = static_cast(hook); + return gpg->passphrase(uid_hint, passphrase_info, last_was_bad, fd); +} + +gpgme_error_t KGpgMe::passphrase(const char* uid_hint, + const char* /*passphrase_info*/, + int last_was_bad, int fd) +{ + gpgme_error_t res = GPG_ERR_CANCELED; + QString s; + QString gpg_hint = checkForUtf8(uid_hint); + int result; + + if(last_was_bad){ + s += "" + i18n("Wrong password.") + "

      \n\n"; + clearCache(); + } + + if(!m_text.isEmpty()) + s += m_text + "
      "; + + if(!gpg_hint.isEmpty()) + s += gpg_hint; + + if(m_cache.isEmpty()){ + QCString password; + + if(m_saving) + result = KPasswordDialog::getNewPassword(password, s); + else + result = KPasswordDialog::getPassword(password, s); + + if(result == KPasswordDialog::Accepted) + m_cache = password; + } + else + result = KPasswordDialog::Accepted; + + if(result == KPasswordDialog::Accepted) { + write(fd, m_cache.data(), m_cache.length()); + res = 0; + } + write(fd, "\n", 1); + return res; +} +#endif // HAVE_LIBGPGME diff --git a/src/kgpgme.h b/src/kgpgme.h new file mode 100644 index 0000000..5493273 --- /dev/null +++ b/src/kgpgme.h @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ +#ifndef KGPGME_H +#define KGPGME_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_LIBGPGME + +#include +#include + +/** + @author Petri Damsten +*/ + +class KGpgKey +{ + public: + QString id; + QString name; + QString email; +}; + +typedef QValueList< KGpgKey > KGpgKeyList; + +class KGpgMe +{ + public: + KGpgMe(); + ~KGpgMe(); + + QString selectKey(QString previous = QString::null); + KGpgKeyList keys(bool privateKeys = false) const; + void setText(QString text, bool saving) { m_text = text; m_saving = saving; }; + void setUseGnuPGAgent(bool use) { m_useGnuPGAgent = use; setPassphraseCb(); }; + QString text() const { return m_text; }; + bool saving() const { return m_saving; }; + void clearCache(); + + bool encrypt(const QByteArray& inBuffer, Q_ULONG length, + QByteArray* outBuffer, QString keyid = QString::null); + bool decrypt(const QByteArray& inBuffer, QByteArray* outBuffer); + + static QString checkForUtf8(QString txt); + static bool isGnuPGAgentAvailable(); + + private: + gpgme_ctx_t m_ctx; + QString m_text; + bool m_saving; + bool m_useGnuPGAgent; + QCString m_cache; + + void init(gpgme_protocol_t proto); + gpgme_error_t readToBuffer(gpgme_data_t in, QByteArray* outBuffer) const; + void setPassphraseCb(); + static gpgme_error_t passphraseCb(void *hook, const char *uid_hint, + const char *passphrase_info, + int last_was_bad, int fd); + gpgme_error_t passphrase(const char *uid_hint, + const char *passphrase_info, + int last_was_bad, int fd); +}; +#endif // HAVE_LIBGPGME +#endif // KGPGME_H diff --git a/src/kiconcanvas.cpp b/src/kiconcanvas.cpp new file mode 100644 index 0000000..13ec6ce --- /dev/null +++ b/src/kiconcanvas.cpp @@ -0,0 +1,244 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; mixedindent off; indent-mode cstyle; + * + * This file is part of the KDE project, module kfile. + * Copyright (C) 2006 Luke Sandell + * (C) 2002 Carsten Pfeiffer + * (C) 2000 Geert Jansen + * (C) 2000 Kurt Granroth + * (C) 1997 Christoph Neerfeld + * + * This is free software; it comes under the GNU Library General + * Public License, version 2. See the file "COPYING.LIB" for the + * exact licensing terms. + */ + +#include "kiconcanvas.h" +#include "kicondialog.h" + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LIBART +#include +#include +#endif + +class KIconCanvasItem : public QIconViewItem +{ + public: + KIconCanvasItem ( QIconView * parent, const QString & key, const QPixmap & pixmap ) + : QIconViewItem(parent) + { + setText(QFileInfo(key).baseName()); + setKey(key); + setPixmap(pixmap); + setDragEnabled(true); + setDropEnabled(false); + + } + + int compare(QIconViewItem *rhs) const + { + return QString::localeAwareCompare(text().lower(), rhs->text().lower()); + } +}; + +class KIconCanvas::KIconCanvasPrivate +{ + public: + KIconCanvasPrivate() + { + m_bLoading = false; + mSize = 0; + } + ~KIconCanvasPrivate() + { + } + bool m_bLoading; + QString mSetCurrent; + int mSize; +#ifdef HAVE_LIBART + KSvgIconEngine mSvgEngine; +#endif + bool mStrictIconSize; +}; + +/* + * KIconCanvas: Iconview for the iconloader dialog. + */ + +KIconCanvas::KIconCanvas(QWidget *parent, const char *name) + : KIconView(parent, name) +{ + d = new KIconCanvasPrivate; + mpLoader = KGlobal::iconLoader(); + mpTimer = new QTimer(this); + connect(mpTimer, SIGNAL(timeout()), SLOT(slotLoadFiles())); + connect(this, SIGNAL(currentChanged(QIconViewItem *)), + SLOT(slotCurrentChanged(QIconViewItem *))); + setAcceptDrops(false); + setShowToolTips(true); + setStrictIconSize(false); +} + +KIconCanvas::~KIconCanvas() +{ + delete mpTimer; + delete d; +} + +void KIconCanvas::setIconLoader(KIconLoader *loader) +{ + mpLoader = loader; +} + +void KIconCanvas::loadIcon(const QString &name) +{ + QImage img; + QString path = mpLoader->iconPath(name,-d->mSize); + // Use the extension as the format. Works for XPM and PNG, but not for SVG + QString ext = path.right(3).upper(); + int maxSize = std::min(d->mSize, 60); + + if (ext != "SVG" && ext != "VGZ") + img.load(path); +#ifdef HAVE_LIBART + else + if (d->mSvgEngine.load(maxSize, maxSize, path)) + img = *d->mSvgEngine.painter()->image(); +#endif + + if (img.isNull()) + return; + + // For non-KDE icons + if (d->mStrictIconSize && (img.width() != d->mSize || img.height() != d->mSize)) + return; + + if (img.width() > maxSize || img.height() > maxSize) + { + if (img.width() > img.height()) { + int height = (int) ((float(maxSize) / img.width()) * img.height()); + img = img.smoothScale(maxSize, height); + } else { + int width = (int) ((float(maxSize) / img.height()) * img.width()); + img = img.smoothScale(width, maxSize); + } + } + QPixmap pm; + pm.convertFromImage(img); + + (void) new KIconCanvasItem(this, name, pm); +} + +void KIconCanvas::loadFiles(const QStringList& files) +{ + clear(); + mFiles = files; + emit startLoading(mFiles.count()); + mpTimer->start(10, true); // #86680 + d->m_bLoading = false; +} + +void KIconCanvas::slotLoadFiles() +{ + setResizeMode(Fixed); + QApplication::setOverrideCursor(waitCursor); + + // disable updates to not trigger paint events when adding child items + setUpdatesEnabled( false ); + + d->m_bLoading = true; + int count; + QStringList::ConstIterator it; + QStringList::ConstIterator end(mFiles.end()); + for (it=mFiles.begin(), count=0; it!=end; ++it, count++) + { + loadIcon(*it); + + // Calling kapp->processEvents() makes the iconview flicker like hell + // (it's being repainted once for every new item), so we don't do this. + // Instead, we directly repaint the progress bar without going through + // the event-loop. We do that just once for every 10th item so that + // the progress bar doesn't flicker in turn. (pfeiffer) + // FIXME: Qt4 will have double buffering + if ( count % 10 == 0) { + emit progress(count); + } + if ( !d->m_bLoading ) // user clicked on a button that will load another set of icons + break; + } + + // enable updates since we have to draw the whole view now + sort(); + d->m_bLoading = false; + setUpdatesEnabled( true ); + QApplication::restoreOverrideCursor(); + emit finished(); + setResizeMode(Adjust); +} + +QString KIconCanvas::getCurrent() const +{ + return currentItem() ? currentItem()->key() : QString::null; +} + +void KIconCanvas::stopLoading() +{ + d->m_bLoading = false; +} + +void KIconCanvas::slotCurrentChanged(QIconViewItem *item) +{ + emit nameChanged((item != 0L) ? item->text() : QString::null); +} + +void KIconCanvas::setGroupOrSize( int groupOrSize ) +{ + d->mSize = ((int)groupOrSize >= 0) ? + mpLoader->currentSize((KIcon::Group)groupOrSize) : + -groupOrSize; +} + +void KIconCanvas::setStrictIconSize( bool strictIconSize ) +{ + d->mStrictIconSize = strictIconSize; +} + +QDragObject *KIconCanvas::dragObject() +{ + // We use QImageDrag rather than KURLDrag so that the user can't drag an icon out of the theme! + // TODO: support SVG? + QPixmap *pixmap = currentItem()->pixmap(); + QPoint pos = viewportToContents( viewport()->mapFromGlobal( QCursor::pos() ) ); + QPoint hot; + hot.setX(pos.x() - currentItem()->pos().x() - (currentItem()->width() - pixmap->width()) / 2); + hot.setY(pos.y() - currentItem()->pos().y() - (currentItem()->height() - pixmap->height()) / 2); + QImageDrag *drag = new QImageDrag( pixmap->convertToImage(), this ); + drag->setPixmap(*pixmap, hot); + return drag; +} + +#include "kiconcanvas.moc" diff --git a/src/kiconcanvas.h b/src/kiconcanvas.h new file mode 100644 index 0000000..fe8f58a --- /dev/null +++ b/src/kiconcanvas.h @@ -0,0 +1,89 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; mixedindent off; indent-mode cstyle; + * + * This file is part of the KDE project, module kfile. + * Copyright (C) 2006 Luke Sandell + * (C) 2002 Carsten Pfeiffer + * (C) 2000 Geert Jansen + * (C) 2000 Kurt Granroth + * (C) 1997 Christoph Neerfeld + * + * This is free software; it comes under the GNU Library General + * Public License, version 2. See the file "COPYING.LIB" for the + * exact licensing terms. + */ + +#ifndef _KICONCANVAS_H_ +#define _KICONCANVAS_H_ + +#include +#include +#include + +class QTimer; +class KIconLoader; +class QDragObject; +class QIconLoader; + +/** + * Icon canvas for KIconDialog. + */ +class KIO_EXPORT KIconCanvas: public KIconView +/* NOTE: Why export this? */ +{ + Q_OBJECT + +public: + KIconCanvas(QWidget *parent=0L, const char *name=0L); + ~KIconCanvas(); + + /** + * Load icons into the canvas. + */ + void loadFiles(const QStringList& files); + + /** + * Returns the current icon. + */ + QString getCurrent() const; + + void setIconLoader(KIconLoader *loader); + + void setGroupOrSize(int groupOrSize); + + void setStrictIconSize(bool strictIconSize); + +public slots: + void stopLoading(); + +signals: + /** + * Emitted when the current icon has changed. + */ + void nameChanged(QString); + /* KDE 4: Make it const QString */ + + void startLoading(int); + void progress(int); + void finished(); + +private slots: + void slotLoadFiles(); + void slotCurrentChanged(QIconViewItem *item); + +private: + QStringList mFiles; + QTimer *mpTimer; + KIconLoader *mpLoader; + +protected: + virtual void virtual_hook( int id, void* data ); + virtual QDragObject *dragObject(); + void loadIcon(const QString &path); + +private: + class KIconCanvasPrivate; + KIconCanvasPrivate *d; +}; + +#endif diff --git a/src/kicondialog.cpp b/src/kicondialog.cpp new file mode 100644 index 0000000..e5bf262 --- /dev/null +++ b/src/kicondialog.cpp @@ -0,0 +1,559 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; mixedindent off; indent-mode cstyle; + * + * This file is part of the KDE project, module kfile. + * Copyright (C) 2006 Luke Sandell + * (C) 2002 Carsten Pfeiffer + * (C) 2000 Geert Jansen + * (C) 2000 Kurt Granroth + * (C) 1997 Christoph Neerfeld + * + * This is free software; it comes under the GNU Library General + * Public License, version 2. See the file "COPYING.LIB" for the + * exact licensing terms. + */ + +#include "kicondialogui.h" +#include "kicondialog.h" +#include "kiconcanvas.h" + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* NOTE: Must be in the same order as listbox */ +enum ExtendedContext +{ + ALL = 0, + RECENT = 1, + // Action thru MimeType, subtract 1 to convert to KIcon::Context + OTHER = 7 +}; + +class KIconDialog::KIconDialogPrivate +{ + public: + KIconDialogPrivate() { + m_bStrictIconSize = true; + } + ~KIconDialogPrivate() {} + bool m_bStrictIconSize; + QString custom; + QString customLocation; + int recentMax; + QStringList recentList; + ExtendedContext extendedContext; + KIconDialogUI *ui; /* FIXME: KDE4 probably move this to the main class */ +}; + +/* + * KIconDialog: Dialog for selecting icons. Both system and user + * specified icons can be chosen. + */ + +KIconDialog::KIconDialog(QWidget *parent, const char*) + : KDialogBase(parent, "IconDialog", true, i18n("Select Icon"), Ok|Cancel, Ok) +{ + d = new KIconDialogPrivate; + mpLoader = KGlobal::iconLoader(); + init(); + resize(minimumSize()); +} + +KIconDialog::KIconDialog(KIconLoader *loader, QWidget *parent, + const char *name) + : KDialogBase(parent, name, true, i18n("Select Icon"), Ok|Cancel, Ok) +{ + d = new KIconDialogPrivate; + mpLoader = loader; + init(); +} + +void KIconDialog::init() +{ + mGroupOrSize = KIcon::Desktop; + d->extendedContext = ALL; + mType = 0; + setCustomLocation(QString::null); // Initialize mFileList + + // Read configuration + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "KIconDialog"); + d->recentMax = config->readNumEntry("RecentMax", 10); + d->recentList = config->readPathListEntry("RecentIcons"); + + d->ui = new KIconDialogUI( this ); + setMainWidget(d->ui); + + d->ui->searchLine->setIconView(d->ui->iconCanvas); + d->ui->searchLine->setCaseSensitive(false); + + // Hack standard Gui item, as KDevDesigner won't let us + d->ui->browseButton->setText(i18n("&Browse...")); + + connect(d->ui->browseButton, SIGNAL(clicked()), SLOT(slotBrowse())); + connect(d->ui->listBox, SIGNAL(highlighted(int)), SLOT(slotContext(int))); + connect(d->ui->iconCanvas, SIGNAL(executed(QIconViewItem *)), SLOT(slotOk())); + connect(d->ui->iconCanvas, SIGNAL(returnPressed(QIconViewItem *)), SLOT(slotOk())); + connect(d->ui->iconCanvas, SIGNAL(startLoading(int)), SLOT(slotStartLoading(int))); + connect(d->ui->iconCanvas, SIGNAL(progress(int)), SLOT(slotProgress(int))); + connect(d->ui->iconCanvas, SIGNAL(finished()), SLOT(slotFinished())); + connect(this, SIGNAL(hidden()), d->ui->iconCanvas, SLOT(stopLoading())); + + // NOTE: this must be consistent with the IconType enum (see above) + d->ui->listBox->insertItem(i18n("(All Icons)")); + d->ui->listBox->insertItem(i18n("(Recent)")); + d->ui->listBox->insertItem(i18n("Actions")); + d->ui->listBox->insertItem(i18n("Applications")); + d->ui->listBox->insertItem(i18n("Devices")); + d->ui->listBox->insertItem(i18n("Filesystem")); + d->ui->listBox->insertItem(i18n("File Types")); + d->ui->listBox->insertItem(i18n("Miscellaneous")); +} + +KIconDialog::~KIconDialog() +{ + // Write configuration + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "KIconDialog"); + config->writeEntry("RecentMax", d->recentMax, true, true); + config->writePathEntry("RecentIcons", d->recentList, ',', true, true); + + delete d; +} + +void KIconDialog::slotAcceptIcons() +{ + //FIXME: not used anymore +} + +void KIconDialog::showIcons() +{ + d->ui->iconCanvas->clear(); + QStringList filelist; + + KIcon::Context context = static_cast(d->extendedContext - 1); + switch (d->extendedContext) + { + case RECENT: + filelist = d->recentList; + break; + case OTHER: + filelist = mFileList; + break; + case ALL: + filelist = mFileList; + context = KIcon::Any; + // ** Fallthrough to next case ** + default: + QStringList list; + if (d->m_bStrictIconSize) + list=mpLoader->queryIcons(mGroupOrSize, context); + else + list=mpLoader->queryIconsByContext(mGroupOrSize, context); + + // Remove path & extension + for ( QStringList::iterator it = list.begin(); it != list.end(); ++it) + filelist.append(QFileInfo(*it).baseName()); + } + + // Remove duplicate icons FIXME: Qt4 we can just use QSet + filelist.sort(); + QString prev; + for ( QStringList::iterator it = filelist.begin(); it != filelist.end(); ) + { + if (*it == prev) + { + it = filelist.remove(it); + } + else + { + prev = *it; + ++it; + } + } + + d->ui->iconCanvas->setGroupOrSize(mGroupOrSize); + d->ui->iconCanvas->loadFiles(filelist); +} + +void KIconDialog::setStrictIconSize(bool b) +{ + d->m_bStrictIconSize=b; +} + +bool KIconDialog::strictIconSize() const +{ + return d->m_bStrictIconSize; +} + +void KIconDialog::setIconSize( int size ) +{ + // see KIconLoader, if you think this is weird + if ( size == 0 ) + mGroupOrSize = KIcon::Desktop; // default Group + else + mGroupOrSize = -size; // yes, KIconLoader::queryIconsByContext is weird +} + +int KIconDialog::iconSize() const +{ + // 0 or any other value ==> mGroupOrSize is a group, so we return 0 + return (mGroupOrSize < 0) ? -mGroupOrSize : 0; +} + +#ifndef KDE_NO_COMPAT +QString KIconDialog::selectIcon(KIcon::Group group, KIcon::Context context, bool user) +{ + setup( group, context, false, 0, user ); + return openDialog(); +} +#endif + +void KIconDialog::setup(KIcon::Group group, KIcon::Context context, + bool strictIconSize, int iconSize, bool user ) +{ + setup(group, context, strictIconSize, iconSize, user, false, false); +} + +void KIconDialog::setup(KIcon::Group group, KIcon::Context context, + bool strictIconSize, int iconSize, bool user, + bool lockContext, bool lockBrowse ) +{ + d->m_bStrictIconSize = strictIconSize; + d->ui->iconCanvas->setStrictIconSize(strictIconSize); + mGroupOrSize = (iconSize == 0) ? group : -iconSize; + mType = user; + + d->extendedContext = static_cast( ( context == KIcon::Any ) ? ALL : context + 1 ); + + // We cannot change layout because it is protected ;-( + // FIXME: Qt4 we will be able to inherit from both QDialog and our GUI + d->ui->listBox->setEnabled(!lockContext); + d->ui->browseButton->setEnabled(!lockBrowse); + d->ui->listBox->setHidden(lockContext && lockBrowse); + d->ui->browseButton->setHidden(lockContext && lockBrowse); + + d->ui->listBox->setCurrentItem(d->extendedContext); +} + +const QString & KIconDialog::customLocation( ) const +{ + return d->customLocation; +} + +void KIconDialog::setCustomLocation( const QString& location ) +{ + d->customLocation = location; + + if (location.isEmpty()) + { + mFileList = KGlobal::dirs()->findAllResources("appicon", QString::fromLatin1("*.png")); + } else { + mFileList = mpLoader->queryIconsByDir(location); + } +} + +QString KIconDialog::openDialog() +{ + showIcons(); + + if ( exec() == Accepted ) + { + if (!d->custom.isEmpty()) + return d->custom; + else + return d->ui->iconCanvas->getCurrent(); + } + else + { + return QString::null; + } +} + +void KIconDialog::showDialog() +{ + d->custom = QString::null; + + // Make it so minimumSize returns correct value + d->ui->filterLabel->hide(); + d->ui->searchLine->hide(); + d->ui->progressBar->show(); + + setModal(false); + show(); + + // FIXME: this should be before show() but it doesn't work ;-( + resize(minimumSize()); + + showIcons(); +} + +void KIconDialog::slotOk() +{ + QString key = !d->custom.isEmpty() ? d->custom : d->ui->iconCanvas->getCurrent(); + + // Append to list of recent icons + if (!d->recentList.contains(key)) + { + d->recentList.push_back(key); + + // Limit recent list in size + while ( (int)d->recentList.size() > d->recentMax ) + d->recentList.pop_front(); + } + + emit newIconName(key); + KDialogBase::slotOk(); +} + +QString KIconDialog::getIcon(KIcon::Group group, KIcon::Context context, + bool strictIconSize, int iconSize, bool user, + QWidget *parent, const QString &caption) +{ + KIconDialog dlg(parent, "icon dialog"); + dlg.setup( group, context, strictIconSize, iconSize, user ); + if (!caption.isNull()) + dlg.setCaption(caption); + + return dlg.openDialog(); +} + +void KIconDialog::slotBrowse() +{ + // Create a file dialog to select a PNG, XPM or SVG file, + // with the image previewer shown. + // KFileDialog::getImageOpenURL doesn't allow svg. + KFileDialog dlg(QString::null, i18n("*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)"), + this, "filedialog", true); + dlg.setOperationMode( KFileDialog::Opening ); + dlg.setCaption( i18n("Open") ); + dlg.setMode( KFile::File | KFile::ExistingOnly | KFile::LocalOnly ); + KImageFilePreview *ip = new KImageFilePreview( &dlg ); + dlg.setPreviewWidget( ip ); + dlg.exec(); + + QString file = dlg.selectedFile(); + if (!file.isEmpty()) + { + d->custom = file; + if ( mType == 1 ) + setCustomLocation(QFileInfo( file ).dirPath( true )); + slotOk(); + } +} + +void KIconDialog::slotContext(int id) +{ + d->extendedContext = static_cast(id); + showIcons(); +} + +void KIconDialog::slotStartLoading(int steps) +{ + if (steps < 10) + d->ui->progressBar->hide(); + else + { + d->ui->progressBar->setTotalSteps(steps); + d->ui->progressBar->setProgress(0); + d->ui->progressBar->show(); + d->ui->filterLabel->hide(); + d->ui->searchLine->hide(); + } +} + +void KIconDialog::slotProgress(int p) +{ + d->ui->progressBar->setProgress(p); +} + +void KIconDialog::slotFinished() +{ + d->ui->progressBar->hide(); + d->ui->filterLabel->show(); + d->ui->searchLine->show(); +} + +class KIconButton::KIconButtonPrivate +{ + public: + KIconButtonPrivate() { + m_bStrictIconSize = false; + iconSize = 0; // let KIconLoader choose the default + } + ~KIconButtonPrivate() {} + bool m_bStrictIconSize; + bool lockUser; + bool lockCustom; + int iconSize; +}; + + +/* + * KIconButton: A "choose icon" pushbutton. + */ + +KIconButton::KIconButton(QWidget *parent, const char *name) + : QPushButton(parent, name) +{ + init( KGlobal::iconLoader() ); +} + +KIconButton::KIconButton(KIconLoader *loader, + QWidget *parent, const char *name) + : QPushButton(parent, name) +{ + init( loader ); +} + +void KIconButton::init( KIconLoader *loader ) +{ + d = new KIconButtonPrivate; + mGroup = KIcon::Desktop; + mContext = KIcon::Application; + mbUser = false; + + mpLoader = loader; + mpDialog = 0L; + connect(this, SIGNAL(clicked()), SLOT(slotChangeIcon())); +} + +KIconButton::~KIconButton() +{ + delete mpDialog; + delete d; +} + +void KIconButton::setStrictIconSize(bool b) +{ + d->m_bStrictIconSize=b; +} + +bool KIconButton::strictIconSize() const +{ + return d->m_bStrictIconSize; +} + +void KIconButton::setIconSize( int size ) +{ + d->iconSize = size; +} + +int KIconButton::iconSize() const +{ + return d->iconSize; +} + +void KIconButton::setIconType(KIcon::Group group, KIcon::Context context, bool user) +{ + mGroup = group; + mContext = context; + mbUser = user; + d->lockUser = false; + d->lockCustom = false; +} + +void KIconButton::setIconType(KIcon::Group group, KIcon::Context context, bool user, bool lockUser, bool lockCustom) +{ + mGroup = group; + mContext = context; + mbUser = user; + d->lockUser = lockUser; + d->lockCustom = lockCustom; +} + +void KIconButton::setIcon(const QString& icon) +{ + mIcon = icon; + setIconSet(mpLoader->loadIconSet(mIcon, mGroup, d->iconSize)); + + if (!mpDialog) + { + mpDialog = new KIconDialog(mpLoader, this); + connect(mpDialog, SIGNAL(newIconName(const QString&)), SLOT(newIconName(const QString&))); + } +} + +const QString & KIconButton::customLocation( ) const +{ + return mpDialog ? mpDialog->customLocation() : QString::null; +} + +void KIconButton::setCustomLocation(const QString &custom) +{ + if (!mpDialog) + { + mpDialog = new KIconDialog(mpLoader, this); + connect(mpDialog, SIGNAL(newIconName(const QString&)), SLOT(newIconName(const QString&))); + } + + mpDialog->setCustomLocation(custom); +} + +void KIconButton::resetIcon() +{ + mIcon = QString::null; + setIconSet(QIconSet()); +} + +void KIconButton::slotChangeIcon() +{ + if (!mpDialog) + { + mpDialog = new KIconDialog(mpLoader, this); + connect(mpDialog, SIGNAL(newIconName(const QString&)), SLOT(newIconName(const QString&))); + } + + mpDialog->setup( mGroup, mContext, d->m_bStrictIconSize, d->iconSize, mbUser, d->lockUser, d->lockCustom ); + mpDialog->showDialog(); +} + +void KIconButton::newIconName(const QString& name) +{ + if (name.isEmpty()) + return; + + QIconSet iconset = mpLoader->loadIconSet(name, mGroup, d->iconSize); + setIconSet(iconset); + mIcon = name; + + emit iconChanged(name); +} + +void KIconCanvas::virtual_hook( int id, void* data ) +{ KIconView::virtual_hook( id, data ); } + +void KIconDialog::virtual_hook( int id, void* data ) +{ KDialogBase::virtual_hook( id, data ); } + +#include "kicondialog.moc" diff --git a/src/kicondialog.h b/src/kicondialog.h new file mode 100644 index 0000000..6b03bd4 --- /dev/null +++ b/src/kicondialog.h @@ -0,0 +1,329 @@ +/* vi: ts=8 sts=4 sw=4 + * kate: space-indent on; indent-width 4; mixedindent off; indent-mode cstyle; + * + * This file is part of the KDE project, module kfile. + * Copyright (C) 2006 Luke Sandell + * (C) 2002 Carsten Pfeiffer + * (C) 2000 Geert Jansen + * (C) 2000 Kurt Granroth + * (C) 1997 Christoph Neerfeld + * + * This is free software; it comes under the GNU Library General + * Public License, version 2. See the file "COPYING.LIB" for the + * exact licensing terms. + */ + +#ifndef __KIconDialog_h__ +#define __KIconDialog_h__ + +#include +#include +#include + +#include +#include +#include + +#include // FIXME: BCI KDE 3 expects KIconCanvas to be defined in kicondialog.h + +class KIconDialogUI; + +class QComboBox; +class QTimer; +class QKeyEvent; +class QRadioButton; +class KProgress; +class KIconLoader; + +/** + * Dialog for interactive selection of icons. Use the function + * getIcon() let the user select an icon. + * + * @short An icon selection dialog. + */ +class KIO_EXPORT KIconDialog: public KDialogBase +{ + Q_OBJECT + +public: + /** + * Constructs an icon selection dialog using the global iconloader. + */ + KIconDialog(QWidget *parent=0L, const char *name=0L); + /** + * Constructs an icon selection dialog using a specific iconloader. + */ + KIconDialog(KIconLoader *loader, QWidget *parent=0, + const char *name=0); + /** + * Destructs the dialog. + */ + ~KIconDialog(); + + /** + * Sets a strict icon size policy for allowed icons. When true, + * only icons of the specified group's size in getIcon() are shown. + * When false, icons not available at the desired group's size will + * also be selectable. + */ + void setStrictIconSize(bool b); + /** + * Returns true if a strict icon size policy is set. + */ + bool strictIconSize() const; + + /** + * gets the custom icon directory + */ + const QString & customLocation() const; + + /** + * sets a custom icon directory + * @since 3.1 + */ + void setCustomLocation( const QString& location ); + + /** + * Sets the size of the icons to be shown / selected. + * @see KIcon::StdSizes + * @see iconSize + */ + void setIconSize(int size); + + /** + * Returns the iconsize set via setIconSize() or 0, if the default + * iconsize will be used. + */ + int iconSize() const; + +#ifndef KDE_NO_COMPAT + /** + * @deprecated in KDE 3.0, use the static method getIcon instead. + */ + QString selectIcon(KIcon::Group group=KIcon::Desktop, KIcon::Context + context=KIcon::Application, bool user=false); +#endif + + /** + * Allows you to set the same parameters as in the class method + * getIcon(). + * + */ + void setup( KIcon::Group group, + KIcon::Context context = KIcon::Application, + bool strictIconSize = false, int iconSize = 0, + bool user = false ); + /* FIXME: KDE4 remove -- same as next method with default arguments */ + + /** + * Allows you to set the same parameters as in the class method + * getIcon(), as well as two additional parameters to lock + * the choice between system and user dirs and to lock the custom user + * dir itself. + * + * @since 3.3 + */ + void setup( KIcon::Group group, KIcon::Context context, + bool strictIconSize, int iconSize, bool user, bool lockContext, + bool lockBrowse ); + // FIXME: KDE4 add default arguments (right now this would cause ambiguity with previous method) + + /** + * exec()utes this modal dialog and returns the name of the selected icon, + * or QString::null if the dialog was aborted. + * @returns the name of the icon, suitable for loading with KIconLoader. + * @see getIcon + */ + QString openDialog(); + + /** + * show()es this dialog and emits a newIcon(const QString&) signal when + * successful. QString::null will be emitted if the dialog was aborted. + */ + void showDialog(); + + /** + * Pops up the dialog an lets the user select an icon. + * + * @param group The icon group this icon is intended for. Providing the + * group shows the icons in the dialog with the same appearance as when + * used outside the dialog. + * @param context The initial icon context. Initially, the icons having + * this context are shown in the dialog. The user can change this. + * @param strictIconSize When true, only icons of the specified group's size + * are shown, otherwise icon not available in the desired group's size + * will also be selectable. + * @param iconSize the size of the icons -- the default of the icongroup + * if set to 0 + * @param user Begin with the "user icons" instead of "system icons". + * @param parent The parent widget of the dialog. + * @param caption The caption to use for the dialog. + * @return The name of the icon, suitable for loading with KIconLoader. + * @version New in 3.0 + */ + static QString getIcon(KIcon::Group group=KIcon::Desktop, + KIcon::Context context=KIcon::Application, + bool strictIconSize=false, int iconSize = 0, + bool user=false, QWidget *parent=0, + const QString &caption=QString::null); + +signals: + void newIconName(const QString&); + +protected slots: + void slotOk(); + +private slots: + void slotContext(int); + void slotStartLoading(int); + void slotProgress(int); + void slotFinished(); + void slotAcceptIcons(); + void slotBrowse(); +private: + void init(); + void showIcons(); + + int mGroupOrSize; + KIcon::Context mContext; + int mType; + + QStringList mFileList; + + // FIXME: the following fields are obsolete, remove in KDE4 + QComboBox *mpCombo; + QPushButton *mpBrowseBut; + QRadioButton *mpRb1, *mpRb2; + KProgress *mpProgress; + + KIconLoader *mpLoader; + + KIconCanvas *mpCanvas; // FIXME: obsolete, remove in KDE4 +protected: + virtual void virtual_hook( int id, void* data ); +private: + class KIconDialogPrivate; + KIconDialogPrivate *d; +}; + + +/** + * A pushbutton for choosing an icon. Pressing on the button will open a + * KIconDialog for the user to select an icon. The current icon will be + * displayed on the button. + * + * @see KIconDialog + * @short A push button that allows selection of an icon. + */ +class KIO_EXPORT KIconButton: public QPushButton +{ + Q_OBJECT + Q_PROPERTY( QString icon READ icon WRITE setIcon RESET resetIcon ) + Q_PROPERTY( int iconSize READ iconSize WRITE setIconSize) + Q_PROPERTY( bool strictIconSize READ strictIconSize WRITE setStrictIconSize ) + Q_PROPERTY( QString customLocation READ customLocation WRITE setCustomLocation ) + +public: + /** + * Constructs a KIconButton using the global iconloader. + */ + KIconButton(QWidget *parent=0L, const char *name=0L); + + /** + * Constructs a KIconButton using a specific KIconLoader. + */ + KIconButton(KIconLoader *loader, QWidget *parent, const char *name=0L); + /** + * Destructs the button. + */ + ~KIconButton(); + + /** + * Sets a strict icon size policy for allowed icons. When true, + * only icons of the specified group's size in setIconType are allowed, + * and only icons of that size will be shown in the icon dialog. + */ + void setStrictIconSize(bool b); + /** + * Returns true if a strict icon size policy is set. + */ + bool strictIconSize() const; + + /** + * Sets the icon group and context. Use KIcon::NoGroup if you want to + * allow icons for any group in the given context. + */ + void setIconType(KIcon::Group group, KIcon::Context context, bool user=false); + + + /** + * Same as above method, but allows you to specify whether user and custom mode should be locked. + */ + void setIconType(KIcon::Group group, KIcon::Context context, bool user, bool lockContext, bool lockBrowse); + /* FIXME: KDE4 this should replace the above method using default params */ + + /** + * sets a custom icon directory + */ + void setCustomLocation(const QString &custom); + + /** + * get the custom icon directory + */ + const QString & customLocation() const; + + /** + * Sets the button's initial icon. + */ + void setIcon(const QString& icon); + + /** + * Resets the icon (reverts to an empty button). + */ + void resetIcon(); + + /** + * Returns the name of the selected icon. + */ + QString icon() const { return mIcon; } + + /** + * Sets the size of the icon to be shown / selected. + * @see KIcon::StdSizes + * @see iconSize + */ + void setIconSize( int size ); + + /** + * Returns the iconsize set via setIconSize() or 0, if the default + * iconsize will be used. + */ + int iconSize() const; + +signals: + /** + * Emitted when the icon has changed. + */ + void iconChanged(QString icon); + /* FIXME: KDE4: Make it const QString & */ + +private slots: + void slotChangeIcon(); + void newIconName(const QString& name); + +private: + void init( KIconLoader *loader ); + + bool mbUser; + KIcon::Group mGroup; + KIcon::Context mContext; + + QString mIcon; + KIconDialog *mpDialog; + KIconLoader *mpLoader; + class KIconButtonPrivate; + KIconButtonPrivate *d; +}; + + +#endif // __KIconDialog_h__ diff --git a/src/kicondialogui.ui b/src/kicondialogui.ui new file mode 100644 index 0000000..9cd6587 --- /dev/null +++ b/src/kicondialogui.ui @@ -0,0 +1,243 @@ + +KIconDialogUI +Luke Sandell + + + KIconDialogUI + + + + 0 + 0 + 474 + 340 + + + + + 3 + 3 + 0 + 0 + + + + + 0 + 0 + + + + KIconDialogUI + + + + unnamed + + + 0 + + + + listBox + + + + 5 + 3 + 0 + 0 + + + + + + iconCanvas + + + + 370 + 290 + + + + WheelFocus + + + 80 + + + false + + + + + layout4 + + + + unnamed + + + 0 + + + + layout3 + + + + unnamed + + + + filterLabel + + + + 0 + 5 + 0 + 0 + + + + Fi&lter: + + + searchLine + + + + + searchLine + + + + 7 + 0 + 0 + 0 + + + + StrongFocus + + + + + + + progressBar + + + + 7 + 0 + 0 + 0 + + + + + + + + browseButton + + + + 0 + 0 + 0 + 0 + + + + &Open... + + + Alt+O + + + false + + + 18 + + + + + + + KIconViewSearchLine +
      kiconviewsearchline.h
      + + -1 + -1 + + 0 + + 5 + 5 + 0 + 0 + + image0 + updateSearch(const QString &s) + setCaseSensitive(bool cs) + setIconView(QIconView *iv) + clear() +
      + + KIconCanvas +
      kiconcanvas.h
      + + -1 + -1 + + 0 + + 5 + 5 + 0 + 0 + + image1 + nameChanged(QString &) + startLoading(int) + progress(int) + finished() + nameChanged(QString name) + slot() + stopLoading() + gridX + gridY + itemsMovable + wordWrapIconText + autoArrange +
      +
      + + + 789c534e494dcbcc4b554829cdcdad8c2fcf4c29c95030e0524611cd48cd4ccf28010a1797249664262b2467241641a592324b8aa363156c15aab914146aadb90067111b1f + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042c49444154388db5954f6c14551cc73fefcd7476b65bdaae4bb78bb5502a14d404e4801c88182d1c4c2c693da847400f9c24c68b878684238660e2b1e01f12c19493012ef2478c814412d354a46017a8a564bb6da5bbedccee767776e63d0ffb073751d483bfe49799974c3eeffb7ebf37df9fd05a530b2184040cc0042420aaf9a4d0d554800f045a6b256ae0e1e1e1d6bebebe838ee31c48a7d39b5cd7fd075e251cc7617272f2ded8d8d819cff33e0316819259537aead4a9839d5dd6d1784f91f55b0a94830242088404d304292bef68a89f520802a598fecddaa04f1a876f5c250c7c0a64cdeac686e33807e23d45e6b297c8b877f1831542614550b6599835c83c2a81b6786a75134faf2f1169f12997350881d9021d0903e06de0745d3160a6d3e94dbd5b0a64dcbb94b5831d0e3375ab892b1772dcf9790528543f8dd0d367b36768153b5e31503a0f1aecb004580b44ffac58baae8b1714f0833c7638cc8dab303a320f4822ab4c7a37c69196203de3319d5ce1c4d13c733331dedc67a129a154fd128401ab0616d55a130ac3d42d93d1913940d13fd0c9ee0183685c60da01c5421bd72f7a8c8efccef9afd374267ad93d642365be0636a0d28ec7600941d9e6f23917f0e97f23ce5bef35d19ec863da0ed9059b2be70bec196c66dfa10ec0e49b338f7017258651bf95021035c595429bb0903248fe52a2b5b595dd7b4d945cc2340cdca536be389ee3f67886c5798f773fe8e0dac508c989659277a2180da4ca4ff07821058b8b251445d63d6b13ed1098a6417e39cac85197dbe31962ab9bd9f1f22a226d45366f6d0620fdb08c900d281af6110284b20085b414861d905d88f2e52739ee8cbb8022143259d3dd84691730aa2d52da441a8de0c6958068870022a41e9629ad3473fd3b8fdbe319dadb9b4924da994d2d716c7896fbe35152f78b48245d6b2da4507faf582be8eaf159b721cc837b05ae7debb1f79d08cb8b515edad942a22bc4b1c33eb3d34b1c797f06af90a72d16e2f96d9a74aa11dca8586b222d01af0fb60070f6c402d72f15d97f28c6f6d7027a5f5ce6c3233dc4e2ede496b278be4fff608cee8d3e1add806aeca51094cbb06397c1ecc328e746537c7e3ccdb5cb1136bf60635882d4d41c6ec6836ab37efa214f72208ed9f4d7cdd38ee310280542e38b1c43fb6de26b3672e1ec3cc99bcb246f66a938a3241ab3e91f7c861fbf77710b1e5e49915bae974203ba0e9e9c9cbc373d6d6d305a040a89c2a77f50b27d5782bbbf7acccf28349235dd16cf6dd374f7295e1de8a45c02d37499182b01cc0201a085d61a2144d8b2ac8fb6ed340e77240c4261890e04c250185262546d534a032154b59e0ad394e41c98182bf268ce6721ed9f064e0253356f6da2e24c1f030f783c15fe6da680af8021602bd051532ca9b8521488559f61aa86c29343578fbf0264a94c906c7d3409214c20043457a116ff6de6795578012889ff6b98fe016ea0ce1c6a2573410000000049454e44ae426082 + + + + listBox + iconCanvas + browseButton + searchLine + + + + klistbox.h + kiconcanvas.h + kiconviewsearchline.h + kprogress.h + kpushbutton.h + +
      diff --git a/src/likeback.cpp b/src/likeback.cpp new file mode 100644 index 0000000..5beafc8 --- /dev/null +++ b/src/likeback.cpp @@ -0,0 +1,854 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sebastien Laout * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This 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 Library 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. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include "likeback.h" +#include "likeback_private.h" + +/****************************************/ +/********** class LikeBackBar: **********/ +/****************************************/ + +LikeBackBar::LikeBackBar(LikeBack *likeBack) + : QWidget(0, "LikeBackBar", Qt::WX11BypassWM | Qt::WStyle_NoBorder | Qt::WNoAutoErase | Qt::WStyle_StaysOnTop | Qt::WStyle_NoBorder | Qt::Qt::WGroupLeader) + , m_likeBack(likeBack) +{ + QHBoxLayout *layout = new QHBoxLayout(this); + + QIconSet likeIconSet = kapp->iconLoader()->loadIconSet("likeback_like", KIcon::Small); + QIconSet dislikeIconSet = kapp->iconLoader()->loadIconSet("likeback_dislike", KIcon::Small); + QIconSet bugIconSet = kapp->iconLoader()->loadIconSet("likeback_bug", KIcon::Small); + QIconSet featureIconSet = kapp->iconLoader()->loadIconSet("likeback_feature", KIcon::Small); + + m_likeButton = new QToolButton(this, "likeback_like"); + m_likeButton->setIconSet(likeIconSet); + m_likeButton->setTextLabel("

      " + i18n("Send application developers a comment about something you like")); + m_likeButton->setAutoRaise(true); + connect( m_likeButton, SIGNAL(clicked()), this, SLOT(clickedLike()) ); + layout->add(m_likeButton); + + m_dislikeButton = new QToolButton(this, "likeback_dislike"); + m_dislikeButton->setIconSet(dislikeIconSet); + m_dislikeButton->setTextLabel("

      " + i18n("Send application developers a comment about something you dislike")); + m_dislikeButton->setAutoRaise(true); + connect( m_dislikeButton, SIGNAL(clicked()), this, SLOT(clickedDislike()) ); + layout->add(m_dislikeButton); + + m_bugButton = new QToolButton(this, "likeback_bug"); + m_bugButton->setIconSet(bugIconSet); + m_bugButton->setTextLabel("

      " + i18n("Send application developers a comment about an improper behavior of the application")); + m_bugButton->setAutoRaise(true); + connect( m_bugButton, SIGNAL(clicked()), this, SLOT(clickedBug()) ); + layout->add(m_bugButton); + + m_featureButton = new QToolButton(this, "likeback_feature"); + m_featureButton->setIconSet(featureIconSet); + m_featureButton->setTextLabel("

      " + i18n("Send application developers a comment about a new feature you desire")); + m_featureButton->setAutoRaise(true); + connect( m_featureButton, SIGNAL(clicked()), this, SLOT(clickedFeature()) ); + layout->add(m_featureButton); + + connect( &m_timer, SIGNAL(timeout()), this, SLOT(autoMove()) ); + + LikeBack::Button buttons = likeBack->buttons(); + m_likeButton->setShown( buttons & LikeBack::Like ); + m_dislikeButton->setShown( buttons & LikeBack::Dislike ); + m_bugButton->setShown( buttons & LikeBack::Bug ); + m_featureButton->setShown( buttons & LikeBack::Feature ); +} + +LikeBackBar::~LikeBackBar() +{ +} + +void LikeBackBar::startTimer() +{ + m_timer.start(10); +} + +void LikeBackBar::stopTimer() +{ + m_timer.stop(); +} + +void LikeBackBar::autoMove() +{ + static QWidget *lastWindow = 0; + + QWidget *window = kapp->activeWindow(); + // When a Kicker applet has the focus, like the Commandline QLineEdit, + // the systemtray icon indicates to be the current window and the LikeBack is shown next to the system tray icon. + // It's obviously bad ;-) : + bool shouldShow = (m_likeBack->userWantsToShowBar() && m_likeBack->enabledBar() && window && !window->inherits("KSystemTray")); + if (shouldShow) { + //move(window->x() + window->width() - 100 - width(), window->y()); + //move(window->x() + window->width() - 100 - width(), window->mapToGlobal(QPoint(0, 0)).y() - height()); + move(window->mapToGlobal(QPoint(0, 0)).x() + window->width() - width(), window->mapToGlobal(QPoint(0, 0)).y() + 1); + + if (window != lastWindow && m_likeBack->windowNamesListing() != LikeBack::NoListing) { + if (qstricmp(window->name(), "") == 0 || qstricmp(window->name(), "unnamed") == 0) { + std::cout << "===== LikeBack ===== UNNAMED ACTIVE WINDOW OF TYPE " << window->className() << " ======" << LikeBack::activeWindowPath() << std::endl; + } else if (m_likeBack->windowNamesListing() == LikeBack::AllWindows) { + std::cout << "LikeBack: Active Window: " << LikeBack::activeWindowPath() << std::endl; + } + } + lastWindow = window; + } + + // Show or hide the bar accordingly: + if (shouldShow && !isShown()) { + show(); + } else if (!shouldShow && isShown()) { + hide(); + } +} + +void LikeBackBar::clickedLike() +{ + m_likeBack->execCommentDialog(LikeBack::Like); +} + +void LikeBackBar::clickedDislike() +{ + m_likeBack->execCommentDialog(LikeBack::Dislike); +} + +void LikeBackBar::clickedBug() +{ + m_likeBack->execCommentDialog(LikeBack::Bug); +} + +void LikeBackBar::clickedFeature() +{ + m_likeBack->execCommentDialog(LikeBack::Feature); +} + +/********************************************/ +/********** class LikeBackPrivate: **********/ +/********************************************/ + +LikeBackPrivate::LikeBackPrivate() + : bar(0) + , config(0) + , aboutData(0) + , buttons(LikeBack::DefaultButtons) + , hostName() + , remotePath() + , hostPort(80) + , acceptedLocales() + , acceptedLanguagesMessage() + , windowListing(LikeBack::NoListing) + , showBar(false) + , disabledCount(0) + , fetchedEmail() + , action(0) +{ +} + +LikeBackPrivate::~LikeBackPrivate() +{ + delete bar; + delete action; + + config = 0; + aboutData = 0; +} + +/*************************************/ +/********** class LikeBack: **********/ +/*************************************/ + +LikeBack::LikeBack(Button buttons, bool showBarByDefault, KConfig *config, const KAboutData *aboutData) + : QObject() +{ + // Initialize properties (1/2): + d = new LikeBackPrivate(); + d->buttons = buttons; + d->config = config; + d->aboutData = aboutData; + d->showBarByDefault = showBarByDefault; + + // Use default KApplication config and aboutData if not provided: + if (d->config == 0) + d->config = kapp->config(); + if (d->aboutData == 0) + d->aboutData = kapp->aboutData(); + + // Initialize properties (2/2) [Needs aboutData to be set]: + d->showBar = userWantsToShowBar(); + + // Fetch the KControl user email address as a default one: + if (!emailAddressAlreadyProvided()) + fetchUserEmail(); + + // Initialize the button-bar: + d->bar = new LikeBackBar(this); + d->bar->resize(d->bar->sizeHint()); + + // Show the information message if it is the first time, and if the button-bar is shown: + static const char *messageShown = "LikeBack_starting_information"; + if (d->showBar && KMessageBox::shouldBeShownContinue(messageShown)) { + showInformationMessage(); + KMessageBox::saveDontShowAgainContinue(messageShown); + } + + // Show the bar if that's wanted by the developer or the user: + if (d->showBar) + QTimer::singleShot( 0, d->bar, SLOT(startTimer()) ); + +#if 0 + disableBar(); + // Alex: Oh, it drove me nuts + d->buttons = (Button) ( 0); showInformationMessage(); + d->buttons = (Button) ( Feature); showInformationMessage(); + d->buttons = (Button) ( Bug ); showInformationMessage(); + d->buttons = (Button) ( Bug | Feature); showInformationMessage(); + d->buttons = (Button) ( Dislike ); showInformationMessage(); + d->buttons = (Button) ( Dislike | Feature); showInformationMessage(); + d->buttons = (Button) ( Dislike | Bug ); showInformationMessage(); + d->buttons = (Button) ( Dislike | Bug | Feature); showInformationMessage(); + d->buttons = (Button) (Like ); showInformationMessage(); + d->buttons = (Button) (Like | Feature); showInformationMessage(); + d->buttons = (Button) (Like | Bug ); showInformationMessage(); + d->buttons = (Button) (Like | Bug | Feature); showInformationMessage(); + d->buttons = (Button) (Like | Dislike ); showInformationMessage(); + d->buttons = (Button) (Like | Dislike | Feature); showInformationMessage(); + d->buttons = (Button) (Like | Dislike | Bug ); showInformationMessage(); + d->buttons = (Button) (Like | Dislike | Bug | Feature); showInformationMessage(); + enableBar(); +#endif +} + +LikeBack::~LikeBack() +{ + delete d; +} + +void LikeBack::setWindowNamesListing(WindowListing windowListing) +{ + d->windowListing = windowListing; +} + +LikeBack::WindowListing LikeBack::windowNamesListing() +{ + return d->windowListing; +} + +void LikeBack::setAcceptedLanguages(const QStringList &locales, const QString &message) +{ + d->acceptedLocales = locales; + d->acceptedLanguagesMessage = message; +} + +QStringList LikeBack::acceptedLocales() +{ + return d->acceptedLocales; +} + +QString LikeBack::acceptedLanguagesMessage() +{ + return d->acceptedLanguagesMessage; +} + +void LikeBack::setServer(const QString &hostName, const QString &remotePath, Q_UINT16 hostPort) +{ + d->hostName = hostName; + d->remotePath = remotePath; + d->hostPort = hostPort; +} + +QString LikeBack::hostName() +{ + return d->hostName; +} + +QString LikeBack::remotePath() +{ + return d->remotePath; +} + +Q_UINT16 LikeBack::hostPort() +{ + return d->hostPort; +} + +void LikeBack::disableBar() +{ + d->disabledCount++; + if (d->bar && d->disabledCount > 0) { + d->bar->hide(); + d->bar->stopTimer(); + } +} + +void LikeBack::enableBar() +{ + d->disabledCount--; + if (d->disabledCount < 0) + std::cerr << "===== LikeBack ===== Enabled more times than it was disabled. Please refer to the disableBar() documentation for more information and hints." << std::endl; + if (d->bar && d->disabledCount <= 0) { + d->bar->startTimer(); + } +} + +bool LikeBack::enabledBar() +{ + return d->disabledCount <= 0; +} + +void LikeBack::execCommentDialog(Button type, const QString &initialComment, const QString &windowPath, const QString &context) +{ + disableBar(); + LikeBackDialog dialog(type, initialComment, windowPath, context, this); + dialog.exec(); + enableBar(); +} + +void LikeBack::execCommentDialogFromHelp() +{ + execCommentDialog(AllButtons, /*initialComment=*/"", /*windowPath=*/"HelpMenuAction"); +} + +LikeBack::Button LikeBack::buttons() +{ + return d->buttons; +} + +const KAboutData* LikeBack::aboutData() +{ + return d->aboutData; +} + +KConfig* LikeBack::config() +{ + return d->config; +} + +KAction* LikeBack::sendACommentAction(KActionCollection *parent) +{ + if (d->action == 0) + d->action = new KAction( + i18n("&Send a Comment to Developers"), /*icon=*/"mail_new", /*shortcut=*/"", + this, SLOT(execCommentDialog()), + parent, "likeback_send_a_comment" + ); + + return d->action; +} + +bool LikeBack::userWantsToShowBar() +{ + // Store the button-bar per version, so it can be disabled by the developer for the final version: + d->config->setGroup("LikeBack"); + return d->config->readBoolEntry("userWantToShowBarForVersion_" + d->aboutData->version(), d->showBarByDefault); +} + +void LikeBack::setUserWantsToShowBar(bool showBar) +{ + if (showBar == d->showBar) + return; + + d->showBar = showBar; + + // Store the button-bar per version, so it can be disabled by the developer for the final version: + d->config->setGroup("LikeBack"); + d->config->writeEntry("userWantToShowBarForVersion_" + d->aboutData->version(), showBar); + d->config->sync(); // Make sure the option is saved, even if the application crashes after that. + + if (showBar) + d->bar->startTimer(); +} + +void LikeBack::showInformationMessage() +{ + // Load and register the images needed by the message: + QPixmap likeIcon = kapp->iconLoader()->loadIcon("likeback_like", KIcon::Small); + QPixmap dislikeIcon = kapp->iconLoader()->loadIcon("likeback_dislike", KIcon::Small); + QPixmap bugIcon = kapp->iconLoader()->loadIcon("likeback_bug", KIcon::Small); + QPixmap featureIcon = kapp->iconLoader()->loadIcon("likeback_feature", KIcon::Small); + QMimeSourceFactory::defaultFactory()->setPixmap("likeback_icon_like", likeIcon); + QMimeSourceFactory::defaultFactory()->setPixmap("likeback_icon_dislike", dislikeIcon); + QMimeSourceFactory::defaultFactory()->setPixmap("likeback_icon_bug", bugIcon); + QMimeSourceFactory::defaultFactory()->setPixmap("likeback_icon_feature", featureIcon); + + // Show a message reflecting the allowed types of comment: + Button buttons = d->buttons; + int nbButtons = (buttons & Like ? 1 : 0) + + (buttons & Dislike ? 1 : 0) + + (buttons & Bug ? 1 : 0) + + (buttons & Feature ? 1 : 0); + KMessageBox::information(0, + "

      " + (isDevelopmentVersion(d->aboutData->version()) ? + i18n("Welcome to this testing version of %1.") : + i18n("Welcome to %1.") + ).arg(d->aboutData->programName()) + "

      " + "

      " + i18n("To help us improve it, your comments are important.") + "

      " + "

      " + + ((buttons & LikeBack::Like) && (buttons & LikeBack::Dislike) ? + i18n("Each time you have a great or frustrating experience, " + "please click the appropriate face below the window title-bar, " + "briefly describe what you like or dislike and click Send.") + : (buttons & LikeBack::Like ? + i18n("Each time you have a great experience, " + "please click the smiling face below the window title-bar, " + "briefly describe what you like and click Send.") + : (buttons & LikeBack::Dislike ? + i18n("Each time you have a frustrating experience, " + "please click the frowning face below the window title-bar, " + "briefly describe what you dislike and click Send.") + : + QString() + ))) + "

      " + + (buttons & LikeBack::Bug ? + "

      " + + (buttons & (LikeBack::Like | LikeBack::Dislike) ? + i18n("Follow the same principle to quickly report a bug: " + "just click the broken-object icon in the top-right corner of the window, describe it and click Send.") + : + i18n("Each time you discover a bug in the application, " + "please click the broken-object icon below the window title-bar, " + "briefly describe the mis-behaviour and click Send.") + ) + "

      " + : "") + + "

      " + i18n("Example:", "Examples:", nbButtons) + "

      " + + (buttons & LikeBack::Like ? + "

       " + + i18n("I like the new artwork. Very refreshing.") + "

      " + : "") + + (buttons & LikeBack::Dislike ? + "

       " + + i18n("I dislike the welcome page of that assistant. Too time consuming.") + "

      " + : "") + + (buttons & LikeBack::Bug ? + "

       " + + i18n("The application has an improper behaviour when clicking the Add button. Nothing happens.") + "

      " + : "") + + (buttons & LikeBack::Feature ? + "

       " + + i18n("I desire a new feature allowing me to send my work by email.") + "

      " + : "") + + "", + i18n("Help Improve the Application")); + + // Reset the images from the factory: + QMimeSourceFactory::defaultFactory()->setData("likeback_icon_like", 0L); + QMimeSourceFactory::defaultFactory()->setData("likeback_icon_dislike", 0L); + QMimeSourceFactory::defaultFactory()->setData("likeback_icon_bug", 0L); + QMimeSourceFactory::defaultFactory()->setData("likeback_icon_feature", 0L); +} + +QString LikeBack::activeWindowPath() +{ + // Compute the window hierarchy (from the latest to the oldest): + QStringList windowNames; + QWidget *window = kapp->activeWindow(); + while (window) { + QString name = window->name(); + // Append the class name to the window name if it is unnamed: + if (name == "unnamed") + name += QString(":") + window->className(); + windowNames.append(name); + window = dynamic_cast(window->parent()); + } + + // Create the string of windows starting by the end (from the oldest to the latest): + QString windowPath; + for (int i = ((int)windowNames.count()) - 1; i >= 0; i--) { + if (windowPath.isEmpty()) + windowPath = windowNames[i]; + else + windowPath += QString("~~") + windowNames[i]; + } + + // Finally return the computed path: + return windowPath; +} + +bool LikeBack::emailAddressAlreadyProvided() +{ + d->config->setGroup("LikeBack"); + return d->config->readBoolEntry("emailAlreadyAsked", false); +} + +QString LikeBack::emailAddress() +{ + if (!emailAddressAlreadyProvided()) + askEmailAddress(); + + d->config->setGroup("LikeBack"); + return d->config->readEntry("emailAddress", ""); +} + +void LikeBack::setEmailAddress(const QString &address, bool userProvided) +{ + d->config->setGroup("LikeBack"); + d->config->writeEntry("emailAddress", address); + d->config->writeEntry("emailAlreadyAsked", userProvided || emailAddressAlreadyProvided()); + d->config->sync(); // Make sure the option is saved, even if the application crashes after that. +} + +void LikeBack::askEmailAddress() +{ + d->config->setGroup("LikeBack"); + + QString currentEmailAddress = d->config->readEntry("emailAddress", ""); + if (!emailAddressAlreadyProvided() && !d->fetchedEmail.isEmpty()) + currentEmailAddress = d->fetchedEmail; + + bool ok; + + QString emailExpString = "[\\w-\\.]+@[\\w-\\.]+\\.[\\w]+"; + //QString namedEmailExpString = "[.]*[ \\t]+<" + emailExpString + '>'; + //QRegExp emailExp("^(|" + emailExpString + '|' + namedEmailExpString + ")$"); + QRegExp emailExp("^(|" + emailExpString + ")$"); + QRegExpValidator emailValidator(emailExp, this); + + disableBar(); + QString email = KInputDialog::getText( + i18n("Email Address"), + "

      " + i18n("Please provide your email address.") + "

      " + + "

      " + i18n("It will only be used to contact you back if more information is needed about your comments, ask you how to reproduce the bugs you report, send bug corrections for you to test, etc.") + "

      " + + "

      " + i18n("The email address is optional. If you do not provide any, your comments will be sent anonymously.") + "

      ", + currentEmailAddress, &ok, kapp->activeWindow(), /*name=*/(const char*)0, &emailValidator); + enableBar(); + + if (ok) + setEmailAddress(email); +} + +// FIXME: Should be moved to KAboutData? Cigogne will also need it. +bool LikeBack::isDevelopmentVersion(const QString &version) +{ + return version.find("alpha", /*index=*/0, /*caseSensitive=*/false) != -1 || + version.find("beta", /*index=*/0, /*caseSensitive=*/false) != -1 || + version.find("rc", /*index=*/0, /*caseSensitive=*/false) != -1 || + version.find("svn", /*index=*/0, /*caseSensitive=*/false) != -1 || + version.find("cvs", /*index=*/0, /*caseSensitive=*/false) != -1; +} + +/** + * Code from KBugReport::slotConfigureEmail() in kdeui/kbugreport.cpp: + */ +/*void LikeBack::beginFetchingEmail() +{ + if (m_process) + return; + m_process = new KProcess(); + *m_process << QString::fromLatin1("kcmshell") << QString::fromLatin1("kcm_useraccount"); + connect( m_process, SIGNAL(processExited(KProcess*)), SLOT(fetchUserEmail()) ); + if (!m_process->start()) { + kdDebug() << "Couldn't start kcmshell.." << endl; + delete m_process; + m_process = 0; + return; + } +// m_configureEmail->setEnabled(false); +}*/ + +/** + * Code from KBugReport::slotSetFrom() in kdeui/kbugreport.cpp: + */ +void LikeBack::fetchUserEmail() +{ +// delete m_process; +// m_process = 0; +// m_configureEmail->setEnabled(true); + + // ### KDE4: why oh why is KEmailSettings in kio? + KConfig emailConf( QString::fromLatin1("emaildefaults") ); + + // find out the default profile + emailConf.setGroup(QString::fromLatin1("Defaults")); + QString profile = QString::fromLatin1("PROFILE_"); + profile += emailConf.readEntry(QString::fromLatin1("Profile"), QString::fromLatin1("Default")); + + emailConf.setGroup(profile); + QString fromaddr = emailConf.readEntry(QString::fromLatin1("EmailAddress")); + if (fromaddr.isEmpty()) { + struct passwd *p; + p = getpwuid(getuid()); + d->fetchedEmail = QString::fromLatin1(p->pw_name); + } else { + QString name = emailConf.readEntry(QString::fromLatin1("FullName")); + if (!name.isEmpty()) + d->fetchedEmail = /*name + QString::fromLatin1(" <") +*/ fromaddr /*+ QString::fromLatin1(">")*/; + } +// m_from->setText( fromaddr ); +} + +/*******************************************/ +/********** class LikeBackDialog: **********/ +/*******************************************/ + +LikeBackDialog::LikeBackDialog(LikeBack::Button reason, const QString &initialComment, const QString &windowPath, const QString &context, LikeBack *likeBack) + : KDialogBase(KDialogBase::Swallow, i18n("Send a Comment to Developers"), KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Default, + KDialogBase::Ok, kapp->activeWindow(), /*name=*/"_likeback_feedback_window_", /*modal=*/true, /*separator=*/true) + , m_likeBack(likeBack) + , m_windowPath(windowPath) + , m_context(context) +{ + // If no specific "reason" is provided, choose the first one: + if (reason == LikeBack::AllButtons) { + LikeBack::Button buttons = m_likeBack->buttons(); + int firstButton = 0; + if (firstButton == 0 && (buttons & LikeBack::Like)) firstButton = LikeBack::Like; + if (firstButton == 0 && (buttons & LikeBack::Dislike)) firstButton = LikeBack::Dislike; + if (firstButton == 0 && (buttons & LikeBack::Bug)) firstButton = LikeBack::Bug; + if (firstButton == 0 && (buttons & LikeBack::Feature)) firstButton = LikeBack::Feature; + reason = (LikeBack::Button) firstButton; + } + + // If no window path is provided, get the current active window path: + if (m_windowPath.isEmpty()) + m_windowPath = LikeBack::activeWindowPath(); + + QWidget *page = new QWidget(this); + QVBoxLayout *pageLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + // The introduction message: + QLabel *introduction = new QLabel(introductionText(), page); + pageLayout->addWidget(introduction); + + // The comment group: + m_group = new QButtonGroup(0);//i18n("Send Application Developers a Comment About:"), page); + QVGroupBox *box = new QVGroupBox(i18n("Send Application Developers a Comment About:"), page); + pageLayout->addWidget(box); + + // The radio buttons: + QWidget *buttons = new QWidget(box); + QGridLayout *buttonsGrid = new QGridLayout(buttons, /*nbRows=*/4, /*nbColumns=*/2, /*margin=*/0, spacingHint()); + if (m_likeBack->buttons() & LikeBack::Like) { + QPixmap likePixmap = kapp->iconLoader()->loadIcon("likeback_like", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true); + QLabel *likeIcon = new QLabel(buttons); + likeIcon->setPixmap(likePixmap); + likeIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + QRadioButton *likeButton = new QRadioButton(i18n("Something you &like"), buttons); + buttonsGrid->addWidget(likeIcon, /*row=*/0, /*column=*/0); + buttonsGrid->addWidget(likeButton, /*row=*/0, /*column=*/1); + m_group->insert(likeButton, LikeBack::Like); + } + if (m_likeBack->buttons() & LikeBack::Dislike) { + QPixmap dislikePixmap = kapp->iconLoader()->loadIcon("likeback_dislike", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true); + QLabel *dislikeIcon = new QLabel(buttons); + dislikeIcon->setPixmap(dislikePixmap); + dislikeIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + QRadioButton *dislikeButton = new QRadioButton(i18n("Something you &dislike"), buttons); + buttonsGrid->addWidget(dislikeIcon, /*row=*/1, /*column=*/0); + buttonsGrid->addWidget(dislikeButton, /*row=*/1, /*column=*/1); + m_group->insert(dislikeButton, LikeBack::Dislike); + } + if (m_likeBack->buttons() & LikeBack::Bug) { + QPixmap bugPixmap = kapp->iconLoader()->loadIcon("likeback_bug", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true); + QLabel *bugIcon = new QLabel(buttons); + bugIcon->setPixmap(bugPixmap); + bugIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + QRadioButton *bugButton = new QRadioButton(i18n("An improper &behavior of this application"), buttons); + buttonsGrid->addWidget(bugIcon, /*row=*/2, /*column=*/0); + buttonsGrid->addWidget(bugButton, /*row=*/2, /*column=*/1); + m_group->insert(bugButton, LikeBack::Bug); + } + if (m_likeBack->buttons() & LikeBack::Feature) { + QPixmap featurePixmap = kapp->iconLoader()->loadIcon("likeback_feature", KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true); + QLabel *featureIcon = new QLabel(buttons); + featureIcon->setPixmap(featurePixmap); + featureIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + QRadioButton *featureButton = new QRadioButton(i18n("A new &feature you desire"), buttons); + buttonsGrid->addWidget(featureIcon, /*row=*/3, /*column=*/0); + buttonsGrid->addWidget(featureButton, /*row=*/3, /*column=*/1); + m_group->insert(featureButton, LikeBack::Feature); + } + m_group->setButton(reason); + + // The comment text box: + m_comment = new QTextEdit(box); + m_comment->setTabChangesFocus(true); + m_comment->setTextFormat(QTextEdit::PlainText); + m_comment->setText(initialComment); + + m_showButtons = new QCheckBox(i18n("Show comment buttons below &window titlebars"), page); + m_showButtons->setChecked(m_likeBack->userWantsToShowBar()); + pageLayout->addWidget(m_showButtons); + connect( m_showButtons, SIGNAL(stateChanged(int)), this, SLOT(changeButtonBarVisible()) ); + + setButtonOK(KGuiItem(i18n("&Send Comment"), "mail_send")); + enableButtonOK(false); + connect( m_comment, SIGNAL(textChanged()), this, SLOT(commentChanged()) ); + + setButtonGuiItem(Default, KGuiItem(i18n("&Email Address..."), "mail_generic")); + + resize(QSize(kapp->desktop()->width() * 1 / 2, kapp->desktop()->height() * 3 / 5).expandedTo(sizeHint())); + + QAction *sendShortcut = new QAction(this); + sendShortcut->setAccel(QString("Ctrl+Return")); + connect( sendShortcut, SIGNAL(activated()), actionButton(Ok), SLOT(animateClick()) ); + + setMainWidget(page); +} + +LikeBackDialog::~LikeBackDialog() +{ +} + +QString LikeBackDialog::introductionText() +{ + QString text = "

      " + i18n("Please provide a brief description of your opinion of %1.").arg(m_likeBack->aboutData()->programName()) + " "; + + QString languagesMessage = ""; + if (!m_likeBack->acceptedLocales().isEmpty() && !m_likeBack->acceptedLanguagesMessage().isEmpty()) { + languagesMessage = m_likeBack->acceptedLanguagesMessage(); + QStringList locales = m_likeBack->acceptedLocales(); + for (QStringList::Iterator it = locales.begin(); it != locales.end(); ++it) { + QString locale = *it; + if (KGlobal::locale()->language().startsWith(locale)) + languagesMessage = ""; + } + } else { + if (!KGlobal::locale()->language().startsWith("en")) + languagesMessage = i18n("Please write in English."); + } + + if (!languagesMessage.isEmpty()) + // TODO: Replace the URL with a localized one: + text += languagesMessage + " " + + i18n("You may be able to use an online translation tool.") + .arg("http://www.google.com/language_tools?hl=" + KGlobal::locale()->language()) + + " "; + + // If both "I Like" and "I Dislike" buttons are shown and one is clicked: + if ((m_likeBack->buttons() & LikeBack::Like) && (m_likeBack->buttons() & LikeBack::Dislike)) + text += i18n("To make the comments you send more useful in improving this application, try to send the same amount of positive and negative comments.") + " "; + + if (!(m_likeBack->buttons() & LikeBack::Feature)) + text += i18n("Do not ask for new features: your requests will be ignored."); + + return text; +} + +void LikeBackDialog::polish() +{ + KDialogBase::polish(); + m_comment->setFocus(); +} + +void LikeBackDialog::slotDefault() +{ + m_likeBack->askEmailAddress(); +} + +void LikeBackDialog::slotOk() +{ + send(); +} + +void LikeBackDialog::changeButtonBarVisible() +{ + m_likeBack->setUserWantsToShowBar(m_showButtons->isChecked()); +} + +void LikeBackDialog::commentChanged() +{ + QPushButton *sendButton = actionButton(Ok); + sendButton->setEnabled(!m_comment->text().isEmpty()); +} + +void LikeBackDialog::send() +{ + QString emailAddress = m_likeBack->emailAddress(); + + int reason = m_group->selectedId(); + QString type = (reason == LikeBack::Like ? "Like" : (reason == LikeBack::Dislike ? "Dislike" : (reason == LikeBack::Bug ? "Bug" : "Feature"))); + QString data = + "protocol=" + KURL::encode_string("1.0") + '&' + + "type=" + KURL::encode_string(type) + '&' + + "version=" + KURL::encode_string(m_likeBack->aboutData()->version()) + '&' + + "locale=" + KURL::encode_string(KGlobal::locale()->language()) + '&' + + "window=" + KURL::encode_string(m_windowPath) + '&' + + "context=" + KURL::encode_string(m_context) + '&' + + "comment=" + KURL::encode_string(m_comment->text()) + '&' + + "email=" + KURL::encode_string(emailAddress); + QHttp *http = new QHttp(m_likeBack->hostName(), m_likeBack->hostPort()); + + std::cout << "http://" << m_likeBack->hostName() << ":" << m_likeBack->hostPort() << m_likeBack->remotePath() << std::endl; + std::cout << data << std::endl; + connect( http, SIGNAL(requestFinished(int, bool)), this, SLOT(requestFinished(int, bool)) ); + + QHttpRequestHeader header("POST", m_likeBack->remotePath()); + header.setValue("Host", m_likeBack->hostName()); + header.setValue("Content-Type", "application/x-www-form-urlencoded"); + http->setHost(m_likeBack->hostName()); + http->request(header, data.utf8()); + + m_comment->setEnabled(false); +} + +void LikeBackDialog::requestFinished(int /*id*/, bool error) +{ + // TODO: Save to file if error (connection not present at the moment) + m_comment->setEnabled(true); + m_likeBack->disableBar(); + if (error) { + KMessageBox::error(this, i18n("

      Error while trying to send the report.

      Please retry later.

      "), i18n("Transfer Error")); + } else { + KMessageBox::information( + this, + i18n("

      Your comment has been sent successfully. It will help improve the application.

      Thanks for your time.

      "), + i18n("Comment Sent") + ); + close(); + } + m_likeBack->enableBar(); + + KDialogBase::slotOk(); +} + +#include "likeback_private.moc.cpp" +#include "likeback.moc" diff --git a/src/likeback.h b/src/likeback.h new file mode 100644 index 0000000..4b825a5 --- /dev/null +++ b/src/likeback.h @@ -0,0 +1,364 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sebastien Laout * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This 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 Library 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. * + ***************************************************************************/ + +#ifndef LIKEBACK_H +#define LIKEBACK_H + +#include + +class KConfig; +class KAboutData; +class KAction; +class KActionCollection; + +class LikeBackPrivate; +class LikeBackBar; +class LikeBackDialog; + +/** + * @short System to Get Quick Feedback from Beta-Testers + * + * This system allows users to communicate theire liking of the application to its developers. + * Thus, developers know what theire users prefer of theire applications, what should be enhanced, etc. + * + * Basically, how does it work? + * Whenever the user notice something good he appreciate or something he do not like, do not understand, do not find polished... + * he can send a few short words to the developers to tell them what he like or do not like. It is only two or three clicks away. + * It is fast and efficient. + * + * This greatly lowers the communication barrier between the application developers and the application users. + * It makes the developers understand and satisfy better the needs of the users. + * + * The LikeBack system has 5 components: + * @li In the application: The comment dialog, where the user write a comment, select a type of comment, etc. + * @li In the application: The KAction to plug in the Help menu. This action displays the comment dialog. + * @li In the application: The button-bar, that floats bellow titlebar of every windows of the application, and let the user to quickly show the comment dialog. + * The button-bar can be hidden. + * @li On the server: A PHP script that collects every comments that users send. The LikeBack object should be configured to contact that server. + * @li On the server: The developer interface. It lists every comments that were sent, let you sort them, add remarks to them, and mark them as fixed or another status. + * + * Here is an example of code to call to quickly setup LikeBack on the client: + * @code + * // Instanciate the LikeBack system, and show the first-use information dialog if the button-bar is shown: + * LikeBack *likeBack = new LikeBack(LikeBack::AllButtons, LikeBack::isDevelopmentVersion(kapp->aboutData->version())); // Show button-bar only in beta-versions + * likeBack->setServer("myapp.kde.org", "/likeback/send.php"); + * likeBack->setAcceptedLanguages(QStringList::split(";", "en;fr"), i18n("Please write in English or French.")); + * + * // Comment the following line once you are sure all your windows have a name: + * likeBack->setWindowNamesListing(LikeBack::WarnUnnamedWindows); + * + * // This line should be called early in your KMainWindow constructor because it references actionCollection(). + * // It should be called before createGUI() for the action to be plugged in the Help menu: + * likeBack->sendACommentAction(actionCollection()); + * @endcode + * + * @see Visit http://basket.kde.org/likeback.php for more information, screenshots, a tutorial, hints, return of experiences, and to download the server-side developer interface... + * @author Sebastien Laout + */ +class LikeBack : public QObject +{ + Q_OBJECT + public: + /** + * Ids of every LikeBack buttons the button-bar can have. + * The four first values are each individual buttons you can enable or not. + * The next ones are combinations: all buttons at once, and the default set of buttons (Like, Dislike). + * Those values are used in the constructor, to set the allowed type of comments, and when triggering the comment dialog, to set the default checked type. + * @See The LikeBack constructor and execCommentDialog(). + */ + enum Button { + Like = 0x01, /// The user select that option to report a positive experience he got with the application. + Dislike = 0x02, /// The user select that option to report a frustrating experience he got with the application. + Bug = 0x04, /// The user select that option to report a bug in the application. + Feature = 0x10, /// The user select that option to ask for a new feature he desire. + /// If not enabled, the user is explicitely informed she cannot ask for new features. + AllButtons = Like | Dislike | Bug | Feature, /// Usable in the constructor to enable every posible buttons. + DefaultButtons = Like | Dislike /// Usable in the constructor to enable only the recommended default set of buttons. + }; + + /** + * Flags letting LikeBack print out name and path of each window you show during execution, for debugging purpose. + * @See The method setWindowNamesListing() explains how to use those values. + */ + enum WindowListing { + NoListing = 0, /// Do not print out any window name. For release time. + WarnUnnamedWindows = 1, /// Each time the user option a window, print out a message if the window is unnamed. For development needs, to check windows. + AllWindows = 2 /// Print out the window hierarchy of each opened windows during execution. For development needs, to check every windows have an understandable name. + }; + + /** + * You only need to call the constructor once, typically in main.cpp. + * Even if you do not show the button-bar by default, you should instanciate LikeBack, + * to include its action in the Help menu of your application, to let the users send comments or activate the bar. + * @param buttons The types of comments you want to get. Determine which radio-buttons are shown in the comment dialog, + * and which ones are displayed in the button-bar. Default buttons do not show the Bug and Feature buttons because you are + * likely to already have a way to get bug and feature reports (most of the time, it is a bugs.kde.org account). + * If you do not have that, then use the value LikeBack::AllButtons to show every possible buttons. + * @param showBarByDefault Determines if the floating button-bar should also be shown, in addition to the action in the Help menu. + * Advise: to avoid getting too much noise, enable it only if it is a small application or a development release. + * Notes: This is only a default value, the user will be able to enable or disabled the bar afterward. + * The button-bar display is stored by version. On a new version, your default value will take effect again. + * This allow you to disable the button-bar once the version is stable enought to be released as final. + * @param config Set the configuration file where to store the user email address and if the button-bar should be shown. + * By default (null), the KApplication configuration object is used. + * @param aboutData Set the KAboutData instance used to get the application name and version. By default (null), the KApplication about data object is used. + * The application name is only used in the first-use information message. + * The version is used to store the button-bar visibility per version (can be shown in a development version but not in a final one...) + * and to send with the comment, so you can filter per version and know if a comment refers the latest version of the application or not. + */ + LikeBack(Button buttons = DefaultButtons, bool showBarByDefault = false, KConfig *config = 0, const KAboutData *aboutData = 0); + + /** + * Destructor. + * Also hide the button-bar, if it was shown. + * Be careful, the KAction is deleted. Do not use it afterward, and take care to unplug it before destroying this LikeBack instance. + */ + ~LikeBack(); + + /** + * This method is interesting while setting up the system for the first time. + * LikeBack send the current window name (and hierarchy) with the comment. This allows you to put the comments in theire context. + * So, of course, you are encouraged to give a name to your windows. It is done in the constructor of the widgets. + * This method allows to output the name of the current window to the standard output. + * So you can use the application, open all the windows, and when you see a warning, you know which window you should assign a name. + * @see The WindowListing flags for an enumeration and explaining of every possibilities. + * @Note If you do not name your windows, the name of the classes will be sent. So it is not that grave. + */ + void setWindowNamesListing(WindowListing windowListing); + + /** + * @Returns The window listing flag. + * @see setWindowNamesListing() + */ + WindowListing windowNamesListing(); + + /** + * By default, only English comments are accepted. The user is informed she must write in this language by a sentence placed in the comment dialog. + * If you have people talking other languages in your development team, it can be interesting to call this method to define the accepted locales (languages), + * and provide a message to inform users. The developer interface on the server let developers view comments in theire locale. + * Note that no verification is done to check if the user used the right language, it would be impossible. + * The list of locales is there to make it possible to NOT show the message for users of the accepted languages. + * For instance, if you accept only English and French, and that the application run in a French environment, + * it is likely the user is French and will write comments using French. Telling him he should write in French is unnecessary and redundant. + * Passing an empty list and an empty string to the method will make LikeBack display the default message telling the user only English is accepted. + * Example of call you can quickly copy, paste and adapt: + * @code + * likeBack->setAcceptedLanguages(QStringList::split(";", "en;fr"), i18n("Please write in English or French.")); + * @endcode + * @Note During tests, if you do not see the sentence, it is because you are running the application with an "accepted language": do not be surprised ;-) + * @param locales The list of locales where the message does not need to be shown. See TODO TODO for a list of available locales for you to choose. + * @param message The message to displays to the user to tell him what languages are accepted to write his comments. + */ + void setAcceptedLanguages(const QStringList &locales, const QString &message); + + /** + * @Returns The list of accepted locales for the user to write comments. + * @see setAcceptedLanguages() + */ + QStringList acceptedLocales(); + + /** + * @Returns The message displayed to users who are not running the application in an accepted locale. + * @see setAcceptedLanguages() + */ + QString acceptedLanguagesMessage(); + + /** + * Set the path where LikeBack should send every comments. + * It is composed of the server host name, the path to the PHP script used to send comments, and optionnaly a port number if it is not 80. + * This call is mandatory for LikeBack to work. + * @param hostName The server host name to contact when sending comments. For instance "myapp.kde.org". + * @param remotePath The path to the send script on the server. For instance, "/likeback/send.php". + * @param hostPort Optionnal port used to contact the server using the HTTP protocol. By default, it is port 80. + */ + void setServer(const QString &hostName, const QString &remotePath, Q_UINT16 hostPort = 80); + + /** + * @Returns The server host name to contact when sending comments. + * @see setServer() + */ + QString hostName(); + + /** + * @Returns The path to the send script on the server. + * @see setServer() + */ + QString remotePath(); + + /** + * @Returns The port used to contact the server using the HTTP protocol. + * @see setServer() + */ + Q_UINT16 hostPort(); + + /** + * Get the KAction letting user to show the comment dialog. + * You should plug it in your Help menu, just bellow the "Report a Bug" action, or replace it. + * Adding the action below "Report a Bug" or replacing "Report a Bug" depends on your application and if you have a Bugzilla account. + * If you do not have a Bugzilla account, LikeBack is a good way for your small application to get bug reports: remove "Report a Bug". + * For more information about how to configure LikeBack depending on your application size and settings, see the constructor documentation. + * @Note The action is named "likeback_send_a_comment". So you should add the following XML in the *ui.rc file of your application: + * @code + * + * @endcode + */ + KAction* sendACommentAction(KActionCollection *parent = 0); + + /** + * @Returns The path of the currently active window. Each windows are separated with "~~". + * Normally, you should not need to call this method since it is used to send the window path. + * But if you call execCommentDialog(), you could need to use it. + */ + static QString activeWindowPath(); + + /** + * @Returns The combination of buttons that are shown in the comment dialog and the button-bar. + */ + Button buttons(); + + /** + * @Returns true if the button-bar is currently enabled. Ie, if it has been re-enabled as many times as it has been disabled. + * @see The method disableBar() for more information on how enabling/disabling works. + */ + bool enabledBar(); + + public slots: + + /** + * Temporarily disable the button-bar: it is hiden from the screen if it was shown. + * Does not affect anything if the user has not choosen to show the button-bar. + * @Note Calls to enableBar() and disableBar() are ref-counted. + * This means that the number of times disableBar() is called is memorized, + * and enableBar() will only have effect after it has been called as many times as disableBar() was called before. + * So, make sure to always call enableBar() the same number of times ou called disableBar(). + * And please make sure to ALWAYS call disableBar() BEFORE enableBar(). + * In the counter-case, another code could call disableBar() and EXCPECT the bar to be disabled. But it will not, because its call only canceled yours. + * @Note Sometimes, you will absolutely need to call enableBar() before disableBar(). + * For instance, MyWindow::show() calls enableBar() and MyWindow::hide() calls disableBar(). + * This is the trick used to show the LikeBack button-bar of a Kontact plugin only when the main widget of that plugin is active. + * In this case, call disableBar() at the begin of your program, so the disable count will never be negative. + * @Note If the bar is enabled, it does not mean the bar is shown. For that, the developer (using showBarByDefault in the construcor) + * or the user (by checking the checkbox in the comment dialog) have to explicitely show the bar. + */ + void disableBar(); + + /** + * Re-enable the button-bar one time. + * @see The method disableBar() for more information on how enabling/disabling works. + */ + void enableBar(); + + /** + * Show the first-use information dialog telling the user the meaning of the LikeBack system and giving examples of every comment types. + */ + void showInformationMessage(); + + /** + * Popup the comment dialog. + * With no parameter, it popups in the default configuration: the first type is checked, empty message, current window path, and empty context. + * You can use the following parameters to customize how it should appears: + * @param type Which radiobutton should be checked when poping up. AllButton, the default value, means the first available type will be checked. + * @param initialComment The text to put in the comment text area. Allows you to popup the dialog in some special circumstances, + * like to let the user report an internal error by populating the comment area with technical details useful for you to debug. + * @param windowPath The window path to send with the comment. If empty (the default), the current window path is took. + * Separate window names with "~~". For instance "MainWindow~~NewFile~~FileOpen". + * If you popup the dialog after an error occurred, you can put the error name in that field (if the window path has no sense in that context). + * When the dialog is popuped up from the sendACommentAction() KAction, this value is "HelpMenu", because there is no way to know if the user + * is commenting a thing he found/thinked about in a sub-dialog. + * @param context Not used for the moment. Will allow more fine-grained application status report. + */ + void execCommentDialog(Button type = AllButtons, const QString &initialComment = "", const QString &windowPath = "", const QString &context = ""); + + /** + * Popups the dialog for the user to set his email address. + * The popup will always be shown, even if the user already provided an email address. + */ + void askEmailAddress(); + + private: + LikeBackPrivate *d; + + /** + * Get the user email address from KControl. + */ + void fetchUserEmail(); + + private slots: + /** + * Slot triggered by the "Help -> Send a Comment to Developers" KAction. + * It popups the comment dialog, and set the window path to "HelpMenuAction", + * because current window path has no meaning in that case. + */ + void execCommentDialogFromHelp(); + + public: + + /** + * @Returns true if the user has enabled the LikeBack bar for this version. + */ + bool userWantsToShowBar(); + + /** + * Explicitely set if the floating button-bar should be shown or not. + * Tehorically, this choice should only be left to the user, + * and to the developers for the default value, already provided in the constructor. + */ + void setUserWantsToShowBar(bool showBar); + + /** + * @Returns A pointer to the KAboutData used to determin the application name and version. + * @See The LikeBack constructor for more information. + */ + const KAboutData *aboutData(); + + /** + * @Returns A pointer to the KConfig used to store user configuration (email address, if the button-bar should be shown). + * @See The LikeBack constructor for more information. + */ + KConfig *config(); + + /** + * During the first comment sending, the user is invited to enter his email address for the developers to be able to contact him back. + * He is only asked once, or he can set or change it by using the bottom-left button in the comment dialog. + * @Returns true if the user has already configured his email address. + */ + bool emailAddressAlreadyProvided(); + + /** + * @Returns The email user address, or ask it to the user if he have not provided or ignored it. + * @Returns An empty string if the user cancelled the request dialog. + */ + QString emailAddress(); + + /** + * Define or re-define the user email address. + * LikeBack will not ask it again to the user, unless you set @p userProvided to false. + * Then, this call can be considered as setting the default email address, that the user should confirm later. + */ + void setEmailAddress(const QString &address, bool userProvided = true); + + /** + * @Returns true if @p version is an Alpha, Beta, RC, SVN or CVS version. + * You can use this static method in the constructor to enable the button-bar by default only during beta-releases. + */ + static bool isDevelopmentVersion(const QString &version); +}; + +#endif // LIKEBACK_H diff --git a/src/likeback_private.h b/src/likeback_private.h new file mode 100644 index 0000000..37ed60f --- /dev/null +++ b/src/likeback_private.h @@ -0,0 +1,105 @@ +/*************************************************************************** + * Copyright (C) 2006 by Sebastien Laout * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This 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 Library 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. * + ***************************************************************************/ + +#ifndef LIKEBACK_PRIVATE_H +#define LIKEBACK_PRIVATE_H + +#include +#include + +#include "likeback.h" + +class QToolButton; +class QTextEdit; +class QCheckBox; +class QButtonGroup; +class Kaction; + +class LikeBackPrivate +{ + public: + LikeBackPrivate(); + ~LikeBackPrivate(); + LikeBackBar *bar; + KConfig *config; + const KAboutData *aboutData; + LikeBack::Button buttons; + QString hostName; + QString remotePath; + Q_UINT16 hostPort; + QStringList acceptedLocales; + QString acceptedLanguagesMessage; + LikeBack::WindowListing windowListing; + bool showBarByDefault; + bool showBar; + int disabledCount; + QString fetchedEmail; + KAction *action; +}; + +class LikeBackBar : public QWidget +{ + Q_OBJECT + public: + LikeBackBar(LikeBack *likeBack); + ~LikeBackBar(); + public slots: + void startTimer(); + void stopTimer(); + private slots: + void autoMove(); + void clickedLike(); + void clickedDislike(); + void clickedBug(); + void clickedFeature(); + private: + LikeBack *m_likeBack; + QTimer m_timer; + QToolButton *m_likeButton; + QToolButton *m_dislikeButton; + QToolButton *m_bugButton; + QToolButton *m_featureButton; +}; + +class LikeBackDialog : public KDialogBase +{ + Q_OBJECT + public: + LikeBackDialog(LikeBack::Button reason, const QString &initialComment, const QString &windowPath, const QString &context, LikeBack *likeBack); + ~LikeBackDialog(); + private: + LikeBack *m_likeBack; + QString m_windowPath; + QString m_context; + QButtonGroup *m_group; + QTextEdit *m_comment; + QCheckBox *m_showButtons; + QString introductionText(); + private slots: + void polish(); + void slotDefault(); + void slotOk(); + void changeButtonBarVisible(); + void commentChanged(); + void send(); + void requestFinished(int id, bool error); +}; + +#endif // LIKEBACK_PRIVATE_H diff --git a/src/linklabel.cpp b/src/linklabel.cpp new file mode 100644 index 0000000..be6e2e2 --- /dev/null +++ b/src/linklabel.cpp @@ -0,0 +1,695 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "linklabel.h" +#include "variouswidgets.h" +#include "tools.h" +#include "global.h" +#include "kcolorcombo2.h" +#include "htmlexporter.h" + +/** LinkLook */ + +LinkLook *LinkLook::soundLook = new LinkLook(/*useLinkColor=*/false, /*canPreview=*/false); +LinkLook *LinkLook::fileLook = new LinkLook(/*useLinkColor=*/false, /*canPreview=*/true); +LinkLook *LinkLook::localLinkLook = new LinkLook(/*useLinkColor=*/true, /*canPreview=*/true); +LinkLook *LinkLook::networkLinkLook = new LinkLook(/*useLinkColor=*/true, /*canPreview=*/false); +LinkLook *LinkLook::launcherLook = new LinkLook(/*useLinkColor=*/true, /*canPreview=*/false); + +LinkLook::LinkLook(bool useLinkColor, bool canPreview) +{ + m_useLinkColor = useLinkColor; + m_canPreview = canPreview; + m_iconSize = 0; +} + +LinkLook::LinkLook(const LinkLook &other) +{ + m_useLinkColor = other.useLinkColor(); + m_canPreview = other.canPreview(); + setLook( other.italic(), other.bold(), other.underlining(), + other.color(), other.hoverColor(), + other.iconSize(), other.preview() ); +} + +void LinkLook::setLook(bool italic, bool bold, int underlining, + QColor color, QColor hoverColor, + int iconSize, int preview) +{ + m_italic = italic; + m_bold = bold; + m_underlining = underlining; + m_color = color; + m_hoverColor = hoverColor; + m_iconSize = iconSize; + m_preview = (canPreview() ? preview : None); +} + +int LinkLook::previewSize() const +{ + if (previewEnabled()) { + switch (preview()) { + default: + case None: return 0; + case IconSize: return iconSize(); + case TwiceIconSize: return iconSize() * 2; + case ThreeIconSize: return iconSize() * 3; + } + } else + return 0; +} + +QColor LinkLook::effectiveColor() const +{ + if (m_color.isValid()) + return m_color; + else + return defaultColor(); +} + +QColor LinkLook::effectiveHoverColor() const +{ + if (m_hoverColor.isValid()) + return m_hoverColor; + else + return defaultHoverColor(); +} + +QColor LinkLook::defaultColor() const +{ + if (m_useLinkColor) + return KGlobalSettings::linkColor(); + else + return KGlobalSettings::textColor(); +} + +QColor LinkLook::defaultHoverColor() const +{ + return Qt::red; +} + +LinkLook* LinkLook::lookForURL(const KURL &url) +{ + return url.isLocalFile() ? localLinkLook : networkLinkLook; +} + +QString LinkLook::toCSS(const QString &cssClass, const QColor &defaultTextColor) const +{ + // Set the link class: + QString css = QString(" .%1 a { display: block; width: 100%;").arg(cssClass); + if (underlineOutside()) + css += " text-decoration: underline;"; + else + css += " text-decoration: none;"; + if (m_italic == true) + css += " font-style: italic;"; + if (m_bold == true) + css += " font-weight: bold;"; + QColor textColor = (color().isValid() || m_useLinkColor ? effectiveColor() : defaultTextColor); + css += QString(" color: %1; }\n").arg(textColor.name()); + + // Set the hover state class: + QString hover; + if (m_underlining == OnMouseHover) + hover = "text-decoration: underline;"; + else if (m_underlining == OnMouseOutside) + hover = "text-decoration: none;"; + if (effectiveHoverColor() != effectiveColor()) { + if (!hover.isEmpty()) + hover += " "; + hover += QString("color: %4;").arg(effectiveHoverColor().name()); + } + + // But include it only if it contain a different style than non-hover state: + if (!hover.isEmpty()) + css += QString(" .%1 a:hover { %2 }\n").arg(cssClass, hover); + + return css; +} + +/** LinkLabel */ + +LinkLabel::LinkLabel(int hAlign, int vAlign, QWidget *parent, const char *name, WFlags f) + : QFrame(parent, name, f), m_isSelected(false), m_isHovered(false), m_look(0) +{ + initLabel(hAlign, vAlign); +} + +LinkLabel::LinkLabel(const QString &title, const QString &icon, LinkLook *look, int hAlign, int vAlign, + QWidget *parent, const char *name, WFlags f) + : QFrame(parent, name, f), m_isSelected(false), m_isHovered(false), m_look(0) +{ + initLabel(hAlign, vAlign); + setLink(title, icon, look); +} + +void LinkLabel::initLabel(int hAlign, int vAlign) +{ + m_layout = new QBoxLayout(this, QBoxLayout::LeftToRight); + m_icon = new QLabel(this); + m_title = new QLabel(this); + m_spacer1 = new QSpacerItem(0, 0, QSizePolicy::Preferred/*Expanding*/, QSizePolicy::Preferred/*Expanding*/); + m_spacer2 = new QSpacerItem(0, 0, QSizePolicy::Preferred/*Expanding*/, QSizePolicy::Preferred/*Expanding*/); + + m_hAlign = hAlign; + m_vAlign = vAlign; + + m_title->setTextFormat(Qt::PlainText); + + // DEGUB: + //m_icon->setPaletteBackgroundColor("lightblue"); + //m_title->setPaletteBackgroundColor("lightyellow"); +} + +LinkLabel::~LinkLabel() +{ +} + +void LinkLabel::setLink(const QString &title, const QString &icon, LinkLook *look) +{ + if (look) + m_look = look; // Needed for icon size + + m_title->setText(title); + m_title->setShown( ! title.isEmpty() ); + + if (icon.isEmpty()) + m_icon->clear(); + else { + QPixmap pixmap = DesktopIcon(icon, m_look->iconSize(), m_look->iconSize(), kapp); + if (!pixmap.isNull()) + m_icon->setPixmap(pixmap); + } + m_icon->setShown( ! icon.isEmpty() ); + + if (look) + setLook(look); +} + +void LinkLabel::setLook(LinkLook *look) // FIXME: called externaly (so, without setLink()) it's buggy (icon not +{ + m_look = look; + + QFont font; + font.setBold(look->bold()); + font.setUnderline(look->underlineOutside()); + font.setItalic(look->italic()); + m_title->setFont(font); + m_title->setPaletteForegroundColor( m_isSelected ? KApplication::palette().active().highlightedText() : look->effectiveColor() ); + + m_icon->setShown( m_icon->pixmap() && ! m_icon->pixmap()->isNull() ); + + setAlign(m_hAlign, m_vAlign); +} + +void LinkLabel::setAlign(int hAlign, int vAlign) +{ + m_hAlign = hAlign; + m_vAlign = vAlign; + + if (!m_look) + return; + + // Define alignment flags : + //FIXME TODO: Use directly flags ! + int hFlag, vFlag, wBreak; + switch (hAlign) { + default: + case 0: hFlag = Qt::AlignLeft; break; + case 1: hFlag = Qt::AlignHCenter; break; + case 2: hFlag = Qt::AlignRight; break; + } + switch (vAlign) { + case 0: vFlag = Qt::AlignTop; break; + default: + case 1: vFlag = Qt::AlignVCenter; break; + case 2: vFlag = Qt::AlignBottom; break; + } + wBreak = Qt::WordBreak * (hAlign != 1); + + // Clear the widget : + m_layout->removeItem(m_spacer1); + m_layout->remove(m_icon); + m_layout->remove(m_title); + m_layout->removeItem(m_spacer2); + + // Otherwise, minimumSize will be incoherent (last size ? ) + m_layout->setResizeMode(QLayout::Minimum); + + // And re-populate the widget with the appropriates things and order + bool addSpacers = hAlign == 1; + m_layout->setDirection(QBoxLayout::LeftToRight); + //m_title->setSizePolicy( QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Maximum/*Expanding*/, 0, 0, false) ); + m_icon->setSizePolicy( QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred/*Expanding*/, 0, 0, false) ); + m_spacer1->changeSize( 0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred/*Expanding*/ ); + m_spacer2->changeSize( 0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred/*Expanding*/ ); + + m_icon->setAlignment( hFlag | vFlag ); + m_title->setAlignment( hFlag | vFlag | wBreak ); + if ( addSpacers && (vAlign != 0) || + (m_title->text().isEmpty() && hAlign == 2) ) + m_layout->addItem(m_spacer1); + if (hAlign == 2) { // If align at right, icon is at right + m_layout->addWidget(m_title); + m_layout->addWidget(m_icon); + } else { + m_layout->addWidget(m_icon); + m_layout->addWidget(m_title); + } + if ( addSpacers && (vAlign != 2) || + (m_title->text().isEmpty() && hAlign == 0) ) + m_layout->addItem(m_spacer2); +} + +void LinkLabel::enterEvent(QEvent*) +{ + m_isHovered = true; + if ( ! m_isSelected ) + m_title->setPaletteForegroundColor(m_look->effectiveHoverColor()); + + QFont font = m_title->font(); + font.setUnderline(m_look->underlineInside()); + m_title->setFont(font); +} + +void LinkLabel::leaveEvent(QEvent*) +{ + m_isHovered = false; + if ( ! m_isSelected ) + m_title->setPaletteForegroundColor(m_look->effectiveColor()); + + QFont font = m_title->font(); + font.setUnderline(m_look->underlineOutside()); + m_title->setFont(font); +} + +void LinkLabel::setSelected(bool selected) +{ + m_isSelected = selected; + if (selected) + m_title->setPaletteForegroundColor(KApplication::palette().active().highlightedText()); + else if (m_isHovered) + m_title->setPaletteForegroundColor(m_look->effectiveHoverColor()); + else + m_title->setPaletteForegroundColor(m_look->effectiveColor()); +} + +void LinkLabel::setPaletteBackgroundColor(const QColor &color) +{ + QFrame::setPaletteBackgroundColor(color); + m_title->setPaletteBackgroundColor(color); +} + +int LinkLabel::heightForWidth(int w) const +{ + int iconS = (m_icon->isShown()) ? m_look->iconSize() : 0; // Icon size + int iconW = iconS; // Icon width to remove to w + int titleH = (m_title->isShown()) ? m_title->heightForWidth(w - iconW) : 0; // Title height + + return (titleH >= iconS) ? titleH : iconS; // No margin for the moment ! +} + +QString LinkLabel::toHtml(const QString &imageName) +{ + QString begin = ""; + QString end = ""; + if (m_look->italic()) { + begin += ""; + end.prepend(""); + } + if (m_look->bold()) { + begin += ""; + end.prepend(""); + } + if (m_look->underlineOutside()) { + begin += ""; + end.prepend(""); + } + if (m_icon->pixmap()) { + QPixmap icon(*m_icon->pixmap()); + begin.prepend(" "); + QMimeSourceFactory::defaultFactory()->setPixmap(imageName, icon); + } else + QMimeSourceFactory::defaultFactory()->setData(imageName, 0L); + return begin + Tools::textToHTMLWithoutP(m_title->text()) + end; +} + +/** class LinkDisplay + */ + +LinkDisplay::LinkDisplay() + : m_title(), m_icon(), m_preview(), m_look(0), m_font(), m_minWidth(0), m_width(0), m_height(0) +{ +} + +void LinkDisplay::setLink(const QString &title, const QString &icon, LinkLook *look, const QFont &font) +{ + setLink(title, icon, m_preview, look, font); +} + +void LinkDisplay::setLink(const QString &title, const QString &icon, const QPixmap &preview, LinkLook *look, const QFont &font) +{ + m_title = title; + m_icon = icon; + m_preview = preview; + m_look = look; + m_font = font; + + // "Constants": + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); + int LINK_MARGIN = BUTTON_MARGIN + 2; + + // Recompute m_minWidth: + QRect textRect = QFontMetrics(labelFont(font, false)).boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_title); + int iconPreviewWidth = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.width() : 0)); + m_minWidth = BUTTON_MARGIN - 1 + iconPreviewWidth + LINK_MARGIN + textRect.width(); + // Recompute m_maxWidth: + textRect = QFontMetrics(labelFont(font, false)).boundingRect(0, 0, /*width=*/50000000, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_title); + m_maxWidth = BUTTON_MARGIN - 1 + iconPreviewWidth + LINK_MARGIN + textRect.width(); + // Adjust m_width: + if (m_width < m_minWidth) + setWidth(m_minWidth); + // Recompute m_height: + m_height = heightForWidth(m_width); +} + +void LinkDisplay::setWidth(int width) +{ + if (width < m_minWidth) + width = m_minWidth; + + if (width != m_width) { + m_width = width; + m_height = heightForWidth(m_width); + } +} + +/** Paint on @p painter + * in (@p x, @p y, @p width, @p height) + * using @p colorGroup for the button drawing (if @p isHovered) + * and the LinkLook color() for the text, + * unless [the LinkLook !color.isValid() and it does not useLinkColor()] or [@p isDefaultColor is false]: in this case it will use @p colorGroup.text(). + * It will draw the button if @p isIconButtonHovered. + */ +void LinkDisplay::paint(QPainter *painter, int x, int y, int width, int height, const QColorGroup &colorGroup, + bool isDefaultColor, bool isSelected, bool isHovered, bool isIconButtonHovered) const +{ + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); + int LINK_MARGIN = BUTTON_MARGIN + 2; + + QPixmap pixmap; + // Load the preview...: + if (!isHovered && m_look->previewEnabled() && !m_preview.isNull()) + pixmap = m_preview; + // ... Or the icon (if no preview or if the "Open" icon should be shown): + else { + int iconSize = m_look->iconSize(); + QString iconName = (isHovered ? Global::openNoteIcon() : m_icon); + KIcon::States iconState = (isIconButtonHovered ? KIcon::ActiveState : KIcon::DefaultState); + pixmap = kapp->iconLoader()->loadIcon(iconName, KIcon::Desktop, iconSize, iconState, 0L, /*canReturnNull=*/false); + } + int iconPreviewWidth = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.width() : 0)); + int pixmapX = (iconPreviewWidth - pixmap.width()) / 2; + int pixmapY = (height - pixmap.height()) / 2; + // Draw the button (if any) and the icon: + if (isHovered) + kapp->style().drawPrimitive(QStyle::PE_ButtonCommand, painter, QRect(-1, -1, iconPreviewWidth + 2*BUTTON_MARGIN, height + 2), + colorGroup, QStyle::Style_Enabled | (isIconButtonHovered ? QStyle::Style_MouseOver : 0)); + painter->drawPixmap(x + BUTTON_MARGIN - 1 + pixmapX, y + pixmapY, pixmap); + + // Figure out the text color: + if (isSelected) + painter->setPen(KGlobalSettings::highlightedTextColor()); + else if (isIconButtonHovered) + painter->setPen(m_look->effectiveHoverColor()); + else if (!isDefaultColor || (!m_look->color().isValid() && !m_look->useLinkColor())) // If the color is FORCED or if the link color default to the text color: + painter->setPen(colorGroup.text()); + else + painter->setPen(m_look->effectiveColor()); + // Draw the text: + painter->setFont(labelFont(m_font, isIconButtonHovered)); + painter->drawText(x + BUTTON_MARGIN - 1 + iconPreviewWidth + LINK_MARGIN, y, width - BUTTON_MARGIN + 1 - iconPreviewWidth - LINK_MARGIN, height, + Qt::AlignAuto | Qt::AlignVCenter | Qt::WordBreak, m_title); +} + +QPixmap LinkDisplay::feedbackPixmap(int width, int height, const QColorGroup &colorGroup, bool isDefaultColor) +{ + int theWidth = QMIN(width, maxWidth()); + int theHeight = QMIN(height, heightForWidth(theWidth)); + QPixmap pixmap(theWidth, theHeight); + pixmap.fill(colorGroup.background()); + QPainter painter(&pixmap); + paint(&painter, 0, 0, theWidth, theHeight, colorGroup, isDefaultColor, + /*isSelected=*/false, /*isHovered=*/false, /*isIconButtonHovered=*/false); + painter.end(); + return pixmap; +} + +bool LinkDisplay::iconButtonAt(const QPoint &pos) const +{ + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); +// int LINK_MARGIN = BUTTON_MARGIN + 2; + int iconPreviewWidth = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.width() : 0)); + + return pos.x() <= BUTTON_MARGIN - 1 + iconPreviewWidth + BUTTON_MARGIN; +} + +QRect LinkDisplay::iconButtonRect() const +{ + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); +// int LINK_MARGIN = BUTTON_MARGIN + 2; + int iconPreviewWidth = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.width() : 0)); + + return QRect(0, 0, BUTTON_MARGIN - 1 + iconPreviewWidth + BUTTON_MARGIN, m_height); +} + +QFont LinkDisplay::labelFont(QFont font, bool isIconButtonHovered) const +{ + if (m_look->italic()) + font.setItalic(true); + if (m_look->bold()) + font.setBold(true); + if (isIconButtonHovered) { + if (m_look->underlineInside()) + font.setUnderline(true); + } else { + if (m_look->underlineOutside()) + font.setUnderline(true); + } + return font; +} + +int LinkDisplay::heightForWidth(int width) const +{ + int BUTTON_MARGIN = kapp->style().pixelMetric(QStyle::PM_ButtonMargin); + int LINK_MARGIN = BUTTON_MARGIN + 2; + int iconPreviewWidth = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.width() : 0)); + int iconPreviewHeight = QMAX(m_look->iconSize(), (m_look->previewEnabled() ? m_preview.height() : 0)); + + QRect textRect = QFontMetrics(labelFont(m_font, false)).boundingRect(0, 0, width - BUTTON_MARGIN + 1 - iconPreviewWidth - LINK_MARGIN, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_title); + return QMAX(textRect.height(), iconPreviewHeight + 2*BUTTON_MARGIN - 2); +} + +QString LinkDisplay::toHtml(const QString &/*imageName*/) const +{ + // TODO + return ""; +} + +QString LinkDisplay::toHtml(HTMLExporter *exporter, const KURL &url, const QString &title) +{ + QString linkIcon; + if (m_look->previewEnabled() && !m_preview.isNull()) { + QString fileName = Tools::fileNameForNewFile("preview_" + url.fileName() + ".png", exporter->iconsFolderPath); + QString fullPath = exporter->iconsFolderPath + fileName; + m_preview.save(fullPath, "PNG"); + linkIcon = QString("\"\"") + .arg(exporter->iconsFolderName + fileName, QString::number(m_preview.width()), QString::number(m_preview.height())); + } else { + linkIcon = exporter->iconsFolderName + exporter->copyIcon(m_icon, m_look->iconSize()); + linkIcon = QString("\"\"") + .arg(linkIcon, QString::number(m_look->iconSize()), QString::number(m_look->iconSize())); + } + + QString linkTitle = Tools::textToHTMLWithoutP(title.isEmpty() ? m_title : title); + + return QString("%2 %3").arg(url.prettyURL(), linkIcon, linkTitle); +} + +/** LinkLookEditWidget **/ + +LinkLookEditWidget::LinkLookEditWidget(KCModule *module, const QString exTitle, const QString exIcon, + QWidget *parent, const char *name, WFlags fl) + : QWidget(parent, name, fl) +{ + QLabel *label; + QVBoxLayout *layout = new QVBoxLayout(this, KDialogBase::marginHint(), KDialogBase::spacingHint()); + + m_italic = new QCheckBox(i18n("I&talic"), this); + layout->addWidget(m_italic); + + m_bold = new QCheckBox(i18n("&Bold"), this); + layout->addWidget(m_bold); + + QGridLayout *gl = new QGridLayout(layout, /*rows=*//*(look->canPreview() ? 5 : 4)*/5, /*columns=*//*3*/4); + gl->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 1, /*2*/3); + + m_underlining = new QComboBox(false, this); + m_underlining->insertItem(i18n("Always")); + m_underlining->insertItem(i18n("Never")); + m_underlining->insertItem(i18n("On mouse hovering")); + m_underlining->insertItem(i18n("When mouse is outside")); + label = new QLabel(m_underlining, i18n("&Underline:"), this); + gl->addWidget(label, 0, 0); + gl->addWidget(m_underlining, 0, 1); + + m_color = new KColorCombo2(QRgb(), this); + label = new QLabel(m_color, i18n("Colo&r:"), this); + gl->addWidget(label, 1, 0); + gl->addWidget(m_color, 1, 1); + + m_hoverColor = new KColorCombo2(QRgb(), this); + label = new QLabel(m_hoverColor, i18n("&Mouse hover color:"), this); + gl->addWidget(label, 2, 0); + gl->addWidget(m_hoverColor, 2, 1); + + QHBoxLayout *icoLay = new QHBoxLayout(/*parent=*/0L, /*margin=*/0, KDialogBase::spacingHint()); + m_iconSize = new IconSizeCombo(false, this); + icoLay->addWidget(m_iconSize); + label = new QLabel(m_iconSize, i18n("&Icon size:"), this); + gl->addWidget(label, 3, 0); + gl->addItem( icoLay, 3, 1); + + m_preview = new QComboBox(false, this); + m_preview->insertItem(i18n("None")); + m_preview->insertItem(i18n("Icon size")); + m_preview->insertItem(i18n("Twice the icon size")); + m_preview->insertItem(i18n("Three times the icon size")); + m_label = new QLabel(m_preview, i18n("&Preview:"), this); + m_hLabel = new HelpLabel( + i18n("You disabled preview but still see images?"), + i18n("

      This is normal because there are several type of notes.
      " + "This setting only applies to file and local link notes.
      " + "The images you see are image notes, not file notes.
      " + "File notes are generic documents, whereas image notes are pictures you can draw in.

      " + "

      When dropping files to baskets, %1 detects their type and shows you the content of the files.
      " + "For instance, when dropping image or text files, image and text notes are created for them.
      " + "For type of files %2 does not understand, they are shown as generic file notes with just an icon or file preview and a filename.

      " + "

      If you do not want the application to create notes depending on the content of the files you drop, " + "go to the \"General\" page and uncheck \"Image or animation\" in the \"View Content of Added Files for the Following Types\" group.

      ") + // TODO: Note: you can resize down maximum size of images... + .arg(kapp->aboutData()->programName(), kapp->aboutData()->programName()), + this); + gl->addWidget(m_label, 4, 0); + gl->addWidget(m_preview, 4, 1); + gl->addMultiCellWidget(m_hLabel, /*fromRow=*/5, /*toRow=*/5, /*fromCol=*/1, /*toCol*/2); + + QGroupBox *gb = new QHGroupBox(i18n("Example"), this); + m_exLook = new LinkLook; + m_example = new LinkLabel(exTitle, exIcon, m_exLook, 1, 1, gb); + m_example->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_example->setCursor(QCursor(Qt::PointingHandCursor)); + layout->addWidget(gb); + m_exTitle = exTitle; + m_exIcon = exIcon; + + connect( m_italic, SIGNAL(stateChanged(int)), this, SLOT(slotChangeLook()) ); + connect( m_bold, SIGNAL(stateChanged(int)), this, SLOT(slotChangeLook()) ); + connect( m_underlining, SIGNAL(activated(int)), this, SLOT(slotChangeLook()) ); + connect( m_color, SIGNAL(changed(const QColor&)), this, SLOT(slotChangeLook()) ); + connect( m_hoverColor, SIGNAL(changed(const QColor&)), this, SLOT(slotChangeLook()) ); + connect( m_iconSize, SIGNAL(activated(int)), this, SLOT(slotChangeLook()) ); + connect( m_preview, SIGNAL(activated(int)), this, SLOT(slotChangeLook()) ); + + connect( m_italic, SIGNAL(stateChanged(int)), module, SLOT(changed()) ); + connect( m_bold, SIGNAL(stateChanged(int)), module, SLOT(changed()) ); + connect( m_underlining, SIGNAL(activated(int)), module, SLOT(changed()) ); + connect( m_color, SIGNAL(changed(const QColor&)), module, SLOT(changed()) ); + connect( m_hoverColor, SIGNAL(changed(const QColor&)), module, SLOT(changed()) ); + connect( m_iconSize, SIGNAL(activated(int)), module, SLOT(changed()) ); + connect( m_preview, SIGNAL(activated(int)), module, SLOT(changed()) ); +} + +void LinkLookEditWidget::set(LinkLook *look) +{ + m_look = look; + + m_italic->setChecked(look->italic()); + m_bold->setChecked(look->bold()); + m_underlining->setCurrentItem(look->underlining()); + m_preview->setCurrentItem(look->preview()); + m_color->setDefaultColor(m_look->defaultColor()); + m_color->setColor(m_look->color()); + m_hoverColor->setDefaultColor(m_look->defaultHoverColor()); + m_hoverColor->setColor(m_look->hoverColor()); + m_iconSize->setSize(look->iconSize()); + m_exLook = new LinkLook(*look); + m_example->setLook(m_exLook); + + if (!look->canPreview()) { + m_label->setEnabled(false); + m_hLabel->setEnabled(false); + m_preview->setEnabled(false); + } + slotChangeLook(); +} + +void LinkLookEditWidget::slotChangeLook() +{ + saveToLook(m_exLook); + m_example->setLink(m_exTitle, m_exIcon, m_exLook); // and can't reload it at another size +} + +LinkLookEditWidget::~LinkLookEditWidget() +{ +} + +void LinkLookEditWidget::saveChanges() +{ + saveToLook(m_look); +} + +void LinkLookEditWidget::saveToLook(LinkLook *look) +{ + look->setLook( m_italic->isOn(), m_bold->isOn(), m_underlining->currentItem(), + m_color->color(), m_hoverColor->color(), + m_iconSize->iconSize(), (look->canPreview() ? m_preview->currentItem() : LinkLook::None) ); +} + +#include "linklabel.moc" diff --git a/src/linklabel.h b/src/linklabel.h new file mode 100644 index 0000000..3e964c1 --- /dev/null +++ b/src/linklabel.h @@ -0,0 +1,208 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef LINKLABEL_H +#define LINKLABEL_H + +#include + +class QString; +class KURL; +class QColor; +class QLabel; +class QBoxLayout; +class QSpacerItem; +class QPushButton; +class QCheckBox; +class QComboBox; + +class KColorCombo2; +class IconSizeCombo; + +class HTMLExporter; +class HelpLabel; +class KCModule; + +/** Store the style of links + * @author S�astien Laot + */ +class LinkLook +{ + public: + enum Underlining { Always = 0, Never, OnMouseHover, OnMouseOutside }; + enum Preview { None = 0, IconSize, TwiceIconSize, ThreeIconSize }; + LinkLook(bool useLinkColor = true, bool canPreview = true); + LinkLook(const LinkLook &other); + void setLook( bool italic, bool bold, int underlining, + QColor color, QColor hoverColor, + int iconSize, int preview /*= None*/ ); + inline bool italic() const { return m_italic; } + inline bool bold() const { return m_bold; } + inline int underlining() const { return m_underlining; } + inline QColor color() const { return m_color; } + inline QColor hoverColor() const { return m_hoverColor; } + inline int iconSize() const { return m_iconSize; } + inline int preview() const { return m_preview; } + inline bool useLinkColor() const { return m_useLinkColor; } + inline bool canPreview() const { return m_canPreview; } + /* Helpping Functions */ + bool underlineOutside() const { return underlining() == Always || underlining() == OnMouseOutside; } + bool underlineInside() const { return underlining() == Always || underlining() == OnMouseHover; } + bool previewEnabled() const { return canPreview() && preview() > None; } + int previewSize() const; + QColor effectiveColor() const; + QColor effectiveHoverColor() const; + QColor defaultColor() const; + QColor defaultHoverColor() const; + QString toCSS(const QString &cssClass, const QColor &defaultTextColor) const; + private: + bool m_italic; + bool m_bold; + int m_underlining; + QColor m_color; + QColor m_hoverColor; + int m_iconSize; + int m_preview; + bool m_useLinkColor; + bool m_canPreview; + public: + /* Global Looks */ + static LinkLook *soundLook; + static LinkLook *fileLook; + static LinkLook *localLinkLook; + static LinkLook *networkLinkLook; + static LinkLook *launcherLook; + /* Static method to get a LinkLook from an URL */ + static LinkLook* lookForURL(const KURL &url); +}; + +/** Used to represent links with icon and specific look + * Note : This label will appear blank while LinkLook willn't be set + * @author S�astien Laot + */ +class LinkLabel : public QFrame +{ + Q_OBJECT + public: + LinkLabel(int hAlign, int vAlign, QWidget *parent = 0, const char *name = 0, WFlags f = 0); + LinkLabel(const QString &title, const QString &icon, LinkLook *look, int hAlign, int vAlign, + QWidget *parent = 0, const char *name = 0, WFlags f = 0); + ~LinkLabel(); + public: + void setLink(const QString &title, const QString &icon, LinkLook *look = 0); + void setLook(LinkLook *look); + void setAlign(int hAlign, int vAlign); + void setSelected(bool selected); + void setPaletteBackgroundColor(const QColor &color); + int heightForWidth(int w = -1) const; + QString toHtml(const QString &imageName); + protected: + void initLabel(int hAlign, int vAlign); + void enterEvent(QEvent*); + void leaveEvent(QEvent*); + private: + QBoxLayout *m_layout; + QLabel *m_icon; + QLabel *m_title; + QSpacerItem *m_spacer1; + QSpacerItem *m_spacer2; + + bool m_isSelected; + bool m_isHovered; + + LinkLook *m_look; + int m_hAlign; + int m_vAlign; +}; + +/** THE NEW CLASS TO DISPLAY Links FOR THE NEW BASKET ENGINE. + * We should get ride of class LinkLabel soon. + * And LinkLabel will be entirely rewritten to use this LinkDisplay as the drawing primitives. + * @author S�astien Laot + */ +class LinkDisplay +{ + public: + LinkDisplay(); /// << Create a new empty unselected LinkDisplay. Please then call setLink() to make sense. + // Configure the link displayer: + void setLink(const QString &title, const QString &icon, LinkLook *look, const QFont &font); /// << Change the content and disposition. minWidth(), width() & height() can have changed. Keep the old preview (if any) + void setLink(const QString &title, const QString &icon, const QPixmap &preview, LinkLook *look, const QFont &font); /// << Idem but change the preview too (or remove it if it is invalid) + void setWidth(int width); /// << Set a new width. @see height() that will be computed. + // Get its properties: + int minWidth() const { return m_minWidth; } /// << @return the minimum width to display this link. + int maxWidth() const { return m_maxWidth; } /// << @return the maximum width to display this link. + int width() const { return m_width; } /// << @return the width of the link. It is never less than minWidth()! + int height() const { return m_height; } /// << @return the height if the link after having set it a width. + // And finaly, use it: + void paint(QPainter *painter, int x, int y, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered, bool isIconButtonHovered) const; /// << Draw the link on a painter. Set textColor to be !isValid() to use the LinkLook color. Otherwise it will use this color! + QPixmap feedbackPixmap(int width, int height, const QColorGroup &colorGroup, bool isDefaultColor); /// << @return the pixmap to put under the cursor while dragging this object. + // Eventually get some information about the link display: + bool iconButtonAt(const QPoint &pos) const; /// << @return true if the icon button is under point @p pos. + QRect iconButtonRect() const; /// << @return the rectangle of the icon button. + // Utility function: + QFont labelFont(QFont font, bool isIconButtonHovered) const; /// << @return the font for this link, according to parent font AND LinkLook! + int heightForWidth(int width) const; /// << @return the needed height to display the link in function of a width. + QString toHtml(const QString &imageName) const; /// << Convert the link to HTML code, using the LinkLook to style it. + QString toHtml(HTMLExporter *exporter, const KURL &url, const QString &title = ""); + private: + QString m_title; + QString m_icon; + QPixmap m_preview; + LinkLook *m_look; + QFont m_font; + int m_minWidth; + int m_maxWidth; + int m_width; + int m_height; +}; + +/** A widget to edit a LinkLook, showing a live example to the user. + * @author S�astien Laot + */ +class LinkLookEditWidget : public QWidget +{ + Q_OBJECT + public: + LinkLookEditWidget(KCModule* module, const QString exTitle, const QString exIcon, + QWidget *parent = 0, const char *name = 0, WFlags fl = 0); + ~LinkLookEditWidget(); + void saveChanges(); + void saveToLook(LinkLook *look); + void set(LinkLook *look); + private slots: + void slotChangeLook(); + protected: + LinkLook *m_look; + QCheckBox *m_italic; + QCheckBox *m_bold; + QComboBox *m_underlining; + KColorCombo2 *m_color; + KColorCombo2 *m_hoverColor; + IconSizeCombo *m_iconSize; + QComboBox *m_preview; + LinkLook *m_exLook; + LinkLabel *m_example; + QString m_exTitle; + QString m_exIcon; + HelpLabel *m_hLabel; + QLabel *m_label; +}; + +#endif // LINKLABEL_H diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..7a7d0c0 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,115 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // TMP IN ALPHA 1 + +#include "application.h" +#include "backgroundmanager.h" +#include "mainwindow.h" +#include "settings.h" +#include "global.h" +#include "debugwindow.h" +#include "notedrag.h" +#include "basket.h" +#include "aboutdata.h" +#include "basket_options.h" +#include "backup.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* Thanks to JuK for this Application class */ +/*#if KDE_IS_VERSION( 3, 1, 90 ) +typedef KUniqueApplication Application; // KDE 3.2 and later already re-show the main window +#else +class Application : public KUniqueApplication +{ + public: + Application() : KUniqueApplication(true, true, false) {} + virtual ~Application() {} + virtual int newInstance() { + if (win) + win->setActive(true); + return KUniqueApplication::newInstance(); + } +}; +#endif +*/ + +int main(int argc, char *argv[]) +{ + // KCmdLineArgs::init will modify argv[0] so we remember it: + const char *argv0 = (argc >= 1 ? argv[0] : ""); + + KCmdLineArgs::init(argc, argv, Global::about()); + KCmdLineArgs::addCmdLineOptions(basket_options); + + KUniqueApplication::addCmdLineOptions(); + //KUniqueApplication app; + Application app; + + Backup::figureOutBinaryPath(argv0, app); + + /* Main Window */ + MainWindow* win = new MainWindow(); + Global::bnpView->handleCommandLine(); + app.setMainWidget(win); +// if (!(Settings::useSystray() && KCmdLineArgs::parsedArgs() && KCmdLineArgs::parsedArgs()->isSet("start-hidden"))) +// win->show(); + + if (Settings::useSystray()) { + // The user wanted to not show the window (but it is already hidden by default, so we do nothing): + if (KCmdLineArgs::parsedArgs() && KCmdLineArgs::parsedArgs()->isSet("start-hidden")) + ; + // When the application is restored by KDE session, restore its state: + else if (app.isRestored()) + win->setShown(!Settings::startDocked()); + // Else, the application has been launched explicitely by the user (KMenu, keyboard shortcut...), so he need it, we show it: + else + win->show(); + } else + // No system tray icon: always show: + win->show(); + + // Self-test of the presence of basketui.rc (the only requiered file after basket executable) + if (Global::bnpView->popupMenu("basket") == 0L) + // An error message will be show by BNPView::popupMenu() + return 1; + + /* Go */ + int result = app.exec(); + //return result; + exit(result); // Do not clean up memory to not crash while deleting the KApplication, or do not hang up on KDE exit +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp new file mode 100644 index 0000000..ce8bf0f --- /dev/null +++ b/src/mainwindow.cpp @@ -0,0 +1,345 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "mainwindow.h" +#include "basket.h" +#include "basketproperties.h" +#include "note.h" +#include "noteedit.h" +#include "settings.h" +#include "global.h" +//#include "addbasketwizard.h" +#include "newbasketdialog.h" +#include "basketfactory.h" +#include "popupmenu.h" +#include "xmlwork.h" +#include "debugwindow.h" +#include "notefactory.h" +#include "notedrag.h" +#include "tools.h" +#include "tag.h" +#include "formatimporter.h" +#include "softwareimporters.h" +#include "regiongrabber.h" +#include "password.h" +#include "bnpview.h" +#include "systemtray.h" +#include "clickablelabel.h" +#include "basketstatusbar.h" +#include +#include +#include + +/** Container */ + +MainWindow::MainWindow(QWidget *parent, const char *name) + : KMainWindow(parent, name != 0 ? name : "MainWindow"), m_settings(0), m_quit(false) +{ + BasketStatusBar* bar = new BasketStatusBar(statusBar()); + m_baskets = new BNPView(this, "BNPViewApp", this, actionCollection(), bar); + setCentralWidget(m_baskets); + + setupActions(); + statusBar()->show(); + statusBar()->setSizeGripEnabled(true); + + setAutoSaveSettings(/*groupName=*/QString::fromLatin1("MainWindow"), /*saveWindowSize=*//*FIXME:false:Why was it false??*/true); + +// m_actShowToolbar->setChecked( toolBar()->isShown() ); + m_actShowStatusbar->setChecked( statusBar()->isShown() ); + connect( m_baskets, SIGNAL(setWindowCaption(const QString &)), this, SLOT(setCaption(const QString &))); + +// InlineEditors::instance()->richTextToolBar(); + setStandardToolBarMenuEnabled(true); + + createGUI("basketui.rc"); + applyMainWindowSettings(KGlobal::config(), autoSaveGroup()); +} + +MainWindow::~MainWindow() +{ + saveMainWindowSettings(KGlobal::config(), autoSaveGroup()); + delete m_settings; +} + +void MainWindow::setupActions() +{ + actQuit = KStdAction::quit( this, SLOT(quit()), actionCollection() ); + new KAction(i18n("Minimize"), "", 0, + this, SLOT(minimizeRestore()), actionCollection(), "minimizeRestore" ); + /** Settings : ************************************************************/ +// m_actShowToolbar = KStdAction::showToolbar( this, SLOT(toggleToolBar()), actionCollection()); + m_actShowStatusbar = KStdAction::showStatusbar( this, SLOT(toggleStatusBar()), actionCollection()); + +// m_actShowToolbar->setCheckedState( KGuiItem(i18n("Hide &Toolbar")) ); + + (void) KStdAction::keyBindings( this, SLOT(showShortcutsSettingsDialog()), actionCollection() ); + + (void) KStdAction::configureToolbars(this, SLOT(configureToolbars()), actionCollection() ); + + //KAction *actCfgNotifs = KStdAction::configureNotifications(this, SLOT(configureNotifications()), actionCollection() ); + //actCfgNotifs->setEnabled(false); // Not yet implemented ! + + actAppConfig = KStdAction::preferences( this, SLOT(showSettingsDialog()), actionCollection() ); +} + +/*void MainWindow::toggleToolBar() +{ + if (toolBar()->isVisible()) + toolBar()->hide(); + else + toolBar()->show(); + + saveMainWindowSettings( KGlobal::config(), autoSaveGroup() ); +}*/ + +void MainWindow::toggleStatusBar() +{ + if (statusBar()->isVisible()) + statusBar()->hide(); + else + statusBar()->show(); + + saveMainWindowSettings( KGlobal::config(), autoSaveGroup() ); +} + +void MainWindow::configureToolbars() +{ + saveMainWindowSettings( KGlobal::config(), autoSaveGroup() ); + + KEditToolbar dlg(actionCollection()); + connect( &dlg, SIGNAL(newToolbarConfig()), this, SLOT(slotNewToolbarConfig()) ); + dlg.exec(); +} + +void MainWindow::configureNotifications() +{ + // TODO + // KNotifyDialog *dialog = new KNotifyDialog(this, "KNotifyDialog", false); + // dialog->show(); +} + +void MainWindow::slotNewToolbarConfig() // This is called when OK or Apply is clicked +{ + // ...if you use any action list, use plugActionList on each here... + createGUI("basketui.rc"); // TODO: Reconnect tags menu aboutToShow() ?? + if (!Global::bnpView->isPart()) + Global::bnpView->connectTagsMenu(); // The Tags menu was created again! + plugActionList( QString::fromLatin1("go_baskets_list"), actBasketsList); + applyMainWindowSettings( KGlobal::config(), autoSaveGroup() ); +} + +void MainWindow::showSettingsDialog() +{ + if(m_settings == 0) + m_settings = new KSettings::Dialog(kapp->activeWindow()); + if (Global::mainWindow()) { + m_settings->dialog()->showButton(KDialogBase::Help, false); // Not implemented! + m_settings->dialog()->showButton(KDialogBase::Default, false); // Not implemented! + m_settings->dialog()->exec(); + } else + m_settings->show(); +} + +void MainWindow::showShortcutsSettingsDialog() +{ + KKeyDialog::configure(actionCollection(), "basketui.rc"); + //.setCaption(..) + //actionCollection()->writeSettings(); +} + +void MainWindow::polish() +{ + bool shouldSave = false; + + // If position and size has never been set, set nice ones: + // - Set size to sizeHint() + // - Keep the window manager placing the window where it want and save this + if (Settings::mainWindowSize().isEmpty()) { +// std::cout << "Main Window Position: Initial Set in show()" << std::endl; + int defaultWidth = kapp->desktop()->width() * 5 / 6; + int defaultHeight = kapp->desktop()->height() * 5 / 6; + resize(defaultWidth, defaultHeight); // sizeHint() is bad (too small) and we want the user to have a good default area size + shouldSave = true; + } else { +// std::cout << "Main Window Position: Recall in show(x=" +// << Settings::mainWindowPosition().x() << ", y=" << Settings::mainWindowPosition().y() +// << ", width=" << Settings::mainWindowSize().width() << ", height=" << Settings::mainWindowSize().height() +// << ")" << std::endl; + //move(Settings::mainWindowPosition()); + //resize(Settings::mainWindowSize()); + } + + KMainWindow::polish(); + + if (shouldSave) { +// std::cout << "Main Window Position: Save size and position in show(x=" +// << pos().x() << ", y=" << pos().y() +// << ", width=" << size().width() << ", height=" << size().height() +// << ")" << std::endl; + Settings::setMainWindowPosition(pos()); + Settings::setMainWindowSize(size()); + Settings::saveConfig(); + } +} + +void MainWindow::resizeEvent(QResizeEvent *event) +{ +// std::cout << "Main Window Position: Save size in resizeEvent(width=" << size().width() << ", height=" << size().height() << ") ; isMaximized=" +// << (isMaximized() ? "true" : "false") << std::endl; + Settings::setMainWindowSize(size()); + Settings::saveConfig(); + + // Added to make it work (previous lines do not work): + //saveMainWindowSettings( KGlobal::config(), autoSaveGroup() ); + KMainWindow::resizeEvent(event); +} + +void MainWindow::moveEvent(QMoveEvent *event) +{ +// std::cout << "Main Window Position: Save position in moveEvent(x=" << pos().x() << ", y=" << pos().y() << ")" << std::endl; + Settings::setMainWindowPosition(pos()); + Settings::saveConfig(); + + // Added to make it work (previous lines do not work): + //saveMainWindowSettings( KGlobal::config(), autoSaveGroup() ); + KMainWindow::moveEvent(event); +} + +bool MainWindow::queryExit() +{ + hide(); + return true; +} + +void MainWindow::quit() +{ + m_quit = true; + close(); +} + +bool MainWindow::queryClose() +{ +/* if (m_shuttingDown) // Set in askForQuit(): we don't have to ask again + return true;*/ + + if (kapp->sessionSaving()) { + Settings::setStartDocked(false); // If queryClose() is called it's because the window is shown + Settings::saveConfig(); + return true; + } + + if (Settings::useSystray() && !m_quit) { + Global::systemTray->displayCloseMessage(i18n("Basket")); + hide(); + return false; + } else + return askForQuit(); +} + +bool MainWindow::askForQuit() +{ + QString message = i18n("

      Do you really want to quit %1?

      ").arg(kapp->aboutData()->programName()); + if (Settings::useSystray()) + message += i18n("

      Notice that you do not have to quit the application before ending your KDE session. " + "If you end your session while the application is still running, the application will be reloaded the next time you log in.

      "); + + int really = KMessageBox::warningContinueCancel( this, message, i18n("Quit Confirm"), + KStdGuiItem::quit(), "confirmQuitAsking" ); + + if (really == KMessageBox::Cancel) + { + m_quit = false; + return false; + } + + return true; +} + +void MainWindow::minimizeRestore() +{ + if(isVisible()) + hide(); + else + show(); +} + +void MainWindow::changeActive() +{ +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + kapp->updateUserTimestamp(); // If "activate on mouse hovering systray", or "on drag throught systray" + Global::systemTray->toggleActive(); +#else + setActive( ! isActiveWindow() ); +#endif +} + +#include "mainwindow.moc" diff --git a/src/mainwindow.h b/src/mainwindow.h new file mode 100644 index 0000000..4ea57a2 --- /dev/null +++ b/src/mainwindow.h @@ -0,0 +1,107 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef CONTAINER_H +#define CONTAINER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QWidget; +class QPoint; +class KAction; +class KToggleAction; +class QPopupMenu; +class QSignalMapper; +class QStringList; +class QToolTipGroup; +class KPassivePopup; +class Basket; +class DecoratedBasket; +class Container; +class RegionGrabber; +class NoteSelection; +class BNPView; +class ClickableLabel; +namespace KSettings { class Dialog; }; + + +/** The window that contain baskets, organized by tabs. + * @author S�astien Laot + */ +class MainWindow : public KMainWindow +{ + Q_OBJECT + public: + /** Construtor, initializer and destructor */ + MainWindow(QWidget *parent = 0, const char *name = 0); + ~MainWindow(); + private: + void setupActions(); + public slots: + bool askForQuit(); + /** Settings **/ +// void toggleToolBar(); + void toggleStatusBar(); + void showShortcutsSettingsDialog(); + void configureToolbars(); + void configureNotifications(); + void showSettingsDialog(); + void minimizeRestore(); + void quit(); + void changeActive(); + void slotNewToolbarConfig(); + + protected: + bool queryExit(); + bool queryClose(); + virtual void resizeEvent(QResizeEvent*); + virtual void moveEvent(QMoveEvent*); + public: + void polish(); + + private: + // Settings actions : +// KToggleAction *m_actShowToolbar; + KToggleAction *m_actShowStatusbar; + KAction *actQuit; + KAction *actAppConfig; + QPtrList actBasketsList; + + private: + QVBoxLayout *m_layout; + BNPView *m_baskets; + bool m_startDocked; + KSettings::Dialog *m_settings; + bool m_quit; +}; + +#endif // CONTAINER_H diff --git a/src/newbasketdialog.cpp b/src/newbasketdialog.cpp new file mode 100644 index 0000000..0d5bc44 --- /dev/null +++ b/src/newbasketdialog.cpp @@ -0,0 +1,333 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "newbasketdialog.h" +#include "basketfactory.h" +#include "basket.h" +#include "basketlistview.h" +#include "variouswidgets.h" +#include "kcolorcombo2.h" +#include "tools.h" +#include "global.h" +#include "bnpview.h" + +/** class SingleSelectionKIconView: */ + +SingleSelectionKIconView::SingleSelectionKIconView(QWidget *parent, const char *name, WFlags f) + : KIconView(parent, name, f), m_lastSelected(0) +{ + connect( this, SIGNAL(selectionChanged(QIconViewItem*)), this, SLOT(slotSelectionChanged(QIconViewItem*)) ); + connect( this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); +} + +QDragObject* SingleSelectionKIconView::dragObject() +{ + return 0; +} + +void SingleSelectionKIconView::slotSelectionChanged(QIconViewItem *item) +{ + if (item) + m_lastSelected = item; +} + +void SingleSelectionKIconView::slotSelectionChanged() +{ + if (m_lastSelected && !m_lastSelected->isSelected()) + m_lastSelected->setSelected(true); +} + +/** class NewBasketDefaultProperties: */ + +NewBasketDefaultProperties::NewBasketDefaultProperties() + : icon("") + , backgroundImage("") + , backgroundColor() + , textColor() + , freeLayout(false) + , columnCount(1) +{ +} + +/** class NewBasketDialog: */ + +NewBasketDialog::NewBasketDialog(Basket *parentBasket, const NewBasketDefaultProperties &defaultProperties, QWidget *parent) + : KDialogBase(KDialogBase::Swallow, i18n("New Basket"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"NewBasket", /*modal=*/true, /*separator=*/true) + , m_defaultProperties(defaultProperties) +{ + QWidget *page = new QWidget(this); + QVBoxLayout *topLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + // Icon, Name and Background Color: + QHBoxLayout *nameLayout = new QHBoxLayout(0, marginHint()*2/3, spacingHint()); + m_icon = new KIconButton(page); + m_icon->setIconType(KIcon::NoGroup, KIcon::Action); + m_icon->setIconSize(16); + m_icon->setIcon(m_defaultProperties.icon.isEmpty() ? "basket" : m_defaultProperties.icon); + int size = QMAX(m_icon->sizeHint().width(), m_icon->sizeHint().height()); + m_icon->setFixedSize(size, size); // Make it square! + QToolTip::add(m_icon, i18n("Icon")); + m_name = new QLineEdit(/*i18n("Basket"), */page); + m_name->setMinimumWidth(m_name->fontMetrics().maxWidth()*20); + connect( m_name, SIGNAL(textChanged(const QString&)), this, SLOT(nameChanged(const QString&)) ); + enableButtonOK(false); + QToolTip::add(m_name, i18n("Name")); + m_backgroundColor = new KColorCombo2(QColor(), KGlobalSettings::baseColor(), page); + m_backgroundColor->setColor(QColor()); + m_backgroundColor->setFixedSize(m_backgroundColor->sizeHint()); + m_backgroundColor->setColor(m_defaultProperties.backgroundColor); + QToolTip::add(m_backgroundColor, i18n("Background color")); + nameLayout->addWidget(m_icon); + nameLayout->addWidget(m_name); + nameLayout->addWidget(m_backgroundColor); + topLayout->addLayout(nameLayout); + + QHBoxLayout *layout = new QHBoxLayout(/*parent=*/0, /*margin=*/0, spacingHint()); + KPushButton *button = new KPushButton( KGuiItem(i18n("&Manage Templates..."), "configure"), page ); + connect( button, SIGNAL(clicked()), this, SLOT(manageTemplates()) ); + button->hide(); + + // Compute the right template to use as the default: + QString defaultTemplate = "free"; + if (!m_defaultProperties.freeLayout) { + if (m_defaultProperties.columnCount == 1) + defaultTemplate = "1column"; + else if (m_defaultProperties.columnCount == 2) + defaultTemplate = "2columns"; + else + defaultTemplate = "3columns"; + } + + // Empty: + // * * * * * + // Personnal: + // *To Do + // Professionnal: + // *Meeting Summary + // Hobbies: + // * + m_templates = new SingleSelectionKIconView(page); + m_templates->setItemsMovable(false); + m_templates->setMode(KIconView::Select); + m_templates->setGridX(m_templates->maxItemWidth()); + KIconViewItem *lastTemplate = 0; + QPixmap icon(40, 53); + + QPainter painter(&icon); + painter.fillRect(0, 0, icon.width(), icon.height(), KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, icon.width(), icon.height()); + painter.end(); + lastTemplate = new KIconViewItem(m_templates, lastTemplate, i18n("One column"), icon); + + if (defaultTemplate == "1column") + m_templates->setSelected(lastTemplate, true); + + painter.begin(&icon); + painter.fillRect(0, 0, icon.width(), icon.height(), KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, icon.width(), icon.height()); + painter.drawLine(icon.width() / 2, 0, icon.width() / 2, icon.height()); + painter.end(); + lastTemplate = new KIconViewItem(m_templates, lastTemplate, i18n("Two columns"), icon); + + if (defaultTemplate == "2columns") + m_templates->setSelected(lastTemplate, true); + + painter.begin(&icon); + painter.fillRect(0, 0, icon.width(), icon.height(), KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, icon.width(), icon.height()); + painter.drawLine(icon.width() / 3, 0, icon.width() / 3, icon.height()); + painter.drawLine(icon.width() * 2 / 3, 0, icon.width() * 2 / 3, icon.height()); + painter.end(); + lastTemplate = new KIconViewItem(m_templates, lastTemplate, i18n("Three columns"), icon); + + if (defaultTemplate == "3columns") + m_templates->setSelected(lastTemplate, true); + + painter.begin(&icon); + painter.fillRect(0, 0, icon.width(), icon.height(), KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, icon.width(), icon.height()); + painter.drawRect(icon.width() / 5, icon.width() / 5, icon.width() / 4, icon.height() / 8); + painter.drawRect(icon.width() * 2 / 5, icon.width() * 2 / 5, icon.width() / 4, icon.height() / 8); + painter.end(); + lastTemplate = new KIconViewItem(m_templates, lastTemplate, i18n("Free"), icon); + + if (defaultTemplate == "free") + m_templates->setSelected(lastTemplate, true); + +/* painter.begin(&icon); + painter.fillRect(0, 0, icon.width(), icon.height(), KGlobalSettings::baseColor()); + painter.setPen(KGlobalSettings::textColor()); + painter.drawRect(0, 0, icon.width(), icon.height()); + painter.drawRect(icon.width() * 2 / 5, icon.height() * 3 / 7, icon.width() / 5, icon.height() / 7); + painter.end(); + lastTemplate = new KIconViewItem(m_templates, lastTemplate, i18n("Mind map"), icon);*/ + + m_templates->setMinimumHeight(topLayout->minimumSize().width() * 9 / 16); + + QLabel *label = new QLabel(m_templates, i18n("&Template:"), page); + layout->addWidget(label, /*stretch=*/0, Qt::AlignBottom); + layout->addStretch(); + layout->addWidget(button, /*stretch=*/0, Qt::AlignBottom); + topLayout->addLayout(layout); + topLayout->addWidget(m_templates); + + layout = new QHBoxLayout(/*parent=*/0, /*margin=*/0, spacingHint()); + m_createIn = new QComboBox(page); + m_createIn->insertItem(i18n("(Baskets)")); + label = new QLabel(m_createIn, i18n("C&reate in:"), page); + HelpLabel *helpLabel = new HelpLabel(i18n("How is it useful?"), i18n( + "

      Creating baskets inside of other baskets to form a hierarchy allows you to be more organized by eg.:

        " + "
      • Grouping baskets by themes or topics;
      • " + "
      • Grouping baskets in folders for different projects;
      • " + "
      • Making sections with sub-baskets representing chapters or pages;
      • " + "
      • Making a group of baskets to export together (to eg. email them to people).
      "), page); + layout->addWidget(label); + layout->addWidget(m_createIn); + layout->addWidget(helpLabel); + layout->addStretch(); + topLayout->addLayout(layout); + + m_basketsMap.clear(); + m_basketsMap.insert(/*index=*/0, /*basket=*/0L); + populateBasketsList(Global::bnpView->firstListViewItem(), /*indent=*/1, /*index=*/1); + + connect( m_templates, SIGNAL(doubleClicked(QIconViewItem*)), this, SLOT(slotOk()) ); + connect( m_templates, SIGNAL(returnPressed(QIconViewItem*)), this, SLOT(returnPressed()) ); + + if (parentBasket) { + int index = 0; + + for (QMap::Iterator it = m_basketsMap.begin(); it != m_basketsMap.end(); ++it) + if (it.data() == parentBasket) { + index = it.key(); + break; + } + if (index <= 0) + return; + + if (m_createIn->currentItem() != index) + m_createIn->setCurrentItem(index); + } + + setMainWidget(page); +} + +void NewBasketDialog::returnPressed() +{ + actionButton(KDialogBase::Ok)->animateClick(); +} + +int NewBasketDialog::populateBasketsList(QListViewItem *item, int indent, int index) +{ + static const int ICON_SIZE = 16; + + while (item) { + // Get the basket data: + Basket *basket = ((BasketListViewItem*)item)->basket(); + QPixmap icon = kapp->iconLoader()->loadIcon(basket->icon(), KIcon::NoGroup, ICON_SIZE, KIcon::DefaultState, 0L, /*canReturnNull=*/false); + icon = Tools::indentPixmap(icon, indent, 2 * ICON_SIZE / 3); + + // Append item to the list: + m_createIn->insertItem(icon, basket->basketName()); + m_basketsMap.insert(index, basket); + ++index; + + // Append childs of item to the list: + index = populateBasketsList(item->firstChild(), indent + 1, index); + + // Add next sibling basket: + item = item->nextSibling(); + } + + return index; +} + +NewBasketDialog::~NewBasketDialog() +{ +} + +void NewBasketDialog::polish() +{ + KDialogBase::polish(); + m_name->setFocus(); +} + +void NewBasketDialog::nameChanged(const QString &newName) +{ + enableButtonOK(!newName.isEmpty()); +} + +void NewBasketDialog::slotOk() +{ + QIconViewItem *item = ((SingleSelectionKIconView*)m_templates)->selectedItem(); + QString templateName; + if (item->text() == i18n("One column")) + templateName = "1column"; + if (item->text() == i18n("Two columns")) + templateName = "2columns"; + if (item->text() == i18n("Three columns")) + templateName = "3columns"; + if (item->text() == i18n("Free-form")) + templateName = "free"; + if (item->text() == i18n("Mind map")) + templateName = "mindmap"; + + Global::bnpView->closeAllEditors(); + + QString backgroundImage; + QColor textColor; + if (m_backgroundColor->color() == m_defaultProperties.backgroundColor) { + backgroundImage = m_defaultProperties.backgroundImage; + textColor = m_defaultProperties.textColor; + } + + BasketFactory::newBasket(m_icon->icon(), m_name->text(), backgroundImage, m_backgroundColor->color(), textColor, templateName, m_basketsMap[m_createIn->currentItem()]); + if(Global::mainWindow()) Global::mainWindow()->show(); + + KDialogBase::slotOk(); +} + +void NewBasketDialog::manageTemplates() +{ + KMessageBox::information(this, "Wait a minute! There is no template for now: they will come with time... :-D"); +} + +#include "newbasketdialog.moc" diff --git a/src/newbasketdialog.h b/src/newbasketdialog.h new file mode 100644 index 0000000..9e9477f --- /dev/null +++ b/src/newbasketdialog.h @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NEWBASKETDIALOG_H +#define NEWBASKETDIALOG_H + +#include +#include +#include + +class KIconButton; +class QLineEdit; +class QDragObject; +class QListViewItem; + +class Basket; + +class KColorCombo2; + +/** The class KIconView allow to drag items. We don't want to, so we disable it. + * This class also unselect the selected item when the user right click an empty space. We don't want to, so we reselect it if that happens. + * @author Sébastien Laoût + */ +class SingleSelectionKIconView : public KIconView +{ + Q_OBJECT + public: + SingleSelectionKIconView(QWidget *parent = 0, const char *name = 0, WFlags f = 0); + QDragObject* dragObject(); + QIconViewItem* selectedItem() { return m_lastSelected; } + private slots: + void slotSelectionChanged(QIconViewItem *item); + void slotSelectionChanged(); + private: + QIconViewItem *m_lastSelected; +}; + +/** Struct to store default properties of a new basket. + * When the dialog shows up, the @p icon is used, as well as the @p backgroundColor. + * A template is choosen depending on @p freeLayout and @p columnLayout. + * If @p columnLayout is too high, the template with the more columns will be chosen instead. + * If the user change the background color in the dialog, then @p backgroundImage and @p textColor will not be used! + * @author Sébastien Laoût + */ +struct NewBasketDefaultProperties +{ + QString icon; + QString backgroundImage; + QColor backgroundColor; + QColor textColor; + bool freeLayout; + int columnCount; + + NewBasketDefaultProperties(); +}; + +/** The dialog to create a new basket from a template. + * @author Sébastien Laoût + */ +class NewBasketDialog : public KDialogBase +{ + Q_OBJECT + public: + NewBasketDialog(Basket *parentBasket, const NewBasketDefaultProperties &defaultProperties, QWidget *parent = 0); + ~NewBasketDialog(); + void polish(); + protected slots: + void slotOk(); + void returnPressed(); + void manageTemplates(); + void nameChanged(const QString &newName); + private: + int populateBasketsList(QListViewItem *item, int indent, int index); + NewBasketDefaultProperties m_defaultProperties; + KIconButton *m_icon; + QLineEdit *m_name; + KColorCombo2 *m_backgroundColor; + KIconView *m_templates; + QComboBox *m_createIn; + QMap m_basketsMap; +}; + +#endif // NEWBASKETDIALOG_H diff --git a/src/note.cpp b/src/note.cpp new file mode 100644 index 0000000..fd1fb34 --- /dev/null +++ b/src/note.cpp @@ -0,0 +1,2890 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // rand() function +#include // sqrt() and pow() functions + +#include + +#ifdef None +#undef None +#endif + +#include "basket.h" +#include "tag.h" +#include "note.h" +#include "tools.h" +#include "settings.h" +#include "notefactory.h" // For NoteFactory::filteredURL() + +/** class Note: */ + +#define FOR_EACH_CHILD(childVar) \ + for (Note *childVar = firstChild(); childVar; childVar = childVar->next()) + +// TODO: +#define FOR_EACH_VISIBLE_CHILD(childVar) \ + for (...) + +int Note::NOTE_MARGIN = 2; +int Note::INSERTION_HEIGHT = 5; +int Note::EXPANDER_WIDTH = 9; +int Note::EXPANDER_HEIGHT = 9; +int Note::GROUP_WIDTH = 2*NOTE_MARGIN + EXPANDER_WIDTH; +int Note::HANDLE_WIDTH = GROUP_WIDTH; +int Note::RESIZER_WIDTH = GROUP_WIDTH; +int Note::TAG_ARROW_WIDTH = 5; +int Note::EMBLEM_SIZE = 16; +int Note::MIN_HEIGHT = 2*NOTE_MARGIN + EMBLEM_SIZE; + +Note::Note(Basket *parent) + : m_prev(0), m_next(0), + m_x(0), m_y(-1), m_width(-1), m_height(-1), + m_groupWidth(250), + m_isFolded(false), m_firstChild(0L), m_parentNote(0), + m_basket(parent), m_content(0), m_addedDate(QDateTime::currentDateTime()), m_lastModificationDate(QDateTime::currentDateTime()), + m_computedAreas(false), m_onTop(false), + m_deltaX(0), m_deltaY(0), m_deltaHeight(0), m_collapseFinished(true), m_expandingFinished(true), + m_hovered(false), m_hoveredZone(Note::None), m_focused(false), m_selected(false), m_wasInLastSelectionRect(false), + m_computedState(), m_emblemsCount(0), m_haveInvisibleTags(false), + m_matching(true) +{ +} + +Note::~Note() +{ + delete m_content; + deleteChilds(); +} + +QString Note::addedStringDate() +{ + return KGlobal::locale()->formatDateTime(m_addedDate); +} + +QString Note::lastModificationStringDate() +{ + return KGlobal::locale()->formatDateTime(m_lastModificationDate); +} + +QString Note::toText(const QString &cuttedFullPath) +{ + if (content()) { + // Convert note to text: + QString text = content()->toText(cuttedFullPath); + // If we should not export tags with the text, return immediatly: + if (!Settings::exportTextTags()) + return text; + // Compute the text equivalent of the tag states: + QString firstLine; + QString otherLines; + for (State::List::Iterator it = m_states.begin(); it != m_states.end(); ++it) { + if (!(*it)->textEquivalent().isEmpty()) { + firstLine += (*it)->textEquivalent() + " "; + if ((*it)->onAllTextLines()) + otherLines += (*it)->textEquivalent() + " "; + } + } + // Merge the texts: + if (firstLine.isEmpty()) + return text; + if (otherLines.isEmpty()) + return firstLine + text; + QStringList lines = QStringList::split('\n', text, /*allowEmptyEntries=*/true); + QString result = firstLine + lines[0] + (lines.count() > 1 ? "\n" : ""); + for (uint i = 1/*Skip the first line*/; i < lines.count(); ++i) + result += otherLines + lines[i] + (i < lines.count() - 1 ? "\n" : ""); + return result; + } else + return ""; +} + +bool Note::computeMatching(const FilterData &data) +{ + // Groups are always matching: + if (!content()) + return true; + + // If we were editing this note and there is a save operation in the middle, then do not hide it suddently: + if (basket()->editedNote() == this) + return true; + + bool matching; + // First match tags (they are fast to compute): + switch (data.tagFilterType) { + default: + case FilterData::DontCareTagsFilter: matching = true; break; + case FilterData::NotTaggedFilter: matching = m_states.count() <= 0; break; + case FilterData::TaggedFilter: matching = m_states.count() > 0; break; + case FilterData::TagFilter: matching = hasTag(data.tag); break; + case FilterData::StateFilter: matching = hasState(data.state); break; + } + + // Don't try to match the content text if we are not matching now (the filter is of 'AND' type) or if we shouldn't try to match the string: + if (matching && !data.string.isEmpty()) + matching = content()->match(data); + + return matching; +} + +int Note::newFilter(const FilterData &data) +{ + bool wasMatching = matching(); + m_matching = computeMatching(data); + setOnTop(wasMatching && matching()); + if (!matching()) + setSelected(false); + + int countMatches = (content() && matching() ? 1 : 0); + + FOR_EACH_CHILD (child) + countMatches += child->newFilter(data); + + return countMatches; +} + +void Note::deleteSelectedNotes(bool deleteFilesToo) +{ + if (content() && isSelected()) { + basket()->unplugNote(this); + if (deleteFilesToo && content() && content()->useFile()) + Tools::deleteRecursively(fullPath());//basket()->deleteFiles(fullPath()); // Also delete the folder if it's a folder + //delete this; + return; + } + + Note *child = firstChild(); + Note *next; + while (child) { + next = child->next(); // If we delete 'child' on the next line, child->next() will be 0! + child->deleteSelectedNotes(deleteFilesToo); + child = next; + } +} + +int Note::count() +{ + if (content()) + return 1; + + int count = 0; + FOR_EACH_CHILD (child) + count += child->count(); + return count; +} + +int Note::countDirectChilds() +{ + int count = 0; + FOR_EACH_CHILD (child) + ++count; + return count; +} + +QString Note::fullPath() +{ + if (content()) + return basket()->fullPath() + content()->fileName(); + else + return ""; +} + +void Note::update() +{ + basket()->updateNote(this); +} + +void Note::setFocused(bool focused) +{ + if (m_focused == focused) + return; + + m_focused = focused; + unbufferize(); + update(); // FIXME: ??? +} + +void Note::setSelected(bool selected) +{ + if (isGroup()) + selected = false; // A group cannot be selected! + + if (m_selected == selected) + return; + + if (!selected && basket()->editedNote() == this) { + basket()->closeEditor(); + return; // To avoid a bug that would count 2 less selected notes instead of 1 less! Because m_selected is modified only below. + } + + if (selected) + basket()->addSelectedNote(); + else + basket()->removeSelectedNote(); + + m_selected = selected; + unbufferize(); + update(); // FIXME: ??? +} + +void Note::resetWasInLastSelectionRect() +{ + m_wasInLastSelectionRect = false; + + FOR_EACH_CHILD (child) + child->resetWasInLastSelectionRect(); +} + +void Note::finishLazyLoad() +{ + if (content()) + content()->finishLazyLoad(); + + FOR_EACH_CHILD (child) + child->finishLazyLoad(); +} + +void Note::selectIn(const QRect &rect, bool invertSelection, bool unselectOthers /*= true*/) +{ +// QRect myRect(x(), y(), width(), height()); + +// bool intersects = myRect.intersects(rect); + + // Only intersects with visible areas. + // If the note is not visible, the user don't think it will be selected while selecting the note(s) that hide this, so act like the user think: + bool intersects = false; + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &r = *it; + if (r.intersects(rect)) { + intersects = true; + break; + } + } + + bool toSelect = intersects || (!unselectOthers && isSelected()); + if (invertSelection) { + if (m_wasInLastSelectionRect == intersects) + toSelect = isSelected(); + else if (intersects xor m_wasInLastSelectionRect) + toSelect = !isSelected();// xor intersects; + } + setSelected(toSelect); + m_wasInLastSelectionRect = intersects; + + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + child->selectIn(rect, invertSelection, unselectOthers); + else + child->setSelectedRecursivly(false); + child = child->next(); + first = false; + } +} + +bool Note::allSelected() +{ + if (isGroup()) { + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + if (!child->allSelected()) + return false;; + child = child->next(); + first = false; + } + return true; + } else + return isSelected(); +} + +void Note::setSelectedRecursivly(bool selected) +{ + setSelected(selected && matching()); + + FOR_EACH_CHILD (child) + child->setSelectedRecursivly(selected); +} + +void Note::invertSelectionRecursivly() +{ + if (content()) + setSelected(!isSelected() && matching()); + + FOR_EACH_CHILD (child) + child->invertSelectionRecursivly(); +} + +void Note::unselectAllBut(Note *toSelect) +{ + if (this == toSelect) + setSelectedRecursivly(true); + else { + setSelected(false); + + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + child->unselectAllBut(toSelect); + else + child->setSelectedRecursivly(false); + child = child->next(); + first = false; + } + } +} + +void Note::invertSelectionOf(Note *toSelect) +{ + if (this == toSelect) + setSelectedRecursivly(!isSelected()); + else { + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + child->invertSelectionOf(toSelect); + child = child->next(); + first = false; + } + } +} + +Note* Note::theSelectedNote() +{ + if (!isGroup() && isSelected()) + return this; + + Note *selectedOne; + Note *child = firstChild(); + while (child) { + selectedOne = child->theSelectedNote(); + if (selectedOne) + return selectedOne; + child = child->next(); + } + + return 0; +} + +NoteSelection* Note::selectedNotes() +{ + if (content()) + if (isSelected()) + return new NoteSelection(this); + else + return 0; + + NoteSelection *selection = new NoteSelection(this); + + FOR_EACH_CHILD (child) + selection->append(child->selectedNotes()); + + if (selection->firstChild) { + if (selection->firstChild->next) + return selection; + else { + // If 'selection' is a groupe with only one content, return directly that content: + NoteSelection *reducedSelection = selection->firstChild; +// delete selection; // TODO: Cut all connexions of 'selection' before deleting it! + for (NoteSelection *node = reducedSelection; node; node = node->next) + node->parent = 0; + return reducedSelection; + } + } else { + delete selection; + return 0; + } +} + +bool Note::isAfter(Note *note) +{ + if (this == 0 || note == 0) + return true; + + Note *next = this; + while (next) { + if (next == note) + return false; + next = next->nextInStack(); + } + return true; +} + +bool Note::contains(Note *note) +{ +// if (this == note) +// return true; + + while (note) + if (note == this) + return true; + else + note = note->parentNote(); + +// FOR_EACH_CHILD (child) +// if (child->contains(note)) +// return true; + return false; +} + +Note* Note::firstRealChild() +{ + Note *child = m_firstChild; + while (child) { + if ( !child->isGroup() /*&& child->matching()*/ ) + return child; + child = child->firstChild(); + } + // Empty group: + return 0; +} + +Note* Note::lastRealChild() +{ + Note *child = lastChild(); + while (child) { + if (child->content()) + return child; + Note *possibleChild = child->lastRealChild(); + if (possibleChild && possibleChild->content()) + return possibleChild; + child = child->prev(); + } + return 0; +} + +Note* Note::lastChild() +{ + Note *child = m_firstChild; + while (child && child->next()) + child = child->next(); + + return child; +} + +Note* Note::lastSibling() +{ + Note *last = this; + while (last && last->next()) + last = last->next(); + + return last; +} + +int Note::yExpander() +{ + Note *child = firstRealChild(); + if (child && !child->isShown()) + child = child->nextShownInStack(); // FIXME: Restrict scope to 'this' + + if (child) + return (child->height() - EXPANDER_HEIGHT) / 2 + !(child->height()%2); + else // Groups always have at least 2 notes, except for columns which can have no child (but should exists anyway): + return 0; +} + +bool Note::isFree() +{ + return parentNote() == 0 && basket()->isFreeLayout(); +} + +bool Note::isColumn() +{ + return parentNote() == 0 && basket()->isColumnsLayout(); +} + +bool Note::hasResizer() +{ + // "isFree" || "isColmun but not the last" + return parentNote() == 0 && (basket()->isFreeLayout() || m_next != 0L); +} + +int Note::resizerHeight() +{ + return (isColumn() ? basket()->contentsHeight() : height()); +} + +void Note::setHoveredZone(Zone zone) // TODO: Remove setHovered(bool) and assume it is hovered if zone != None !!!!!!! +{ + if (m_hoveredZone != zone) { + if (content()) + content()->setHoveredZone(m_hoveredZone, zone); + m_hoveredZone = zone; + unbufferize(); + } +} + +Note::Zone Note::zoneAt(const QPoint &pos, bool toAdd) +{ + // Keep the resizer highlighted when resizong, even if the cursor is over another note: + if (basket()->resizingNote() == this) + return Resizer; + + // When dropping/pasting something on a column resizer, add it at the bottom of the column, and don't group it whith the whole column: + if (toAdd && isColumn() && hasResizer()) { + int right = rightLimit() - x(); + if ((pos.x() >= right) && (pos.x() < right + RESIZER_WIDTH) && (pos.y() >= 0) && (pos.y() < resizerHeight())) // Code copied from below + return BottomColumn; + } + + // Below a column: + if (isColumn()) { + if (pos.y() >= height() && pos.x() < rightLimit() - x()) + return BottomColumn; + } + + // If toAdd, return only TopInsert, TopGroup, BottomInsert or BottomGroup + // (by spanning those areas in 4 equal rectangles in the note): + if (toAdd) { + if (!isFree() && !Settings::groupOnInsertionLine()) + return (pos.y() < height() / 2 ? TopInsert : BottomInsert); + if (isColumn() && pos.y() >= height()) + return BottomGroup; + if (pos.y() < height() / 2) + if (pos.x() < width() / 2 && !isFree()) + return TopInsert; + else + return TopGroup; + else + if (pos.x() < width() / 2 && !isFree()) + return BottomInsert; + else + return BottomGroup; + } + + // If in the resizer: + if (hasResizer()) { + int right = rightLimit() - x(); + if ((pos.x() >= right) && (pos.x() < right + RESIZER_WIDTH) && (pos.y() >= 0) && (pos.y() < resizerHeight())) + return Resizer; + } + + // If isGroup, return only Group, GroupExpander, TopInsert or BottomInsert: + if (isGroup()) { + if (pos.y() < INSERTION_HEIGHT) + return (isFree() ? TopGroup : TopInsert); + if (pos.y() >= height() - INSERTION_HEIGHT) + return (isFree() ? BottomGroup : BottomInsert); + + if (pos.x() >= NOTE_MARGIN && pos.x() < NOTE_MARGIN + EXPANDER_WIDTH) { + int yExp = yExpander(); + if (pos.y() >= yExp && pos.y() < yExp + EXPANDER_HEIGHT) + return GroupExpander; + } + if (pos.x() < width()) + return Group; + else + return Note::None; + } + + // Else, it's a normal note: + + if (pos.x() < HANDLE_WIDTH) + return Handle; + + if (pos.y() < INSERTION_HEIGHT) + if ((!isFree() && !Settings::groupOnInsertionLine()) || pos.x() < width() / 2 && !isFree()) + return TopInsert; + else + return TopGroup; + + if (pos.y() >= height() - INSERTION_HEIGHT) + if ((!isFree() && !Settings::groupOnInsertionLine()) || pos.x() < width() / 2 && !isFree()) + return BottomInsert; + else + return BottomGroup; + + for (int i =0; i < m_emblemsCount; i++) { + if ( pos.x() >= HANDLE_WIDTH + (NOTE_MARGIN+EMBLEM_SIZE)*i && + pos.x() < HANDLE_WIDTH + (NOTE_MARGIN+EMBLEM_SIZE)*i + NOTE_MARGIN+EMBLEM_SIZE ) + return (Zone)(Emblem0 + i); + } + + if (pos.x() < HANDLE_WIDTH + (NOTE_MARGIN+EMBLEM_SIZE)*m_emblemsCount + NOTE_MARGIN + TAG_ARROW_WIDTH + NOTE_MARGIN) + return TagsArrow; + + if (!linkAt(pos).isEmpty()) + return Link; + + int customZone = content()->zoneAt(pos - QPoint(contentX(), NOTE_MARGIN)); + if (customZone) + return (Note::Zone)customZone; + + return Content; +} + +QString Note::linkAt(const QPoint &pos) +{ + QString link = m_content->linkAt(pos - QPoint(contentX(), NOTE_MARGIN)); + if (link.isEmpty()) + return link; + else + return NoteFactory::filteredURL(KURL(link)).prettyURL();//KURIFilter::self()->filteredURI(link); +} + +int Note::contentX() +{ + return HANDLE_WIDTH + NOTE_MARGIN + (EMBLEM_SIZE+NOTE_MARGIN)*m_emblemsCount + TAG_ARROW_WIDTH + NOTE_MARGIN; +} + +QRect Note::zoneRect(Note::Zone zone, const QPoint &pos) +{ + if (zone >= Emblem0) + return QRect(HANDLE_WIDTH + (NOTE_MARGIN+EMBLEM_SIZE)*(zone-Emblem0), + INSERTION_HEIGHT, + NOTE_MARGIN + EMBLEM_SIZE, + height() - 2*INSERTION_HEIGHT); + + int yExp; + int right; + int xGroup = (isFree() ? (isGroup() ? 0 : GROUP_WIDTH) : width() / 2); + QRect rect; + int insertSplit = (Settings::groupOnInsertionLine() ? 2 : 1); + switch (zone) { + case Note::Handle: return QRect(0, 0, HANDLE_WIDTH, height()); + case Note::Group: + yExp = yExpander(); + if (pos.y() < yExp) return QRect(0, INSERTION_HEIGHT, width(), yExp - INSERTION_HEIGHT); + if (pos.y() > yExp + EXPANDER_HEIGHT) return QRect(0, yExp + EXPANDER_HEIGHT, width(), height() - yExp - EXPANDER_HEIGHT - INSERTION_HEIGHT); + if (pos.x() < NOTE_MARGIN) return QRect(0, 0, NOTE_MARGIN, height()); + else return QRect(width() - NOTE_MARGIN, 0, NOTE_MARGIN, height()); + case Note::TagsArrow: return QRect(HANDLE_WIDTH + (NOTE_MARGIN+EMBLEM_SIZE)*m_emblemsCount, + INSERTION_HEIGHT, + NOTE_MARGIN + TAG_ARROW_WIDTH + NOTE_MARGIN, + height() - 2*INSERTION_HEIGHT); + case Note::Custom0: + case Note::Content: rect = content()->zoneRect(zone, pos - QPoint(contentX(), NOTE_MARGIN)); + rect.moveBy(contentX(), NOTE_MARGIN); + return rect.intersect( QRect(contentX(), INSERTION_HEIGHT, width() - contentX(), height() - 2*INSERTION_HEIGHT) ); // Only IN contentRect + case Note::GroupExpander: return QRect(NOTE_MARGIN, yExpander(), EXPANDER_WIDTH, EXPANDER_HEIGHT); + case Note::Resizer: right = rightLimit(); + return QRect(right - x(), 0, RESIZER_WIDTH, resizerHeight()); + case Note::Link: + case Note::TopInsert: if (isGroup()) return QRect(0, 0, width(), INSERTION_HEIGHT); + else return QRect(HANDLE_WIDTH, 0, width() / insertSplit - HANDLE_WIDTH, INSERTION_HEIGHT); + case Note::TopGroup: return QRect(xGroup, 0, width() - xGroup, INSERTION_HEIGHT); + case Note::BottomInsert: if (isGroup()) return QRect(0, height() - INSERTION_HEIGHT, width(), INSERTION_HEIGHT); + else return QRect(HANDLE_WIDTH, height() - INSERTION_HEIGHT, width() / insertSplit - HANDLE_WIDTH, INSERTION_HEIGHT); + case Note::BottomGroup: return QRect(xGroup, height() - INSERTION_HEIGHT, width() - xGroup, INSERTION_HEIGHT); + case Note::BottomColumn: return QRect(0, height(), rightLimit() - x(), basket()->contentsHeight() - height()); + case Note::None: return QRect(/*0, 0, -1, -1*/); + default: return QRect(/*0, 0, -1, -1*/); + } +} + +void Note::setCursor(Zone zone) +{ + switch (zone) { + case Note::Handle: + case Note::Group: basket()->viewport()->setCursor(Qt::SizeAllCursor); break; + case Note::Resizer: if (isColumn()) + basket()->viewport()->setCursor(Qt::SplitHCursor); + else + basket()->viewport()->setCursor(Qt::SizeHorCursor); break; + + case Note::Custom0: content()->setCursor(basket()->viewport(), zone); break; + + case Note::Link: + case Note::TagsArrow: + case Note::GroupExpander: basket()->viewport()->setCursor(Qt::PointingHandCursor); break; + + case Note::Content: basket()->viewport()->setCursor(Qt::IbeamCursor); break; + + case Note::TopInsert: + case Note::TopGroup: + case Note::BottomInsert: + case Note::BottomGroup: + case Note::BottomColumn: basket()->viewport()->setCursor(Qt::CrossCursor); break; + case Note::None: basket()->viewport()->unsetCursor(); break; + default: + State *state = stateForEmblemNumber(zone - Emblem0); + if (state && state->parentTag()->states().count() > 1) + basket()->viewport()->setCursor(Qt::PointingHandCursor); + else + basket()->viewport()->unsetCursor(); + } +} + +void Note::addAnimation(int deltaX, int deltaY, int deltaHeight) +{ + // Don't process animation that make the note stay in place! + if (deltaX == 0 && deltaY == 0 && deltaHeight == 0) + return; + + // If it was not animated previsouly, make it animated: + if (m_deltaX == 0 && m_deltaY == 0 && m_deltaHeight == 0) + basket()->addAnimatedNote(this); + + // Configure the animation: + m_deltaX += deltaX; + m_deltaY += deltaY; + m_deltaHeight += deltaHeight; +} + +void Note::setFinalPosition(int x, int y) +{ + addAnimation(x - finalX(), y - finalY()); +} + +void Note::initAnimationLoad() +{ + int x, y; + switch (rand() % 4) { + case 0: // Put it on top: + x = basket()->contentsX() + rand() % basket()->contentsWidth(); + y = -height(); + break; + case 1: // Put it on bottom: + x = basket()->contentsX() + rand() % basket()->contentsWidth(); + y = basket()->contentsY() + basket()->visibleHeight(); + break; + case 2: // Put it on left: + x = -width() - (hasResizer() ? Note::RESIZER_WIDTH : 0); + y = basket()->contentsY() + rand() % basket()->visibleHeight(); + break; + case 3: // Put it on right: + default: // In the case of... + x = basket()->contentsX() + basket()->visibleWidth(); + y = basket()->contentsY() + rand() % basket()->visibleHeight(); + break; + } + cancelAnimation(); + addAnimation(finalX() - x, finalY() - y); + setX(x); + setY(y); + + if (isGroup()) { + const int viewHeight = basket()->contentsY() + basket()->visibleHeight(); + Note *child = firstChild(); + bool first = true; + while (child) { + if (child->finalY() < viewHeight) { + if ((showSubNotes() || first) && child->matching()) + child->initAnimationLoad(); + } else + break; // 'child' are not a free notes (because child of at least one note, 'this'), so 'child' is ordered vertically. + child = child->next(); + first = false; + } + } +} + + +bool Note::advance() +{ + // Animate X: + if (m_deltaX != 0) { + int deltaX = m_deltaX / 3; + if (deltaX == 0) + deltaX = (m_deltaX > 0 ? 1 : -1); + setX(m_x + deltaX); + m_deltaX -= deltaX; + } + + // Animate Y: + if (m_deltaY != 0) { + int deltaY = m_deltaY / 3; + if (deltaY == 0) + deltaY = (m_deltaY > 0 ? 1 : -1); + setY(m_y + deltaY); + m_deltaY -= deltaY; + } + + // Animate Height: + if (m_deltaHeight != 0) { + int deltaHeight = m_deltaHeight / 3; + if (deltaHeight == 0) + deltaHeight = (m_deltaHeight > 0 ? 1 : -1); + m_height += deltaHeight; + unbufferize(); + m_deltaHeight -= deltaHeight; + } + + if (m_deltaHeight == 0) { + m_collapseFinished = true; + m_expandingFinished = true; + } + + // Return true if the animation is finished: + return (m_deltaX == 0 && m_deltaY == 0 && m_deltaHeight == 0); +} + +void Note::unsetWidth() +{ + m_width = 0; + unbufferize(); + + FOR_EACH_CHILD (child) + child->unsetWidth(); +} + +void Note::requestRelayout() +{ + m_width = 0; + unbufferize(); + basket()->relayoutNotes(true); // TODO: A signal that will relayout ONCE and DELAYED if called several times +} + +void Note::setWidth(int width) // TODO: inline ? +{ + if (m_width != width) + setWidthForceRelayout(width); +} + +void Note::setWidthForceRelayout(int width) +{ + unbufferize(); + m_width = (width < minWidth() ? minWidth() : width); + int contentWidth = width - contentX() - NOTE_MARGIN; + if (m_content) { ///// FIXME: is this OK? + if (contentWidth < 1) + contentWidth = 1; + if (contentWidth < m_content->minWidth()) + contentWidth = m_content->minWidth(); + m_height = m_content->setWidthAndGetHeight(contentWidth/* < 1 ? 1 : contentWidth*/) + 2 * NOTE_MARGIN; + if (m_height < 3 * INSERTION_HEIGHT) // Assure a minimal size... + m_height = 3 * INSERTION_HEIGHT; + } +} + +int Note::minWidth() +{ + if (m_content) + return contentX() + m_content->minWidth() + NOTE_MARGIN; + else + return GROUP_WIDTH; ///// FIXME: is this OK? +} + +int Note::minRight() +{ + if (isGroup()) { + int right = finalX() + width(); + Note* child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + right = QMAX(right, child->minRight()); + child = child->next(); + first = false; + } + if (isColumn()) { + int minColumnRight = finalX() + 2*HANDLE_WIDTH; + if (right < minColumnRight) + return minColumnRight; + } + return right; + } else + return finalX() + minWidth(); +} + +void Note::setX(int x) +{ + if (m_x == x) + return; + + if (isBufferized() && basket()->hasBackgroundImage()) { + // Unbufferize only if the background change: + if (basket()->isTiledBackground()) + unbufferize(); + else { + int bgw = basket()->backgroundPixmap()->width(); + if (m_x >= bgw && x < bgw) // Was not in the background image and is now inside it: + unbufferize(); + else if (m_x < bgw) // Was in the background image and is now at another position of the background image or is now outside: + unbufferize(); + } + } + + m_x = x; +} + +void Note::setY(int y) +{ + if (m_y == y) + return; + + if (isBufferized() && basket()->hasBackgroundImage()) { + // Unbufferize only if the background change: + if (basket()->isTiledBackground()) + unbufferize(); + else { + int bgh = basket()->backgroundPixmap()->height(); + if (m_y >= bgh && y < bgh) // Was not in the background image and is now inside it: + unbufferize(); + else if (m_y < bgh) // Was in the background image and is now at another position of the background image or is now outside: + unbufferize(); + } + } + + m_y = y; +} + + +void Note::toggleFolded(bool animate) +{ + // Close the editor if it was editing a note that we are about to hide after collapsing: + if (!m_isFolded && basket() && basket()->isDuringEdit()) { + if (contains(basket()->editedNote()) && firstRealChild() != basket()->editedNote()) + basket()->closeEditor(); + } + + // Important to close the editor FIRST, because else, the last edited note would not show during folding animation (don't ask me why ;-) ): + m_isFolded = ! m_isFolded; + + unbufferize(); + + if (animate) { + // We animate collapsing (so sub-notes fluidly go under the first note) + // We don't animate expanding: we place sub-notes directly under the first note (and the next relayout will animate the expanding) + // But if user quickly collapsed and then expand (while the collapsing animation isn't finished), we animate anyway + bool animateSetUnder = (m_isFolded || !m_collapseFinished); +// std::cout << "fold:" << m_isFolded << " collapseFinished:" << m_collapseFinished << " animateSetUnder:" << animateSetUnder << std::endl; + + if (m_isFolded) + m_collapseFinished = false; + else + m_expandingFinished = false; + + Note* note = firstChild(); + if (note) { + note->setOnTop(true); + while ( (note = note->next()) ) { // Don't process the first child: it is OK + note->setRecursivelyUnder(/*firstRealChild*/firstChild(), animateSetUnder); + note->setOnTop(false); + } + } + } + + //if (basket()->focusedNote() && !basket()->focusedNote()->isShown()) { + if (basket()->isLoaded()) { + basket()->setFocusedNote(firstRealChild()); + basket()->m_startOfShiftSelectionNote = firstRealChild(); + } + + if (basket()->isLoaded() && !m_isFolded) { + //basket()->setFocusedNote(this); + basket()->relayoutNotes(true); + basket()->ensureNoteVisible(this); + } + + basket()->save(); // FIXME: SHOULD WE ALWAYS SAVE ???????? +} + +void Note::setRecursivelyUnder(Note *under, bool animate) +{ + int y = /*finalHeight() > under->finalHeight() ? under->finalY() :*/ under->finalBottom() - finalHeight() + 1; + if (animate) + setFinalPosition(finalX(), y); + else { + setY(y); + cancelAnimation(); + } + + if (isGroup()) + FOR_EACH_CHILD (child) + child->setRecursivelyUnder(under, animate); +} + + +Note* Note::noteAt(int x, int y) +{ + if (matching() && hasResizer()) { + int right = rightLimit(); + // TODO: This code is dupliacted 3 times: !!!! + if ((x >= right) && (x < right + RESIZER_WIDTH) && (y >= m_y) && (y < m_y + resizerHeight())) { + if ( ! m_computedAreas ) + recomputeAreas(); + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &rect = *it; + if (rect.contains(x, y)) + return this; + } + } + } + + if (isGroup()) { + if ((x >= m_x) && (x < m_x + width()) && (y >= m_y) && (y < m_y + m_height)) { + if ( ! m_computedAreas ) + recomputeAreas(); + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &rect = *it; + if (rect.contains(x, y)) + return this; + } + return NULL; + } + Note *child = firstChild(); + Note *found; + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) { + found = child->noteAt(x, y); + if (found) + return found; + } + child = child->next(); + first = false; + } + } else if (matching() && y >= m_y && y < m_y + m_height && x >= m_x && x < m_x + m_width) { + if ( ! m_computedAreas ) + recomputeAreas(); + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &rect = *it; + if (rect.contains(x, y)) + return this; + } + return NULL; + } + + return NULL; +} + +QRect Note::rect() +{ + return QRect(x(), y(), width(), height()); +} + +QRect Note::resizerRect() +{ + return QRect(rightLimit(), y(), RESIZER_WIDTH, resizerHeight()); +} + + +bool Note::showSubNotes() +{ + return !m_isFolded || !m_collapseFinished || basket()->isFiltering(); +} + +void Note::relayoutAt(int x, int y, bool animate) +{ + if (!matching()) + return; + + m_computedAreas = false; + m_areas.clear(); + + // Don't relayout free notes one under the other, because by definition they are freely positionned! + if (isFree()) { + x = finalX(); + y = finalY(); + // If it's a column, it always have the same "fixed" position (no animation): + } else if (isColumn()) { + x = (prev() ? prev()->rightLimit() + RESIZER_WIDTH : 0); + y = 0; + cancelAnimation(); + setX(x); + setY(y); + // But relayout others vertically if they are inside such primary groups or if it is a "normal" basket: + } else { + if (animate) + setFinalPosition(x, y); + else { + cancelAnimation(); + setX(x); + setY(y); + } + } + + // Then, relayout sub-notes (only the first, if the group is folded) and so, assign an height to the group: + if (isGroup()) { + int h = 0; + Note *child = firstChild(); + bool first = true; + while (child) { + if (child->matching() && (!m_isFolded || first || basket()->isFiltering())) { // Don't use showSubNotes() but use !m_isFolded because we don't want a relayout for the animated collapsing notes + child->relayoutAt(x + width(), y+h, animate); + h += child->finalHeight(); + } else // In case the user collapse a group, then move it and then expand it: + child->setXRecursivly(x + width()); // notes SHOULD have a good X coordonate, and not the old one! + // For future animation when re-match, but on bottom of already matched notes! + // Find parent primary note and set the Y to THAT y: + if (!child->matching()) + child->setY(parentPrimaryNote()->y()); + child = child->next(); + first = false; + } + if (finalHeight() != h || m_height != h) { + unbufferize(); + if (animate) + addAnimation(0, 0, h - finalHeight()); + else { + m_height = h; + unbufferize(); + } + } + } else { + setWidth(finalRightLimit() - x); + // If rightLimit is excedded, set the top-level right limit!!! + // and NEED RELAYOUT + } + + // Set the basket area limits (but not for child notes: no need, because they will look for theire parent note): + if (!parentNote()) { + if (basket()->tmpWidth < finalRightLimit() + (hasResizer() ? RESIZER_WIDTH : 0)) + basket()->tmpWidth = finalRightLimit() + (hasResizer() ? RESIZER_WIDTH : 0); + if (basket()->tmpHeight < finalY() + finalHeight()) + basket()->tmpHeight = finalY() + finalHeight(); + // However, if the note exceed the allowed size, let it! : + } else if (!isGroup()) { + if (basket()->tmpWidth < finalX() + width()) + basket()->tmpWidth = finalX() + width(); + if (basket()->tmpHeight < finalY() + finalHeight()) + basket()->tmpHeight = finalY() + finalHeight(); + } +} + +void Note::setXRecursivly(int x) +{ + m_deltaX = 0; + setX(x); + + FOR_EACH_CHILD (child) + child->setXRecursivly(x + width()); +} + +void Note::setYRecursivly(int y) +{ + m_deltaY = 0; + setY(y); + + FOR_EACH_CHILD (child) + child->setYRecursivly(y); +} + +void Note::setGroupWidth(int width) +{ + m_groupWidth = width; +} + +int Note::groupWidth() +{ + if (hasResizer()) + return m_groupWidth; + else + return rightLimit() - x(); +} + +int Note::rightLimit() +{ + if (isColumn() && m_next == 0L) // The last column + return QMAX(x() + minWidth(), basket()->visibleWidth()); + else if (parentNote()) + return parentNote()->rightLimit(); + else + return m_x + m_groupWidth; +} + +int Note::finalRightLimit() +{ + if (isColumn() && m_next == 0L) // The last column + return QMAX(finalX() + minWidth(), basket()->visibleWidth()); + else if (parentNote()) + return parentNote()->finalRightLimit(); + else + return finalX() + m_groupWidth; +} + +/* + * This code is derivated from drawMetalGradient() from the Qt documentation: + */ +void drawGradient( QPainter *p, const QColor &colorTop, const QColor & colorBottom, + int x, int y, int w, int h, + bool sunken, bool horz, bool flat ) /*const*/ +{ + QColor highlight(colorBottom); + QColor subh1(colorTop); + QColor subh2(colorTop); + + QColor topgrad(colorTop); + QColor botgrad(colorBottom); + + + if ( flat && !sunken ) + p->fillRect(x, y, w, h, colorTop); + else { + int i = 0; + int x1 = x; + int y1 = y; + int x2 = x + w - 1; + int y2 = y + h - 1; + if ( horz ) + x2 = x2; + else + y2 = y2; + +#define DRAWLINE if (horz) \ + p->drawLine( x1, y1+i, x2, y1+i ); \ + else \ + p->drawLine( x1+i, y1, x1+i, y2 ); \ + i++; + + // Gradient: + int ng = (horz ? h : w); // how many lines for the gradient? + + int h1, h2, s1, s2, v1, v2; + if ( !sunken ) { + topgrad.hsv( &h1, &s1, &v1 ); + botgrad.hsv( &h2, &s2, &v2 ); + } else { + botgrad.hsv( &h1, &s1, &v1 ); + topgrad.hsv( &h2, &s2, &v2 ); + } + + if ( ng > 1 ) { + for ( int j =0; j < ng; j++ ) { + p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), + s1 + ((s2-s1)*j)/(ng-1), + v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); + DRAWLINE; + } + } else if ( ng == 1 ) { + p->setPen( QColor((h1+h2)/2, (s1+s2)/2, (v1+v2)/2, QColor::Hsv) ); + DRAWLINE; + } + } +} + +void Note::drawExpander(QPainter *painter, int x, int y, const QColor &background, bool expand, Basket *basket) +{ + // If the current style is a KStyle, use it to draw the expander (plus or minus): + if (dynamic_cast(&(kapp->style())) != NULL) { + // Set the 4 rounded corners background to background color: + QColorGroup cg(basket->colorGroup()); + cg.setColor(QColorGroup::Base, background); + + // Fill the inside of the expander in white, typically: + QBrush brush(KGlobalSettings::baseColor()); + painter->fillRect(x, y, 9, 9, brush); + + // Draw it: + ((KStyle&)(kapp->style())).drawKStylePrimitive( KStyle::KPE_ListViewExpander, + painter, + basket->viewport(), + QRect(x, y, 9, 9), + cg, + (expand ? QStyle::Style_On : QStyle::Style_Off) ); + // Else, QStyle does not provide easy way to do so (if it's doable at all...) + // So, I'm drawing it myself my immitating Plastik (pretty style)... + // After all, the note/group handles are all non-QStyle aware so that doesn't matter if the expander is a custom one too. + } else { + int width = EXPANDER_WIDTH; + int height = EXPANDER_HEIGHT; + const QColorGroup &cg = basket->colorGroup(); + + // Fill white area: + painter->fillRect(x + 1, y + 1, width - 2, height - 2, cg.base()); + // Draw contour lines: + painter->setPen(cg.dark()); + painter->drawLine(x + 2, y, x + width - 3, y); + painter->drawLine(x + 2, y + height - 1, x + width - 3, y + height - 1); + painter->drawLine(x, y + 2, x, y + height - 3); + painter->drawLine(x + width - 1, y + 2, x + width - 1, y + height - 3); + // Draw edge points: + painter->drawPoint(x + 1, y + 1); + painter->drawPoint(x + width - 2, y + 1); + painter->drawPoint(x + 1, y + height - 2); + painter->drawPoint(x + width - 2, y + height - 2); + // Draw anti-aliased points: + painter->setPen(Tools::mixColor(cg.dark(), background)); + painter->drawPoint(x + 1, y); + painter->drawPoint(x + width - 2, y); + painter->drawPoint(x, y + 1); + painter->drawPoint(x + width - 1, y + 1); + painter->drawPoint(x, y + height - 2); + painter->drawPoint(x + width - 1, y + height - 2); + painter->drawPoint(x + 1, y + height - 1); + painter->drawPoint(x + width - 2, y + height - 1); + // Draw plus / minus: + painter->setPen(cg.text()); + painter->drawLine(x + 2, y + height / 2, x + width - 3, y + height / 2); + if (expand) + painter->drawLine(x + width / 2, y + 2, x + width / 2, y + height - 3); + } +} + +QColor expanderBackground(int height, int y, const QColor &foreground) +{ + // We will divide height per two, substract one and use that below a division bar: + // To avoid division by zero error, height should be bigger than 3. + // And to avoid y errors or if y is on the borders, we return the border color: the background color. + if (height <= 3 || y <= 0 || y >= height - 1) + return foreground; + + QColor dark = foreground.dark(110); // 1/1.1 of brightness + QColor light = foreground.light(150); // 50% brighter + + int h1, h2, s1, s2, v1, v2; + int ng; + if (y <= (height-2)/2) { + light.hsv( &h1, &s1, &v1 ); + dark.hsv( &h2, &s2, &v2 ); + ng = (height-2)/2; + y -= 1; + } else { + dark.hsv( &h1, &s1, &v1 ); + foreground.hsv( &h2, &s2, &v2 ); + ng = (height-2)-(height-2)/2; + y -= 1 + (height-2)/2; + } + return QColor( h1 + ((h2-h1)*y)/(ng-1), + s1 + ((s2-s1)*y)/(ng-1), + v1 + ((v2-v1)*y)/(ng-1), QColor::Hsv ); +} + +void Note::drawHandle(QPainter *painter, int x, int y, int width, int height, const QColor &background, const QColor &foreground) +{ + QPen backgroundPen(background); + QPen foregroundPen(foreground); + + QColor dark = foreground.dark(110); // 1/1.1 of brightness + QColor light = foreground.light(150); // 50% brighter + + // Draw the surrounding rectangle: + painter->setPen(foregroundPen); + painter->drawLine(0, 0, width - 1, 0); + painter->drawLine(0, 0, 0, height - 1); + painter->drawLine(width - 1, 0, width - 1, height - 1); + painter->drawLine(0, height - 1, width - 1, height - 1); + + // Draw the gradients: + drawGradient( painter, light, dark, 1 + x, 1 + y, width-2, (height-2)/2, /*sunken=*/false, /*horz=*/true, /*flat=*/false ); + drawGradient( painter, dark, foreground, 1 + x, 1 + y + (height-2)/2, width-2, (height-2)-(height-2)/2, /*sunken=*/false, /*horz=*/true, /*flat=*/false ); + + // Round the top corner with background color: + painter->setPen(backgroundPen); + painter->drawLine(0, 0, 0, 3); + painter->drawLine(1, 0, 3, 0); + painter->drawPoint(1, 1); + // Round the bottom corner with background color: + painter->drawLine(0, height-1, 0, height-4); + painter->drawLine(1, height-1, 3, height-1); + painter->drawPoint(1, height-2); + + // Surrounding line of the rounded top-left corner: + painter->setPen(foregroundPen); + painter->drawLine(1, 2, 1, 3); + painter->drawLine(2, 1, 3, 1); + + // Anti-aliased rounded top corner (1/2): + painter->setPen(Tools::mixColor(foreground, background)); + painter->drawPoint(0, 3); + painter->drawPoint(3, 0); + // Anti-aliased rounded bottom corner: + painter->drawPoint(0, height - 4); + painter->drawPoint(3, height - 1); + // Anti-aliased rounded top corner (2/2): + painter->setPen(Tools::mixColor(foreground, light)); + painter->drawPoint(2, 2); + + // Draw the grips: + int xGrips = 4; + int marginedHeight = (height * 80 / 100); // 10% empty on top, and 10% empty on bottom, so 20% of the height should be empty of any grip, and 80% should be in the grips + int nbGrips = (marginedHeight - 3) / 6; + if (nbGrips < 2) + nbGrips = 2; + int yGrips = (height + 1 - nbGrips * 6 - 3) / 2; // +1 to avoid rounding errors, -nbGrips*6-3 the size of the grips + QColor darker = foreground.dark(130); + QColor lighter = foreground.light(130); + for (int i = 0; i < nbGrips; ++i) { + /// Dark color: + painter->setPen(darker); + // Top-left point: + painter->drawPoint(xGrips, yGrips); + painter->drawPoint(xGrips + 1, yGrips); + painter->drawPoint(xGrips, yGrips + 1); + // Bottom-right point: + painter->drawPoint(xGrips + 4, yGrips + 3); + painter->drawPoint(xGrips + 5, yGrips + 3); + painter->drawPoint(xGrips + 4, yGrips + 4); + /// Light color: + painter->setPen(lighter); + // Top-left point: + painter->drawPoint(xGrips + 1, yGrips + 1); + // Bottom-right point: + painter->drawPoint(xGrips + 5, yGrips + 4); + yGrips += 6; + } + // The remaining point: + painter->setPen(darker); + painter->drawPoint(xGrips, yGrips); + painter->drawPoint(xGrips + 1, yGrips); + painter->drawPoint(xGrips, yGrips + 1); + painter->setPen(lighter); + painter->drawPoint(xGrips + 1, yGrips + 1); +} + +void Note::drawResizer(QPainter *painter, int x, int y, int width, int height, const QColor &background, const QColor &foreground, bool rounded) +{ + QPen backgroundPen(background); + QPen foregroundPen(foreground); + + QColor dark = foreground.dark(110); // 1/1.1 of brightness + QColor light = foreground.light(150); // 50% brighter + QColor midLight = foreground.light(105); // 5% brighter + + // Draw the surrounding rectangle: + painter->setPen(foregroundPen); + painter->drawRect(0, 0, width, height); + + // Draw the gradients: + drawGradient( painter, light, dark, 1 + x, 1 + y, width-2, (height-2)/2, /*sunken=*/false, /*horz=*/true, /*flat=*/false ); + drawGradient( painter, dark, foreground, 1 + x, 1 + y + (height-2)/2, width-2, (height-2)-(height-2)/2, /*sunken=*/false, /*horz=*/true, /*flat=*/false ); + + if (rounded) { + // Round the top corner with background color: + painter->setPen(backgroundPen); + painter->drawLine(width - 1, 0, width - 3, 0); + painter->drawLine(width - 1, 1, width - 1, 2); + painter->drawPoint(width - 2, 1); + // Round the bottom corner with background color: + painter->drawLine(width - 1, height - 1, width - 1, height - 4); + painter->drawLine(width - 2, height - 1, width - 4, height - 1); + painter->drawPoint(width - 2, height-2); + + // Surrounding line of the rounded top-left corner: + painter->setPen(foregroundPen); + painter->drawLine(width-2, 2, width-2, 3); + painter->drawLine(width-3, 1, width-4, 1); + + // Anti-aliased rounded top corner (1/2): + painter->setPen(Tools::mixColor(foreground, background)); + painter->drawPoint(width - 1, 3); + painter->drawPoint(width - 4, 0); + // Anti-aliased rounded bottom corner: + painter->drawPoint(width - 1, height - 4); + painter->drawPoint(width - 4, height - 1); + // Anti-aliased rounded top corner (2/2): + painter->setPen(Tools::mixColor(foreground, light)); + painter->drawPoint(width - 3, 2); + } + + // Draw the arows: + int xArrow = 2; + int hMargin = 9; + int countArrows = (height >= hMargin*4 + 6*3 ? 3 : (height >= hMargin*3 + 6*2 ? 2 : 1)); + QColor darker = foreground.dark(130); + QColor lighter = foreground.light(130); + for (int i = 0; i < countArrows; ++i) { + int yArrow; + switch (countArrows) { + default: + case 1: yArrow = (height-6) / 2; break; + case 2: yArrow = (i == 1 ? hMargin : height - hMargin - 6); break; + case 3: yArrow = (i == 1 ? hMargin : (i == 2 ? (height-6) / 2 : height - hMargin - 6)); break; + } + /// Dark color: + painter->setPen(darker); + // Left arrow: + painter->drawLine(xArrow, yArrow + 2, xArrow + 2, yArrow); + painter->drawLine(xArrow, yArrow + 2, xArrow + 2, yArrow + 4); + // Right arrow: + painter->drawLine(width - 1 - xArrow, yArrow + 2, width - 1 - xArrow - 2, yArrow); + painter->drawLine(width - 1 - xArrow, yArrow + 2, width - 1 - xArrow - 2, yArrow + 4); + /// Light color: + painter->setPen(lighter); + // Left arrow: + painter->drawLine(xArrow, yArrow + 2 + 1, xArrow + 2, yArrow + 1); + painter->drawLine(xArrow, yArrow + 2 + 1, xArrow + 2, yArrow + 4 + 1); + // Right arrow: + painter->drawLine(width - 1 - xArrow, yArrow + 2 + 1, width - 1 - xArrow - 2, yArrow + 1); + painter->drawLine(width - 1 - xArrow, yArrow + 2 + 1, width - 1 - xArrow - 2, yArrow + 4 + 1); + } +} + +void Note::drawInactiveResizer(QPainter *painter, int x, int y, int height, const QColor &background, bool column) +{ + // If background color is too dark, we compute a lighter color instead of a darker: + QColor darkBgColor = (Tools::tooDark(background) ? background.light(120) : background.dark(105)); + if (column) { + int halfWidth = RESIZER_WIDTH / 2; + drawGradient(painter, darkBgColor, background, x, y, halfWidth, height, /*sunken=*/false, /*horz=*/false, /*flat=*/false); + drawGradient(painter, background, darkBgColor, halfWidth, y, RESIZER_WIDTH - halfWidth, height, /*sunken=*/false, /*horz=*/false, /*flat=*/false); + } else + drawGradient(painter, darkBgColor, background, x, y, RESIZER_WIDTH, height, /*sunken=*/false, /*horz=*/false, /*flat=*/false ); +} + + +#include +#include + +/* type: 1: topLeft + * 2: bottomLeft + * 3: topRight + * 4: bottomRight + * 5: fourCorners + * 6: noteInsideAndOutsideCorners + * (x,y) relate to the painter origin + * (width,height) only used for 5:fourCorners type + */ +void Note::drawRoundings(QPainter *painter, int x, int y, int type, int width, int height) +{ + int right; + + switch (type) { + case 1: + x += this->x(); + y += this->y(); + basket()->blendBackground(*painter, QRect(x, y, 4, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + 1, 2, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + 2, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + 3, 1, 1), this->x(), this->y()); + break; + case 2: + x += this->x(); + y += this->y(); + basket()->blendBackground(*painter, QRect(x, y - 1, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + 1, 2, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + 2, 4, 1), this->x(), this->y()); + break; + case 3: + right = rightLimit(); + x += right; + y += this->y(); + basket()->blendBackground(*painter, QRect(x - 1, y, 4, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x + 1, y + 1, 2, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x + 2, y + 2, 1, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x + 2, y + 3, 1, 1), right, this->y()); + break; + case 4: + right = rightLimit(); + x += right; + y += this->y(); + basket()->blendBackground(*painter, QRect(x + 2, y - 1, 1, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x + 2, y, 1, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x + 1, y + 1, 2, 1), right, this->y()); + basket()->blendBackground(*painter, QRect(x - 1, y + 2, 4, 1), right, this->y()); + break; + case 5: + // First make sure the corners are white (depending on the widget style): + painter->setPen(basket()->backgroundColor()); + painter->drawPoint(x, y); + painter->drawPoint(x + width - 1, y); + painter->drawPoint(x + width - 1, y + height - 1); + painter->drawPoint(x, y + height - 1); + // And then blend corners: + x += this->x(); + y += this->y(); + basket()->blendBackground(*painter, QRect(x, y, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 1, y, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 1, y + height - 1, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x, y + height - 1, 1, 1), this->x(), this->y()); + break; + case 6: + x += this->x(); + y += this->y(); + //if (!isSelected()) { + // Inside left corners: + basket()->blendBackground(*painter, QRect(x + HANDLE_WIDTH + 1, y + 1, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + HANDLE_WIDTH, y + 2, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + HANDLE_WIDTH + 1, y + height - 2, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + HANDLE_WIDTH, y + height - 3, 1, 1), this->x(), this->y()); + // Inside right corners: + basket()->blendBackground(*painter, QRect(x + width - 4, y + 1, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 3, y + 2, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 4, y + height - 2, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 3, y + height - 3, 1, 1), this->x(), this->y()); + //} + // Outside right corners: + basket()->blendBackground(*painter, QRect(x + width - 1, y, 1, 1), this->x(), this->y()); + basket()->blendBackground(*painter, QRect(x + width - 1, y + height - 1, 1, 1), this->x(), this->y()); + break; + } +} + +/// Blank Spaces Drawing: + +void Note::setOnTop(bool onTop) +{ + m_onTop = onTop; + + Note *note = firstChild(); + while (note) { + note->setOnTop(onTop); + note = note->next(); + } +} + +void substractRectOnAreas(const QRect &rectToSubstract, QValueList &areas, bool andRemove) +{ + for (QValueList::iterator it = areas.begin(); it != areas.end(); ) { + QRect &rect = *it; + // Split the rectangle if it intersects with rectToSubstract: + if (rect.intersects(rectToSubstract)) { + // Create the top rectangle: + if (rectToSubstract.top() > rect.top()) { + areas.insert(it, QRect(rect.left(), rect.top(), rect.width(), rectToSubstract.top() - rect.top())); + rect.setTop(rectToSubstract.top()); + } + // Create the bottom rectangle: + if (rectToSubstract.bottom() < rect.bottom()) { + areas.insert(it, QRect(rect.left(), rectToSubstract.bottom() + 1, rect.width(), rect.bottom() - rectToSubstract.bottom())); + rect.setBottom(rectToSubstract.bottom()); + } + // Create the left rectangle: + if (rectToSubstract.left() > rect.left()) { + areas.insert(it, QRect(rect.left(), rect.top(), rectToSubstract.left() - rect.left(), rect.height())); + rect.setLeft(rectToSubstract.left()); + } + // Create the right rectangle: + if (rectToSubstract.right() < rect.right()) { + areas.insert(it, QRect(rectToSubstract.right() + 1, rect.top(), rect.right() - rectToSubstract.right(), rect.height())); + rect.setRight(rectToSubstract.right()); + } + // Remove the rectangle if it's entirely contained: + if (andRemove && rectToSubstract.contains(rect)) + it = areas.remove(it); + else + ++it; + } else + ++it; + } +} + +void Note::recomputeAreas() +{ + // Initialize the areas with the note rectangle(s): + m_areas.clear(); + m_areas.append(visibleRect()); + if (hasResizer()) + m_areas.append(resizerRect()); + + // Cut the areas where other notes are on top of this note: + Note *note = basket()->firstNote(); + bool noteIsAfterThis = false; + while (note) { + noteIsAfterThis = recomputeAreas(note, noteIsAfterThis); + note = note->next(); + } +} + +bool Note::recomputeAreas(Note *note, bool noteIsAfterThis) +{ + if (note == this) + noteIsAfterThis = true; + // Only compute overlapping of notes AFTER this, or ON TOP this: + //else if ( note->matching() && noteIsAfterThis && (!isOnTop() || (isOnTop() && note->isOnTop())) || (!isOnTop() && note->isOnTop()) ) { + else if ( note->matching() && noteIsAfterThis && (!(isOnTop() || isEditing()) || ((isOnTop() || isEditing()) && (note->isOnTop() || note->isEditing()))) || + (!(isOnTop() || isEditing()) && (note->isOnTop() || note->isEditing())) ) { + //if (!(isSelected() && !note->isSelected())) { // FIXME: FIXME: FIXME: FIXME: This last condition was added LATE, so we should look if it's ALWAYS good: + substractRectOnAreas(note->visibleRect(), m_areas, true); + if (note->hasResizer()) + substractRectOnAreas(note->resizerRect(), m_areas, true); + //} + } + + if (note->isGroup()) { + Note *child = note->firstChild(); + bool first = true; + while (child) { + if ((note->showSubNotes() || first) && note->matching()) + noteIsAfterThis = recomputeAreas(child, noteIsAfterThis); + child = child->next(); + first = false; + } + } + + return noteIsAfterThis; +} + +bool Note::isEditing() +{ + return basket()->editedNote() == this; +} + +void Note::getGradientColors(const QColor &originalBackground, QColor *colorTop, QColor *colorBottom) +{ + bool wasTooDark = Tools::tooDark(originalBackground); + if (wasTooDark) { + *colorTop = originalBackground; + *colorBottom = originalBackground.light(120); + } else { + *colorTop = originalBackground.dark(105); + *colorBottom = originalBackground; + } +} + +/* Drawing policy: + * ============== + * - Draw the note on a pixmap and then draw the pixmap on screen is faster and flicker-free, rather than drawing directly on screen + * - The next time the pixmap can be directly redrawn on screen without (relatively low, for small texts) time-consuming text-drawing + * - To keep memory footprint low, we can destruct the bufferPixmap because redrawing it offscreen and applying it onscreen is nearly as fast as just drawing the pixmap onscreen + * - But as drawing the pixmap offscreen is little time consuming we can keep last visible notes buffered and then the redraw of the entire window is INSTANTANEOUS + * - We keep bufferized note/group draws BUT NOT the resizer: such objects are small and fast to draw, so we don't complexify code for that + */ +void Note::draw(QPainter *painter, const QRect &clipRect) +{ + if (!matching()) + return; + + /** Paint childs: */ + if (isGroup()) { + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + child->draw(painter, clipRect); + child = child->next(); + first = false; + } + } + + QRect myRect(x(), y(), width(), height()); + /** Paint the resizer if needed: */ + if (hasResizer()) { + int right = rightLimit(); + QRect resizerRect(right, y(), RESIZER_WIDTH, resizerHeight()); + if (resizerRect.intersects(clipRect)) { + // Prepare to draw the resizer: + QPixmap pixmap(RESIZER_WIDTH, resizerHeight()); + QPainter painter2(&pixmap); + // Draw gradient or resizer: + if (m_hovered && m_hoveredZone == Resizer) { + QColor baseColor(basket()->backgroundColor()); + QColor highColor(KGlobalSettings::highlightColor()); + drawResizer(&painter2, 0, 0, RESIZER_WIDTH, resizerHeight(), baseColor, highColor, /*rounded=*/!isColumn()); + if (!isColumn()) { + drawRoundings(&painter2, RESIZER_WIDTH - 3, 0, /*type=*/3); + drawRoundings(&painter2, RESIZER_WIDTH - 3, resizerHeight() - 3, /*type=*/4); + } + } else { + drawInactiveResizer(&painter2, /*x=*/0, /*y=*/0, /*height=*/resizerHeight(), basket()->backgroundColor(), isColumn()); + basket()->blendBackground(painter2, resizerRect); + } + // Draw inserter: + if (basket()->inserterShown() && resizerRect.intersects(basket()->inserterRect())) + basket()->drawInserter(painter2, right, y()); + // Draw selection rect: + if (basket()->isSelecting() && resizerRect.intersects(basket()->selectionRect())) { + QRect selectionRect = basket()->selectionRect(); + selectionRect.moveBy(-right, -y()); + QRect selectionRectInside(selectionRect.x() + 1, selectionRect.y() + 1, selectionRect.width() - 2, selectionRect.height() - 2); + if (selectionRectInside.width() > 0 && selectionRectInside.height() > 0) { + QColor insideColor = basket()->selectionRectInsideColor(); + QColor darkInsideColor(insideColor.dark(105)); + painter2.setClipRect(selectionRectInside); + if (isColumn()) { + int halfWidth = RESIZER_WIDTH / 2; + drawGradient(&painter2, darkInsideColor, insideColor, 0, 0, halfWidth, resizerHeight(), /*sunken=*/false, /*horz=*/false, /*flat=*/false ); + drawGradient(&painter2, insideColor, darkInsideColor, halfWidth, 0, RESIZER_WIDTH-halfWidth, resizerHeight(), /*sunken=*/false, /*horz=*/false, /*flat=*/false ); + } else + drawGradient( &painter2, darkInsideColor, insideColor, 0, 0, RESIZER_WIDTH, resizerHeight(), /*sunken=*/false, /*horz=*/false, /*flat=*/false ); + painter2.setClipping(false); + selectionRectInside.moveBy(right, y()); + basket()->blendBackground(painter2, selectionRectInside, right, y(), false); + } + painter2.setPen(KGlobalSettings::highlightColor().dark()); + painter2.drawRect(selectionRect); + painter2.setPen(Tools::mixColor(KGlobalSettings::highlightColor().dark(), basket()->backgroundColor())); + painter2.drawPoint(selectionRect.topLeft()); + painter2.drawPoint(selectionRect.topRight()); + painter2.drawPoint(selectionRect.bottomLeft()); + painter2.drawPoint(selectionRect.bottomRight()); + } + // Draw on screen: + painter2.end(); + /** Compute visible areas: */ + if ( ! m_computedAreas ) + recomputeAreas(); + if (m_areas.isEmpty()) + return; + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &rect = *it; + painter->drawPixmap(rect.x(), rect.y(), pixmap, rect.x() - right, rect.y() - y(), rect.width(), rect.height()); + } + } + } + + /** Then, draw the note/group ONLY if needed: */ + if ( ! myRect.intersects(clipRect) ) + return; + + /** Compute visible areas: */ + if ( ! m_computedAreas ) + recomputeAreas(); + if (m_areas.isEmpty()) + return; + + /** Directly draw pixmap on screen if it is already buffered: */ + if (isBufferized()) { + drawBufferOnScreen(painter, m_bufferedPixmap); + return; + } + + /** Initialise buffer painter: */ + m_bufferedPixmap.resize(width(), height()); + QPainter painter2(&m_bufferedPixmap); + + /** Initialise colors: */ + QColor baseColor(basket()->backgroundColor()); + QColor highColor(KGlobalSettings::highlightColor()); + QColor midColor = Tools::mixColor(baseColor, highColor); + + /** Initialise brushs and pens: */ + QBrush baseBrush(baseColor); + QBrush highBrush(highColor); + QPen basePen(baseColor); + QPen highPen(highColor); + QPen midPen(midColor); + + /** Figure out the state of the note: */ + bool hovered = m_hovered && m_hoveredZone != TopInsert && m_hoveredZone != BottomInsert && m_hoveredZone != Resizer; + + /** And then draw the group: */ + if (isGroup()) { + // Draw background or handle: + if (hovered) { + drawHandle(&painter2, 0, 0, width(), height(), baseColor, highColor); + drawRoundings(&painter2, 0, 0, /*type=*/1); + drawRoundings(&painter2, 0, height() - 3, /*type=*/2); + } else { + painter2.fillRect(0, 0, width(), height(), baseBrush); + basket()->blendBackground(painter2, myRect, -1, -1, /*opaque=*/true); + } + + // Draw expander: + int yExp = yExpander(); + drawExpander(&painter2, NOTE_MARGIN, yExp, (hovered ? expanderBackground(height(), yExp+EXPANDER_HEIGHT/2, highColor) : baseColor), m_isFolded, basket()); + // Draw expander rounded edges: + if (hovered) { + QColor color1 = expanderBackground(height(), yExp, highColor); + QColor color2 = expanderBackground(height(), yExp + EXPANDER_HEIGHT - 1, highColor); + painter2.setPen(color1); + painter2.drawPoint(NOTE_MARGIN, yExp); + painter2.drawPoint(NOTE_MARGIN + 9 - 1, yExp); + painter2.setPen(color2); + painter2.drawPoint(NOTE_MARGIN, yExp + 9 - 1); + painter2.drawPoint(NOTE_MARGIN + 9 - 1, yExp + 9 - 1); + } else + drawRoundings(&painter2, NOTE_MARGIN, yExp, /*type=*/5, 9, 9); + + // Draw on screen: + painter2.end(); + drawBufferOnScreen(painter, m_bufferedPixmap); + return; + } + + /** Or draw the note: */ + // What are the background colors: + QColor background = basket()->backgroundColor(); + if (isSelected()) + if (m_computedState.backgroundColor().isValid()) + background = Tools::mixColor(Tools::mixColor(m_computedState.backgroundColor(), KGlobalSettings::highlightColor()), KGlobalSettings::highlightColor()); + else + background = KGlobalSettings::highlightColor(); + else if (m_computedState.backgroundColor().isValid()) + background = m_computedState.backgroundColor(); + QColor bgColor; + QColor darkBgColor; + getGradientColors(background, &darkBgColor, &bgColor); + // Draw background (color, gradient and pixmap): + drawGradient( &painter2, bgColor, darkBgColor, 0, 0, width(), height(), /*sunken=*/!hovered, /*horz=*/true, /*flat=*/false ); + if (!hovered) { + painter2.setPen(Tools::mixColor(bgColor, darkBgColor)); + painter2.drawLine(0, height() - 1, width(), height() - 1); + } + basket()->blendBackground(painter2, myRect); + + if (hovered) { + // Top/Bottom lines: + painter2.setPen(highPen); + painter2.drawLine(0, height() - 1, width(), height() - 1); + painter2.drawLine(0, 0, width(), 0); + // The handle: + drawHandle(&painter2, 0, 0, HANDLE_WIDTH, height(), baseColor, highColor); + drawRoundings(&painter2, 0, 0, /*type=*/1); + drawRoundings(&painter2, 0, height() - 3, /*type=*/2); + // Round handle-right-side border: + painter2.setPen(highPen); + painter2.drawPoint(HANDLE_WIDTH, 1); + painter2.drawPoint(HANDLE_WIDTH, height() - 2); + // Light handle top-right round corner: + painter2.setPen(QPen(highColor.light(150))); + painter2.drawPoint(HANDLE_WIDTH - 1, 1); + // Handle anti-aliased rounded handle-right-side corners: + QColor insideMidColor = Tools::mixColor(bgColor, highColor); + painter2.setPen(insideMidColor); + // Left inside round corners: + painter2.drawPoint(HANDLE_WIDTH + 1, 1); + painter2.drawPoint(HANDLE_WIDTH, 2); + painter2.drawPoint(HANDLE_WIDTH + 1, height() - 2); + painter2.drawPoint(HANDLE_WIDTH, height() - 3); + // Right inside round corners: + painter2.drawPoint(width() - 4, 1); + painter2.drawPoint(width() - 3, 2); + painter2.drawPoint(width() - 4, height() - 2); + painter2.drawPoint(width() - 3, height() - 3); + // Right rounded edge: + painter2.setPen(highPen); + painter2.fillRect(width() - 2, 0, 2, height(), highBrush); + painter2.drawPoint(width() - 3, 1); + painter2.drawPoint(width() - 3, height() - 2); + // Right anti-aliased rounded edge: + painter2.setPen(midPen); + painter2.drawPoint(width() - 1, 0); + painter2.drawPoint(width() - 1, height() - 1); + // Blend background pixmap: + drawRoundings(&painter2, 0, 0, /*type=*/6, width(), height()); + } + + if (isFocused()) { + QRect focusRect(HANDLE_WIDTH, NOTE_MARGIN - 1, width() - HANDLE_WIDTH - 2, height() - 2*NOTE_MARGIN + 2); + painter2.drawWinFocusRect(focusRect); + } + + // Draw the Emblems: + int yIcon = (height() - EMBLEM_SIZE) / 2; + int xIcon = HANDLE_WIDTH + NOTE_MARGIN; + for (State::List::Iterator it = m_states.begin(); it != m_states.end(); ++it) { + if (!(*it)->emblem().isEmpty()) { + QPixmap stateEmblem = kapp->iconLoader()->loadIcon((*it)->emblem(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, false); + painter2.drawPixmap(xIcon, yIcon, stateEmblem); + xIcon += NOTE_MARGIN + EMBLEM_SIZE; + } + } + + // Determine the colors (for the richText drawing) and the text color (for the tags arrow too): + QColorGroup cg(basket()->colorGroup()); + cg.setColor(QColorGroup::Text, (m_computedState.textColor().isValid() ? m_computedState.textColor() : basket()->textColor()) ); + cg.setColor(QColorGroup::Background, bgColor); + if (isSelected()) + cg.setColor(QColorGroup::Text, KGlobalSettings::highlightedTextColor()); + + // Draw the Tags Arrow: + if (hovered) { + QColor textColor = cg.color(QColorGroup::Text); + QColor light = Tools::mixColor(textColor, bgColor); + QColor mid = Tools::mixColor(textColor, light); + painter2.setPen(light);//QPen(basket()->colorGroup().dark().light(150))); + painter2.drawLine(xIcon, yIcon + 6, xIcon + 4, yIcon + 6); + painter2.setPen(mid);//QPen(basket()->colorGroup().dark())); + painter2.drawLine(xIcon + 1, yIcon + 7, xIcon + 3, yIcon + 7); + painter2.setPen(textColor);//QPen(basket()->colorGroup().foreground())); + painter2.drawPoint(xIcon + 2, yIcon + 8); + } else if (m_haveInvisibleTags) { + painter2.setPen(cg.color(QColorGroup::Text)/*QPen(basket()->colorGroup().foreground())*/); + painter2.drawPoint(xIcon, yIcon + 7); + painter2.drawPoint(xIcon + 2, yIcon + 7); + painter2.drawPoint(xIcon + 4, yIcon + 7); + } + + // Draw content: + // Optimization: do not draw text notes because it is time consuming and should be done nearly at each tetx modification. + if (basket()->editedNote() != this || basket()->editedNote()->content()->type() != NoteType::Html) { + painter2.translate(contentX(), NOTE_MARGIN); + painter2.setFont( m_computedState.font(painter2.font()) ); + m_content->paint(&painter2, width() - contentX() - NOTE_MARGIN, height() - 2*NOTE_MARGIN, cg, !m_computedState.textColor().isValid(), isSelected(), hovered); + } + + // Draw on screen: + painter2.end(); + drawBufferOnScreen(painter, m_bufferedPixmap); +} + +void Note::drawBufferOnScreen(QPainter *painter, const QPixmap &contentPixmap) +{ + for (QValueList::iterator it = m_areas.begin(); it != m_areas.end(); ++it) { + QRect &rect = *it; + if (rect.x() >= x() + width()) // It's a rect of the resizer, don't draw it! + continue; + // If the inserter is above the note, draw it, BUT NOT in the buffer pixmap, + // we copy the rectangle in a new pixmap, apply the inserter and then draw this new pixmap on screen: + if ( (basket()->inserterShown() && rect.intersects(basket()->inserterRect())) || + (basket()->isSelecting() && rect.intersects(basket()->selectionRect())) ) { + QPixmap pixmap3(rect.width(), rect.height()); + QPainter painter3(&pixmap3); + painter3.drawPixmap(0, 0, contentPixmap, rect.x() - x(), rect.y() - y(), rect.width(), rect.height()); + // Draw inserter: + if (basket()->inserterShown() && rect.intersects(basket()->inserterRect())) + basket()->drawInserter(painter3, rect.x(), rect.y()); + // Draw selection rect: + if (basket()->isSelecting() && rect.intersects(basket()->selectionRect())) { + QRect selectionRect = basket()->selectionRect(); + selectionRect.moveBy(-rect.x(), -rect.y()); + + QRect selectionRectInside(selectionRect.x() + 1, selectionRect.y() + 1, selectionRect.width() - 2, selectionRect.height() - 2); + if (selectionRectInside.width() > 0 && selectionRectInside.height() > 0) { + bufferizeSelectionPixmap(); + selectionRectInside.moveBy(rect.x(), rect.y()); + QRect rectToPaint = rect.intersect(selectionRectInside); + rectToPaint.moveBy(-x(), -y()); + painter3.drawPixmap(rectToPaint.topLeft() + QPoint(x(), y()) - rect.topLeft(), m_bufferedSelectionPixmap, rectToPaint); + //blendBackground(painter2, selectionRectInside, rect.x(), rect.y(), true, &m_selectedBackgroundPixmap); + } + + painter3.setPen(KGlobalSettings::highlightColor().dark()); + painter3.drawRect(selectionRect); + if (isGroup()) + painter3.setPen(Tools::mixColor(KGlobalSettings::highlightColor().dark(), basket()->backgroundColor())); + else { + // What are the background colors: + QColor bgColor = basket()->backgroundColor(); + if (isSelected()) + bgColor = (m_computedState.backgroundColor().isValid() ? Tools::mixColor(Tools::mixColor(m_computedState.backgroundColor(), KGlobalSettings::highlightColor()), KGlobalSettings::highlightColor()) : KGlobalSettings::highlightColor()); + else if (m_computedState.backgroundColor().isValid()) + bgColor = m_computedState.backgroundColor(); + painter3.setPen(Tools::mixColor(KGlobalSettings::highlightColor().dark(), bgColor)); + } + painter3.drawPoint(selectionRect.topLeft()); + painter3.drawPoint(selectionRect.topRight()); + painter3.drawPoint(selectionRect.bottomLeft()); + painter3.drawPoint(selectionRect.bottomRight()); + } + painter3.end(); + painter->drawPixmap(rect.x(), rect.y(), pixmap3); + // Else, draw the rect pixmap directly on screen: + } else + painter->drawPixmap(rect.x(), rect.y(), contentPixmap, rect.x() - x(), rect.y() - y(), rect.width(), rect.height()); + } +} + +void Note::setContent(NoteContent *content) +{ + m_content = content; +} + +/*const */State::List& Note::states() const +{ + return (State::List&)m_states; +} + +void Note::addState(State *state, bool orReplace) +{ + if (!content()) + return; + + Tag *tag = state->parentTag(); + State::List::iterator itStates = m_states.begin(); + // Browse all tags, see if the note has it, increment itSates if yes, and then insert the state at this position... + // For each existing tags: + for (Tag::List::iterator it = Tag::all.begin(); it != Tag::all.end(); ++it) { + // If the current tag isn't the one to assign or the current one on the note, go to the next tag: + if (*it != tag && itStates != m_states.end() && *it != (*itStates)->parentTag()) + continue; + // We found the tag to insert: + if (*it == tag) { + // And the note already have the tag: + if (itStates != m_states.end() && *it == (*itStates)->parentTag()) { + // We replace the state if wanted: + if (orReplace) { + itStates = m_states.insert(itStates, state); + ++itStates; + m_states.remove(itStates); + recomputeStyle(); + } + } else { + m_states.insert(itStates, state); + recomputeStyle(); + } + return; + } + // The note has this tag: + if (itStates != m_states.end() && *it == (*itStates)->parentTag()) + ++itStates; + } +} + +QFont Note::font() +{ + return m_computedState.font( basket()->QScrollView::font() ); +} + +QColor Note::backgroundColor() +{ + if (m_computedState.backgroundColor().isValid()) + return m_computedState.backgroundColor(); + else + return basket()->backgroundColor(); +} + +QColor Note::textColor() +{ + if (m_computedState.textColor().isValid()) + return m_computedState.textColor(); + else + return basket()->textColor(); +} + +void Note::recomputeStyle() +{ + State::merge(m_states, &m_computedState, &m_emblemsCount, &m_haveInvisibleTags, basket()->backgroundColor()); +// unsetWidth(); + if (content()) + content()->fontChanged(); +// requestRelayout(); // TODO! +} + +void Note::recomputeAllStyles() +{ + if (content()) // We do the merge ourself, without calling recomputeStyle(), so there is no infinite recursion: + //State::merge(m_states, &m_computedState, &m_emblemsCount, &m_haveInvisibleTags, basket()->backgroundColor()); + recomputeStyle(); + else if (isGroup()) + FOR_EACH_CHILD (child) + child->recomputeAllStyles(); +} + +bool Note::removedStates(const QValueList &deletedStates) +{ + bool modifiedBasket = false; + + if (!states().isEmpty()) { + for (QValueList::const_iterator it = deletedStates.begin(); it != deletedStates.end(); ++it) + if (hasState(*it)) { + removeState(*it); + modifiedBasket = true; + } + } + + FOR_EACH_CHILD (child) + if (child->removedStates(deletedStates)) + modifiedBasket = true; + + return modifiedBasket; +} + + +void Note::addTag(Tag *tag) +{ + addState(tag->states().first(), /*but do not replace:*/false); +} + +void Note::removeState(State *state) +{ + for (State::List::iterator it = m_states.begin(); it != m_states.end(); ++it) + if (*it == state) { + m_states.remove(it); + recomputeStyle(); + return; + } +} + +void Note::removeTag(Tag *tag) +{ + for (State::List::iterator it = m_states.begin(); it != m_states.end(); ++it) + if ((*it)->parentTag() == tag) { + m_states.remove(it); + recomputeStyle(); + return; + } +} + +void Note::removeAllTags() +{ + m_states.clear(); + recomputeStyle(); +} + +void Note::addTagToSelectedNotes(Tag *tag) +{ + if (content() && isSelected()) + addTag(tag); + + FOR_EACH_CHILD (child) + child->addTagToSelectedNotes(tag); +} + +void Note::removeTagFromSelectedNotes(Tag *tag) +{ + if (content() && isSelected()) { + if (hasTag(tag)) + setWidth(0); + removeTag(tag); + } + + FOR_EACH_CHILD (child) + child->removeTagFromSelectedNotes(tag); +} + +void Note::removeAllTagsFromSelectedNotes() +{ + if (content() && isSelected()) { + if (m_states.count() > 0) + setWidth(0); + removeAllTags(); + } + + FOR_EACH_CHILD (child) + child->removeAllTagsFromSelectedNotes(); +} + +void Note::addStateToSelectedNotes(State *state, bool orReplace) +{ + if (content() && isSelected()) + addState(state, orReplace); + + FOR_EACH_CHILD (child) + child->addStateToSelectedNotes(state, orReplace); // TODO: Basket::addStateToSelectedNotes() does not have orReplace +} + +void Note::changeStateOfSelectedNotes(State *state) +{ + if (content() && isSelected() && hasTag(state->parentTag())) + addState(state); + + FOR_EACH_CHILD (child) + child->changeStateOfSelectedNotes(state); +} + +bool Note::selectedNotesHaveTags() +{ + if (content() && isSelected() && m_states.count() > 0) + return true; + + FOR_EACH_CHILD (child) + if (child->selectedNotesHaveTags()) + return true; + return false; +} + +bool Note::hasState(State *state) +{ + for (State::List::iterator it = m_states.begin(); it != m_states.end(); ++it) + if (*it == state) + return true; + return false; +} + +bool Note::hasTag(Tag *tag) +{ + for (State::List::iterator it = m_states.begin(); it != m_states.end(); ++it) + if ((*it)->parentTag() == tag) + return true; + return false; +} + +State* Note::stateOfTag(Tag *tag) +{ + for (State::List::iterator it = m_states.begin(); it != m_states.end(); ++it) + if ((*it)->parentTag() == tag) + return *it; + return 0; +} + +State* Note::stateForEmblemNumber(int number) +{ + int i = -1; + for (State::List::Iterator it = m_states.begin(); it != m_states.end(); ++it) + if (!(*it)->emblem().isEmpty()) { + ++i; + if (i == number) + return *it; + } + return 0; +} + +bool Note::stateForTagFromSelectedNotes(Tag *tag, State **state) +{ + if (content() && isSelected()) { + // What state is the tag on this note? + State* stateOfTag = this->stateOfTag(tag); + // This tag is not assigned to this note, the action will assign it, then: + if (stateOfTag == 0) + *state = 0; + else { + // Take the LOWEST state of all the selected notes: + // Say the two selected notes have the state "Done" and "To Do". + // The first note set *state to "Done". + // When reaching the second note, we should recognize "To Do" is first in the tag states, then take it + // Because pressing the tag shortcut key should first change state before removing the tag! + if (*state == 0) + *state = stateOfTag; + else { + bool stateIsFirst = true; + for (State *nextState = stateOfTag->nextState(); nextState; nextState = nextState->nextState(/*cycle=*/false)) + if (nextState == *state) + stateIsFirst = false; + if (!stateIsFirst) + *state = stateOfTag; + } + } + return true; // We encountered a selected note + } + + bool encounteredSelectedNote = false; + FOR_EACH_CHILD (child) { + bool encountered = child->stateForTagFromSelectedNotes(tag, state); + if (encountered && *state == 0) + return true; + if (encountered) + encounteredSelectedNote = true; + } + return encounteredSelectedNote; +} + + +void Note::inheritTagsOf(Note *note) +{ + if (!note || !content()) + return; + + for (State::List::iterator it = note->states().begin(); it != note->states().end(); ++it) + if ((*it)->parentTag() && (*it)->parentTag()->inheritedBySiblings()) + addTag((*it)->parentTag()); +} + +void Note::unbufferizeAll() +{ + unbufferize(); + + if (isGroup()) { + Note *child = firstChild(); + while (child) { + child->unbufferizeAll(); + child = child->next(); + } + } +} + +void Note::bufferizeSelectionPixmap() +{ + if (m_bufferedSelectionPixmap.isNull()) { + QColor insideColor = KGlobalSettings::highlightColor(); + KPixmap kpixmap(m_bufferedPixmap); + m_bufferedSelectionPixmap = KPixmapEffect::fade(kpixmap, 0.25, insideColor); + } +} + +QRect Note::visibleRect() +{ + QValueList areas; + areas.append(rect()); + + // When we are folding a parent group, if this note is bigger than the first real note of the group, cut the top of this: + Note *parent = parentNote(); + while (parent) { + if (parent->expandingOrCollapsing()) + substractRectOnAreas(QRect(x(), parent->y() - height(), width(), height()), areas, true); + parent = parent->parentNote(); + } + + if (areas.count() > 0) + return areas[0]; + else + return QRect(); +} + +void Note::recomputeBlankRects(QValueList &blankAreas) +{ + if (!matching()) + return; + + // visibleRect() instead of rect() because if we are folding/expanding a smaller parent group, then some part is hidden! + // But anyway, a resizer is always a primary note and is never hidden by a parent group, so no visibleResizerRect() method! + substractRectOnAreas(visibleRect(), blankAreas, true); + if (hasResizer()) + substractRectOnAreas(resizerRect(), blankAreas, true); + + if (isGroup()) { + Note *child = firstChild(); + bool first = true; + while (child) { + if ((showSubNotes() || first) && child->matching()) + child->recomputeBlankRects(blankAreas); + child = child->next(); + first = false; + } + } +} + +void Note::linkLookChanged() +{ + if (isGroup()) { + Note *child = firstChild(); + while (child) { + child->linkLookChanged(); + child = child->next(); + } + } else + content()->linkLookChanged(); +} + +Note* Note::noteForFullPath(const QString &path) +{ + if (content() && fullPath() == path) + return this; + + Note *child = firstChild(); + Note *found; + while (child) { + found = child->noteForFullPath(path); + if (found) + return found; + child = child->next(); + } + return 0; +} + +void Note::listUsedTags(QValueList &list) +{ + for (State::List::Iterator it = m_states.begin(); it != m_states.end(); ++it) { + Tag *tag = (*it)->parentTag(); + if (!list.contains(tag)) + list.append(tag); + } + + FOR_EACH_CHILD (child) + child->listUsedTags(list); +} + + +void Note::usedStates(QValueList &states) +{ + if (content()) + for (State::List::Iterator it = m_states.begin(); it != m_states.end(); ++it) + if (!states.contains(*it)) + states.append(*it); + + FOR_EACH_CHILD (child) + child->usedStates(states); +} + +Note* Note::nextInStack() +{ + // First, search in the childs: + if (firstChild()) + if (firstChild()->content()) + return firstChild(); + else + return firstChild()->nextInStack(); + + // Then, in the next: + if (next()) + if (next()->content()) + return next(); + else + return next()->nextInStack(); + + // And finally, in the parent: + Note *note = parentNote(); + while (note) + if (note->next()) + if (note->next()->content()) + return note->next(); + else + return note->next()->nextInStack(); + else + note = note->parentNote(); + + // Not found: + return 0; +} + +Note* Note::prevInStack() +{ + // First, search in the previous: + if (prev() && prev()->content()) + return prev(); + + // Else, it's a group, get the last item in that group: + if (prev()) { + Note *note = prev()->lastRealChild(); + if (note) + return note; + } + + if (parentNote()) + return parentNote()->prevInStack(); + else + return 0; +} + +Note* Note::nextShownInStack() +{ + Note *next = nextInStack(); + while (next && !next->isShown()) + next = next->nextInStack(); + return next; +} + +Note* Note::prevShownInStack() +{ + Note *prev = prevInStack(); + while (prev && !prev->isShown()) + prev = prev->prevInStack(); + return prev; +} + +bool Note::isShown() +{ + // First, the easy one: groups are always shown: + if (isGroup()) + return true; + + // And another easy part: non-matching notes are hidden: + if (!matching()) + return false; + + if (basket()->isFiltering()) // And isMatching() because of the line above! + return true; + + // So, here we go to the complexe case: if the note is inside a collapsed group: + Note *group = parentNote(); + Note *child = this; + while (group) { + if (group->isFolded() && group->firstChild() != child) + return false; + child = group; + group = group->parentNote(); + } + return true; +} + +void Note::debug() +{ + std::cout << "Note@" << (Q_UINT64)this; + if (!this) { + std::cout << std::endl; + return; + } + + if (isColumn()) + std::cout << ": Column"; + else if (isGroup()) + std::cout << ": Group"; + else + std::cout << ": Content[" << content()->lowerTypeName() << "]: " << toText(""); + std::cout << std::endl; +} + +Note* Note::firstSelected() +{ + if (isSelected()) + return this; + + Note *first = 0; + FOR_EACH_CHILD (child) { + first = child->firstSelected(); + if (first) + break; + } + return first; +} + +Note* Note::lastSelected() +{ + if (isSelected()) + return this; + + Note *last = 0, *tmp = 0; + FOR_EACH_CHILD (child) { + tmp = child->lastSelected(); + if (tmp) + last = tmp; + } + return last; +} + +Note* Note::selectedGroup() +{ + if (isGroup() && allSelected() && count() == basket()->countSelecteds()) + return this; + + FOR_EACH_CHILD (child) { + Note *selectedGroup = child->selectedGroup(); + if (selectedGroup) + return selectedGroup; + } + + return 0; +} + +void Note::groupIn(Note *group) +{ + if (this == group) + return; + + if (allSelected() && !isColumn()) { + basket()->unplugNote(this); + basket()->insertNote(this, group, Note::BottomColumn, QPoint(), /*animateNewPosition=*/true); + } else { + Note *next; + Note *child = firstChild(); + while (child) { + next = child->next(); + child->groupIn(group); + child = next; + } + } +} + +bool Note::tryExpandParent() +{ + Note *parent = parentNote(); + Note *child = this; + while (parent) { + if (parent->firstChild() != child) + return false; + if (parent->isColumn()) + return false; + if (parent->isFolded()) { + parent->toggleFolded(true); + basket()->relayoutNotes(true); + return true; + } + child = parent; + parent = parent->parentNote(); + } + return false; +} + +bool Note::tryFoldParent() // TODO: withCtrl ? withShift ? +{ + Note *parent = parentNote(); + Note *child = this; + while (parent) { + if (parent->firstChild() != child) + return false; + if (parent->isColumn()) + return false; + if (!parent->isFolded()) { + parent->toggleFolded(true); + basket()->relayoutNotes(true); + return true; + } + child = parent; + parent = parent->parentNote(); + } + return false; +} + + +int Note::distanceOnLeftRight(Note *note, int side) +{ + if (side == Basket::RIGHT_SIDE) { + // If 'note' is on left of 'this': cannot switch from this to note by pressing Right key: + if (finalX() > note->finalX() || finalRightLimit() > note->finalRightLimit()) + return -1; + } else /*LEFT_SIDE:*/ { + // If 'note' is on left of 'this': cannot switch from this to note by pressing Right key: + if (finalX() < note->finalX() || finalRightLimit() < note->finalRightLimit()) + return -1; + } + if (finalX() == note->finalX() && finalRightLimit() == note->finalRightLimit()) + return -1; + + float thisCenterX = finalX() + (side == Basket::LEFT_SIDE ? width() : /*RIGHT_SIDE:*/ 0); + float thisCenterY = finalY() + finalHeight() / 2; + float noteCenterX = note->finalX() + note->width() / 2; + float noteCenterY = note->finalY() + note->finalHeight() / 2; + + if (thisCenterY > note->finalBottom()) + noteCenterY = note->finalBottom(); + else if (thisCenterY < note->finalY()) + noteCenterY = note->finalY(); + else + noteCenterY = thisCenterY; + + float angle = 0; + if (noteCenterX - thisCenterX != 0) + angle = 1000 * ((noteCenterY - thisCenterY) / (noteCenterX - thisCenterX)); + if (angle < 0) + angle = -angle; + + return int(sqrt(pow(noteCenterX - thisCenterX, 2) + pow(noteCenterY - thisCenterY, 2)) + angle); +} + +int Note::distanceOnTopBottom(Note *note, int side) +{ + if (side == Basket::BOTTOM_SIDE) { + // If 'note' is on left of 'this': cannot switch from this to note by pressing Right key: + if (finalY() > note->finalY() || finalBottom() > note->finalBottom()) + return -1; + } else /*TOP_SIDE:*/ { + // If 'note' is on left of 'this': cannot switch from this to note by pressing Right key: + if (finalY() < note->finalY() || finalBottom() < note->finalBottom()) + return -1; + } + if (finalY() == note->finalY() && finalBottom() == note->finalBottom()) + return -1; + + float thisCenterX = finalX() + width() / 2; + float thisCenterY = finalY() + (side == Basket::TOP_SIDE ? finalHeight() : /*BOTTOM_SIDE:*/ 0); + float noteCenterX = note->finalX() + note->width() / 2; + float noteCenterY = note->finalY() + note->finalHeight() / 2; + + if (thisCenterX > note->finalRightLimit()) + noteCenterX = note->finalRightLimit(); + else if (thisCenterX < note->finalX()) + noteCenterX = note->finalX(); + else + noteCenterX = thisCenterX; + + float angle = 0; + if (noteCenterX - thisCenterX != 0) + angle = 1000 * ((noteCenterY - thisCenterY) / (noteCenterX - thisCenterX)); + if (angle < 0) + angle = -angle; + + return int(sqrt(pow(noteCenterX - thisCenterX, 2) + pow(noteCenterY - thisCenterY, 2)) + angle); +} + +Note* Note::parentPrimaryNote() +{ + Note *primary = this; + while (primary->parentNote()) + primary = primary->parentNote(); + return primary; +} + +void Note::deleteChilds() +{ + Note *child = firstChild(); + + while (child) + { + Note *tmp = child->next(); + delete child; + child = tmp; + } +} + +bool Note::saveAgain() +{ + if(content()) + { + if(!content()->saveToFile()) + return false; + } + FOR_EACH_CHILD (child) + { + if(!child->saveAgain()) + return false; + } + return true; +} + +bool Note::convertTexts() +{ + bool convertedNotes = false; + + if (content() && content()->lowerTypeName() == "text") { + QString text = ((TextContent*)content())->text(); + QString html = "" + Tools::textToHTMLWithoutP(text) + ""; + basket()->saveToFile(fullPath(), html, /*isLocalEncoding=*/true); + setContent( new HtmlContent(this, content()->fileName()) ); + convertedNotes = true; + } + + FOR_EACH_CHILD (child) + if (child->convertTexts()) + convertedNotes = true; + + return convertedNotes; +} + +#if 0 + +/** Note */ + +QString Note::toHtml(const QString &imageName) +{ + switch (m_type) { + case Text: + /*return "" + + Tools::textToHTMLWithoutP(text()) + "";*/ + return Tools::textToHTMLWithoutP(text()); + case Html: + return Tools::htmlToParagraph(html()); + case Image: + case Animation: + { + if ( (m_type == Image && pixmap() == 0L) || + (m_type == Animation && movie() == 0L) ) { + QMimeSourceFactory::defaultFactory()->setData(imageName, 0L); + return i18n("(Image)"); // Image or animation not yet loaded!! + } + + QImage image; + if (m_type == Image) + image = pixmap()->convertToImage(); + else + image = movie()->framePixmap().convertToImage(); + image = image.smoothScale(200, 150, QImage::ScaleMin); + QPixmap pixmap = QPixmap(image); + QMimeSourceFactory::defaultFactory()->setPixmap(imageName, pixmap); + return ""; /// + +/* // FIXME: movie isn't loaded yet: CRASH! + return i18n("(Image)"); + // Not executed, because don't work: + QImage image; + if (m_type == Image) + image = pixmap()->convertToImage(); + else + image = movie()->framePixmap().convertToImage(); + image = image.smoothScale(200, 150, QImage::ScaleMin); + QPixmap pixmap = QPixmap(image); + QMimeSourceFactory::defaultFactory()->setPixmap(imageName, pixmap); + return ""; /// + */ //TODO?: QMimeSourceFactory::defaultFactory()->setData(imageName, 0L); + } + case Sound: + case File: + { + /// FIXME: Since fullPath() doesn't exist yet, the icon rely on the extension. + /// Bad if there isn't one or if it's a wrong one. + /*QPixmap icon = DesktopIcon( + NoteFactory::iconForURL(fullPath()), + (m_type == Sound ? LinkLook::soundLook : LinkLook::fileLook)->iconSize()); + QMimeSourceFactory::defaultFactory()->setPixmap(imageName, icon); + return " " + fileName(); */ /// + return m_linkLabel->toHtml(imageName); + } + case Link: + { + QString link = m_linkLabel->toHtml(imageName); + if (!autoTitle() && title() != NoteFactory::titleForURL(url().prettyURL())) + link += "
      " + url().prettyURL() + ""; /// + return link; + } + case Launcher: + { + return m_linkLabel->toHtml(imageName); + //KService service(fullPath()); // service.icon() + //return service.name() + "
      " + service.exec() + ""; /// + } + case Color: + return "" + color().name() + ""; + case Unknown: + return text(); + } + return QString(); +} + +#endif // #if 0 diff --git a/src/note.h b/src/note.h new file mode 100644 index 0000000..cb249ec --- /dev/null +++ b/src/note.h @@ -0,0 +1,388 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NOTE_H +#define NOTE_H + +#include +#include +#include +#include + +#include "notecontent.h" +#include "tag.h" + +class Basket; +class FilterData; +class HtmlExportData; + +class NoteSelection; + +class QPainter; +class QSimpleRichText; + +/** Handle basket notes and groups!\n + * After creation, the note is a group. You should create a NoteContent with this Note + * as constructor parameter to transform it to a note with content. eg: + * @code + * Note *note = new Note(basket); // note is a group! + * new TextContent(note, fileName); // note is now a note with a text content! + * new ColorContent(note, Qt::red); // Should never be done!!!!! the old Content should be deleted... + * @endcode + * @author S�astien Laot + */ +class Note +{ +/// CONSTRUCTOR AND DESTRUCTOR: + public: + Note(Basket *parent); + ~Note(); + +/// DOUBLY LINKED LIST: + private: + Note *m_prev; + Note *m_next; + public: + inline void setNext(Note *next) { m_next = next; } + inline void setPrev(Note *prev) { m_prev = prev; } + inline Note* next() { return m_next; } + inline Note* prev() { return m_prev; } + +/// GEOMETRY MANAGEMENT: + private: + int m_x; + int m_y; + int m_width; + int m_height; +// int m_minContentWidth; + public: + void setWidth(int width); + void setWidthForceRelayout(int width); + void setInitialHeight(int height) { m_height = height; } /// << Do NEVER use it unless you know what you do! + void setX(int x); + void setY(int y); + void setXRecursivly(int x); + void setYRecursivly(int y); + inline int x() { return m_x; } + inline int y() { return m_y; } + inline int width() { return (isGroup() ? (isColumn() ? 0 : GROUP_WIDTH) : m_width); } + inline int height() { return m_height; } + inline int bottom() { return m_y + m_height - 1; } + QRect rect(); + QRect resizerRect(); + QRect visibleRect(); + void relayoutAt(int x, int y, bool animate); + int contentX(); + int minWidth(); + int minRight(); + void unsetWidth(); + void requestRelayout(); + void setHeight(int height) { m_height = height; } /// << DO NEVER USE IT!!! Only available when moving notes, groups should be recreated with the exact same state as before! + +/// FREE AND COLUMN LAYOUTS MANAGEMENT: + private: + int m_groupWidth; + public: + int groupWidth(); + void setGroupWidth(int width); + int rightLimit(); + int finalRightLimit(); + bool isFree(); + bool isColumn(); + bool hasResizer(); + int resizerHeight(); + +/// GROUPS MANAGEMENT: + private: + bool m_isFolded; + Note *m_firstChild; + Note *m_parentNote; + public: + inline bool isGroup() { return m_content == 0L; } + inline bool isFolded() { return m_isFolded; } + inline Note* firstChild() { return m_firstChild; } + inline Note* parentNote() { return m_parentNote; } + /*inline*/ bool showSubNotes();// { return !m_isFolded || !m_collapseFinished; } + inline void setParentNote(Note *note) { m_parentNote = note; } + inline void setFirstChild(Note *note) { m_firstChild = note; } + bool isShown(); + void toggleFolded(bool animate); + Note* noteAt(int x, int y); + Note* firstRealChild(); + Note* lastRealChild(); + Note* lastChild(); + Note* lastSibling(); + int yExpander(); + bool isAfter(Note *note); + bool contains(Note *note); + +/// NOTES VARIOUS PROPERTIES: // CONTENT MANAGEMENT? + private: + Basket *m_basket; + NoteContent *m_content; + QDateTime m_addedDate; + QDateTime m_lastModificationDate; + public: + inline Basket* basket() { return m_basket; } + inline NoteContent* content() { return m_content; } + inline void setAddedDate(const QDateTime &dateTime) { m_addedDate = dateTime; } + inline void setLastModificationDate(const QDateTime &dateTime) { m_lastModificationDate = dateTime; } + inline void setParentBasket(Basket *basket) { m_basket = basket; } + QDateTime addedDate() { return m_addedDate; } + QDateTime lastModificationDate() { return m_lastModificationDate; } + QString addedStringDate(); + QString lastModificationStringDate(); + QString toText(const QString &cuttedFullPath); + bool saveAgain(); + void deleteChilds(); + + protected: + void setContent(NoteContent *content); + friend class NoteContent; + friend class AnimationContent; + +/// DRAWING: + private: + QPixmap m_bufferedPixmap; + KPixmap m_bufferedSelectionPixmap; + public: + void draw(QPainter *painter, const QRect &clipRect); + void drawBufferOnScreen(QPainter *painter, const QPixmap &contentPixmap); + static void getGradientColors(const QColor &originalBackground, QColor *colorTop, QColor *colorBottom); + static void drawExpander(QPainter *painter, int x, int y, const QColor &background, bool expand, Basket *basket); + void drawHandle( QPainter *painter, int x, int y, int width, int height, const QColor &background, const QColor &foreground); + void drawResizer( QPainter *painter, int x, int y, int width, int height, const QColor &background, const QColor &foreground, bool rounded); + void drawRoundings(QPainter *painter, int x, int y, int type, int width = 0, int height = 0); + void unbufferizeAll(); + void bufferizeSelectionPixmap(); + inline void unbufferize() { m_bufferedPixmap.resize(0, 0); m_bufferedSelectionPixmap.resize(0, 0); } + inline bool isBufferized() { return !m_bufferedPixmap.isNull(); } + void recomputeBlankRects(QValueList &blankAreas); + static void drawInactiveResizer(QPainter *painter, int x, int y, int height, const QColor &background, bool column); + +/// VISIBLE AREAS COMPUTATION: + private: + QValueList m_areas; + bool m_computedAreas; + bool m_onTop; + void recomputeAreas(); + bool recomputeAreas(Note *note, bool noteIsAfterThis); + public: + void setOnTop(bool onTop); + inline bool isOnTop() { return m_onTop; } + bool isEditing(); + +/// MANAGE ANIMATION: + private: + int m_deltaX; + int m_deltaY; + int m_deltaHeight; + bool m_collapseFinished; + bool m_expandingFinished; + public: + inline int deltaX() { return m_deltaX; } + inline int deltaY() { return m_deltaY; } + inline int deltaHeight() { return m_deltaHeight; } + inline int finalX() { return m_x + m_deltaX; } + inline int finalY() { return m_y + m_deltaY; } + inline int finalHeight() { return m_height + m_deltaHeight; } + inline int finalBottom() { return finalY() + finalHeight() - 1; } + inline void cancelAnimation() { m_deltaX = 0; m_deltaY = 0; m_deltaHeight = 0; } + inline bool expandingOrCollapsing() { return !m_collapseFinished || !m_expandingFinished; } + void addAnimation(int deltaX, int deltaY, int deltaHeight = 0); + void setFinalPosition(int x, int y); /// << Convenient method for addAnimation() + bool advance(); + void initAnimationLoad(); + void setRecursivelyUnder(Note *under, bool animate); + +/// USER INTERACTION: + public: + enum Zone { None = 0, + Handle, TagsArrow, Custom0, /*CustomContent1, CustomContent2, */Content, Link, + TopInsert, TopGroup, BottomInsert, BottomGroup, BottomColumn, + Resizer, + Group, GroupExpander, + Emblem0 }; // Emblem0 should be at end, because we add 1 to get Emblem1, 2 to get Emblem2... + inline void setHovered(bool hovered) { m_hovered = hovered; unbufferize(); } + void setHoveredZone(Zone zone); + inline bool hovered() { return m_hovered; } + inline Zone hoveredZone() { return m_hoveredZone; } + Zone zoneAt(const QPoint &pos, bool toAdd = false); + QRect zoneRect(Zone zone, const QPoint &pos); + void setCursor(Zone zone); + QString linkAt(const QPoint &pos); + private: + bool m_hovered; + Zone m_hoveredZone; + +/// SELECTION: + public: + NoteSelection* selectedNotes(); + void setSelected(bool selected); + void setSelectedRecursivly(bool selected); + void invertSelectionRecursivly(); + void selectIn(const QRect &rect, bool invertSelection, bool unselectOthers = true); + void setFocused(bool focused); + inline bool isFocused() { return m_focused; } + inline bool isSelected() { return m_selected; } + bool allSelected(); + void resetWasInLastSelectionRect(); + void unselectAllBut(Note *toSelect); + void invertSelectionOf(Note *toSelect); + Note* theSelectedNote(); + private: + bool m_focused; + bool m_selected; + bool m_wasInLastSelectionRect; + +/// TAGS: + private: + State::List m_states; + State m_computedState; + int m_emblemsCount; + bool m_haveInvisibleTags; + public: + /*const */State::List& states() const; + inline int emblemsCount() { return m_emblemsCount; } + void addState(State *state, bool orReplace = true); + void addTag(Tag *tag); + void removeState(State *state); + void removeTag(Tag *tag); + void removeAllTags(); + void addTagToSelectedNotes(Tag *tag); + void removeTagFromSelectedNotes(Tag *tag); + void removeAllTagsFromSelectedNotes(); + void addStateToSelectedNotes(State *state, bool orReplace = true); + void changeStateOfSelectedNotes(State *state); + bool selectedNotesHaveTags(); + void inheritTagsOf(Note *note); + bool hasTag(Tag *tag); + bool hasState(State *state); + State* stateOfTag(Tag *tag); + State* stateForEmblemNumber(int number); + bool stateForTagFromSelectedNotes(Tag *tag, State **state); + void recomputeStyle(); + void recomputeAllStyles(); + bool removedStates(const QValueList &deletedStates); + QFont font(); // Computed! + QColor backgroundColor(); // Computed! + QColor textColor(); // Computed! + +/// FILTERING: + private: + bool m_matching; + public: + bool computeMatching(const FilterData &data); + int newFilter(const FilterData &data); + bool matching() { return m_matching; } + +/// ADDED: + public: + void deleteSelectedNotes(bool deleteFilesToo = true); + int count(); + int countDirectChilds(); + + QString fullPath(); + Note* noteForFullPath(const QString &path); + + void update(); + void linkLookChanged(); + + void usedStates(QValueList &states); + + void listUsedTags(QValueList &list); + + + Note* nextInStack(); + Note* prevInStack(); + Note* nextShownInStack(); + Note* prevShownInStack(); + + Note* parentPrimaryNote(); // TODO: There are places in the code where this methods is hand-copied / hand-inlined instead of called. + + Note* firstSelected(); + Note* lastSelected(); + Note* selectedGroup(); + void groupIn(Note *group); + + bool tryExpandParent(); + bool tryFoldParent(); + + int distanceOnLeftRight(Note *note, int side); + int distanceOnTopBottom(Note *note, int side); + + bool convertTexts(); + + void debug(); + +/// SPEED OPTIMIZATION + public: + void finishLazyLoad(); + + public: + // Values are provided here as info: + // Please see Settings::setBigNotes() to know whats values are assigned. + static int NOTE_MARGIN /*= 2*/; + static int INSERTION_HEIGHT /*= 5*/; + static int EXPANDER_WIDTH /*= 9*/; + static int EXPANDER_HEIGHT /*= 9*/; + static int GROUP_WIDTH /*= 2*NOTE_MARGIN + EXPANDER_WIDTH*/; + static int HANDLE_WIDTH /*= GROUP_WIDTH*/; + static int RESIZER_WIDTH /*= GROUP_WIDTH*/; + static int TAG_ARROW_WIDTH /*= 5*/; + static int EMBLEM_SIZE /*= 16*/; + static int MIN_HEIGHT /*= 2*NOTE_MARGIN + EMBLEM_SIZE*/; +}; + +/*class InsertionData +{ + public: + enum Type { Free = 0, NoteRelative, ColumnBottom }; + Type type; + + InsertionData(int _x, int _y) + : type(Free), + x(_x), y(_y), + note(0), group(false), onTop(false), + column(0) + {} + int x; + int y; + + InsertionData(Note *_note, bool _group, bool _onTop) + : type(NoteRelative), + x(0), y(0), + note(_note), group(_group), onTop(_onTop), + column(0) + {} + Note *note; + bool group; + bool onTop; + + InsertionData(Note *_column) + : type(NoteRelative), + x(0), y(0), + note(0), group(false), onTop(false), + column(_column) + {} + Note *column; +};*/ + +#endif // NOTE_H diff --git a/src/notecontent.cpp b/src/notecontent.cpp new file mode 100644 index 0000000..39d4688 --- /dev/null +++ b/src/notecontent.cpp @@ -0,0 +1,1935 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include + +#include +//#include +#include +#include +#include + +#include + +#include "notecontent.h" +#include "note.h" +#include "noteedit.h" +#include "tag.h" +#include "basket.h" +#include "filter.h" +#include "xmlwork.h" +#include "tools.h" +#include "notefactory.h" +#include "linklabel.h" +#include "global.h" +#include "settings.h" +#include "focusedwidgets.h" +#include "debugwindow.h" +#include "kcolorcombo2.h" +#include "htmlexporter.h" + +#include "config.h" +#ifndef WITHOUT_ARTS + #include + #include + #include + #include +#endif + +/** class NoteContent: + */ + +const int NoteContent::FEEDBACK_DARKING = 105; + +NoteContent::NoteContent(Note *parent, const QString &fileName) + : m_note(parent) +{ + parent->setContent(this); + setFileName(fileName); +} + +void NoteContent::saveToNode(QDomDocument &doc, QDomElement &content) +{ + if (useFile()) { + QDomText textNode = doc.createTextNode(fileName()); + content.appendChild(textNode); + } +} + +QRect NoteContent::zoneRect(int zone, const QPoint &/*pos*/) +{ + if (zone == Note::Content) + return QRect(0, 0, note()->width(), note()->height()); // Too wide and height, but it will be clipped by Note::zoneRect() + else + return QRect(); +} + +KURL NoteContent::urlToOpen(bool /*with*/) +{ + return (useFile() ? KURL(fullPath()) : KURL()); +} + +void NoteContent::setFileName(const QString &fileName) +{ + m_fileName = fileName; +} + +bool NoteContent::trySetFileName(const QString &fileName) +{ + if (useFile() && fileName != m_fileName) { + QString newFileName = Tools::fileNameForNewFile(fileName, basket()->fullPath()); + QDir dir; + dir.rename(fullPath(), basket()->fullPathForFileName(newFileName)); + return true; + } + + return false; // !useFile() or unsuccesful rename +} + +QString NoteContent::fullPath() +{ + if (note() && useFile()) + return note()->fullPath(); + else + return ""; +} + +void NoteContent::contentChanged(int newMinWidth) +{ + m_minWidth = newMinWidth; + if (note()) { +// note()->unbufferize(); + note()->requestRelayout(); // TODO: It should re-set the width! m_width = 0 ? contentChanged: setWidth, geteight, if size havent changed, only repaint and not relayout + } +} + +Basket* NoteContent::basket() +{ + if (note()) + return note()->basket(); + else + return 0; +} + +void NoteContent::setEdited() +{ + note()->setLastModificationDate(QDateTime::currentDateTime()); + basket()->save(); +} + +/** All the Content Classes: + */ + +NoteType::Id TextContent::type() { return NoteType::Text; } +NoteType::Id HtmlContent::type() { return NoteType::Html; } +NoteType::Id ImageContent::type() { return NoteType::Image; } +NoteType::Id AnimationContent::type() { return NoteType::Animation; } +NoteType::Id SoundContent::type() { return NoteType::Sound; } +NoteType::Id FileContent::type() { return NoteType::File; } +NoteType::Id LinkContent::type() { return NoteType::Link; } +NoteType::Id LauncherContent::type() { return NoteType::Launcher; } +NoteType::Id ColorContent::type() { return NoteType::Color; } +NoteType::Id UnknownContent::type() { return NoteType::Unknown; } + +QString TextContent::typeName() { return i18n("Plain Text"); } +QString HtmlContent::typeName() { return i18n("Text"); } +QString ImageContent::typeName() { return i18n("Image"); } +QString AnimationContent::typeName() { return i18n("Animation"); } +QString SoundContent::typeName() { return i18n("Sound"); } +QString FileContent::typeName() { return i18n("File"); } +QString LinkContent::typeName() { return i18n("Link"); } +QString LauncherContent::typeName() { return i18n("Launcher"); } +QString ColorContent::typeName() { return i18n("Color"); } +QString UnknownContent::typeName() { return i18n("Unknown"); } + +QString TextContent::lowerTypeName() { return "text"; } +QString HtmlContent::lowerTypeName() { return "html"; } +QString ImageContent::lowerTypeName() { return "image"; } +QString AnimationContent::lowerTypeName() { return "animation"; } +QString SoundContent::lowerTypeName() { return "sound"; } +QString FileContent::lowerTypeName() { return "file"; } +QString LinkContent::lowerTypeName() { return "link"; } +QString LauncherContent::lowerTypeName() { return "launcher"; } +QString ColorContent::lowerTypeName() { return "color"; } +QString UnknownContent::lowerTypeName() { return "unknown"; } + +QString NoteContent::toText(const QString &cuttedFullPath) +{ + return (cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); +} + +QString TextContent::toText(const QString &/*cuttedFullPath*/) { return text(); } +QString HtmlContent::toText(const QString &/*cuttedFullPath*/) { return Tools::htmlToText(html()); } +QString LinkContent::toText(const QString &/*cuttedFullPath*/) +{ + if (autoTitle()) + return url().prettyURL(); + else if (title().isEmpty() && url().isEmpty()) + return ""; + else if (url().isEmpty()) + return title(); + else if (title().isEmpty()) + return url().prettyURL(); + else + return QString("%1 <%2>").arg(title(), url().prettyURL()); +} +QString ColorContent::toText(const QString &/*cuttedFullPath*/) { return color().name(); } +QString UnknownContent::toText(const QString &/*cuttedFullPath*/) { return ""; } + +// TODO: If imageName.isEmpty() return fullPath() because it's for external use, else return fileName() because it's to display in a tooltip +QString TextContent::toHtml(const QString &/*imageName*/, const QString &/*cuttedFullPath*/) +{ return Tools::textToHTMLWithoutP(text()); } + +QString HtmlContent::toHtml(const QString &/*imageName*/, const QString &/*cuttedFullPath*/) +{ return Tools::htmlToParagraph(html()); } + +QString ImageContent::toHtml(const QString &/*imageName*/, const QString &cuttedFullPath) +{ return QString("").arg(cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); } + +QString AnimationContent::toHtml(const QString &/*imageName*/, const QString &cuttedFullPath) +{ return QString("").arg(cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); } + +QString SoundContent::toHtml(const QString &/*imageName*/, const QString &cuttedFullPath) +{ return QString("%2").arg((cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath), fileName()); } // With the icon? + +QString FileContent::toHtml(const QString &/*imageName*/, const QString &cuttedFullPath) +{ return QString("%2").arg((cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath), fileName()); } // With the icon? + +QString LinkContent::toHtml(const QString &/*imageName*/, const QString &/*cuttedFullPath*/) +{ return QString("%2").arg(url().prettyURL(), title()); } // With the icon? + +QString LauncherContent::toHtml(const QString &/*imageName*/, const QString &cuttedFullPath) +{ return QString("%2").arg((cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath), name()); } // With the icon? + +QString ColorContent::toHtml(const QString &/*imageName*/, const QString &/*cuttedFullPath*/) +{ return QString("%2").arg(color().name(), color().name()); } + +QString UnknownContent::toHtml(const QString &/*imageName*/, const QString &/*cuttedFullPath*/) +{ return ""; } + +QPixmap ImageContent::toPixmap() { return pixmap(); } +QPixmap AnimationContent::toPixmap() { return movie().framePixmap(); } + +void NoteContent::toLink(KURL *url, QString *title, const QString &cuttedFullPath) +{ + if (useFile()) { + *url = KURL(cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); + *title = (cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); + } else { + *url = KURL(); + *title = QString(); + } +} +void LinkContent::toLink(KURL *url, QString *title, const QString &/*cuttedFullPath*/) +{ + *url = this->url(); + *title = this->title(); +} + +void LauncherContent::toLink(KURL *url, QString *title, const QString &cuttedFullPath) +{ + *url = KURL(cuttedFullPath.isEmpty() ? fullPath() : cuttedFullPath); + *title = name(); +} +void UnknownContent::toLink(KURL *url, QString *title, const QString &/*cuttedFullPath*/) +{ + *url = KURL(); + *title = QString(); +} + +bool TextContent::useFile() { return true; } +bool HtmlContent::useFile() { return true; } +bool ImageContent::useFile() { return true; } +bool AnimationContent::useFile() { return true; } +bool SoundContent::useFile() { return true; } +bool FileContent::useFile() { return true; } +bool LinkContent::useFile() { return false; } +bool LauncherContent::useFile() { return true; } +bool ColorContent::useFile() { return false; } +bool UnknownContent::useFile() { return true; } + +bool TextContent::canBeSavedAs() { return true; } +bool HtmlContent::canBeSavedAs() { return true; } +bool ImageContent::canBeSavedAs() { return true; } +bool AnimationContent::canBeSavedAs() { return true; } +bool SoundContent::canBeSavedAs() { return true; } +bool FileContent::canBeSavedAs() { return true; } +bool LinkContent::canBeSavedAs() { return true; } +bool LauncherContent::canBeSavedAs() { return true; } +bool ColorContent::canBeSavedAs() { return false; } +bool UnknownContent::canBeSavedAs() { return false; } + +QString TextContent::saveAsFilters() { return "text/plain"; } +QString HtmlContent::saveAsFilters() { return "text/html"; } +QString ImageContent::saveAsFilters() { return "image/png"; } // TODO: Offer more types +QString AnimationContent::saveAsFilters() { return "image/gif"; } // TODO: MNG... +QString SoundContent::saveAsFilters() { return "audio/x-mp3"; } // TODO: OGG... +QString FileContent::saveAsFilters() { return "*"; } // TODO: Get MIME type of the url target +QString LinkContent::saveAsFilters() { return "*"; } // TODO: idem File + If isDir(): return +QString LauncherContent::saveAsFilters() { return "application/x-desktop"; } +QString ColorContent::saveAsFilters() { return ""; } +QString UnknownContent::saveAsFilters() { return ""; } + +bool TextContent::match(const FilterData &data) { return (text().find(data.string, /*index=*/0, /*cs=*/false) != -1); } +bool HtmlContent::match(const FilterData &data) { return (m_textEquivalent/*toText("")*/.find(data.string, /*index=*/0, /*cs=*/false) != -1); } //OPTIM_FILTER +bool ImageContent::match(const FilterData &/*data*/) { return false; } +bool AnimationContent::match(const FilterData &/*data*/) { return false; } +bool SoundContent::match(const FilterData &data) { return (fileName().find(data.string, /*index=*/0, /*cs=*/false) != -1); } +bool FileContent::match(const FilterData &data) { return (fileName().find(data.string, /*index=*/0, /*cs=*/false) != -1); } +bool LinkContent::match(const FilterData &data) { return (title().find(data.string, 0, false) != -1 || url().prettyURL().find(data.string, 0, false) != -1); } +bool LauncherContent::match(const FilterData &data) { return (exec().find(data.string, 0, false) != -1 || name().find(data.string, 0, false) != -1); } +bool ColorContent::match(const FilterData &data) { return (color().name().find(data.string, /*index=*/0, /*cs=*/false) != -1); } +bool UnknownContent::match(const FilterData &data) { return (mimeTypes().find(data.string, /*index=*/0, /*cs=*/false) != -1); } + +QString TextContent::editToolTipText() { return i18n("Edit this plain text"); } +QString HtmlContent::editToolTipText() { return i18n("Edit this text"); } +QString ImageContent::editToolTipText() { return i18n("Edit this image"); } +QString AnimationContent::editToolTipText() { return i18n("Edit this animation"); } +QString SoundContent::editToolTipText() { return i18n("Edit the file name of this sound"); } +QString FileContent::editToolTipText() { return i18n("Edit the name of this file"); } +QString LinkContent::editToolTipText() { return i18n("Edit this link"); } +QString LauncherContent::editToolTipText() { return i18n("Edit this launcher"); } +QString ColorContent::editToolTipText() { return i18n("Edit this color"); } +QString UnknownContent::editToolTipText() { return i18n("Edit this unknown object"); } + +QString TextContent::cssClass() { return ""; } +QString HtmlContent::cssClass() { return ""; } +QString ImageContent::cssClass() { return ""; } +QString AnimationContent::cssClass() { return ""; } +QString SoundContent::cssClass() { return "sound"; } +QString FileContent::cssClass() { return "file"; } +QString LinkContent::cssClass() { return (LinkLook::lookForURL(m_url) == LinkLook::localLinkLook ? "local" : "network"); } +QString LauncherContent::cssClass() { return "launcher"; } +QString ColorContent::cssClass() { return "" ; } +QString UnknownContent::cssClass() { return ""; } + +void TextContent::fontChanged() { setText(text()); } +void HtmlContent::fontChanged() { setHtml(html()); } +void ImageContent::fontChanged() { setPixmap(pixmap()); } +void AnimationContent::fontChanged() { setMovie(movie()); } +void FileContent::fontChanged() { setFileName(fileName()); } +void LinkContent::fontChanged() { setLink(url(), title(), icon(), autoTitle(), autoIcon()); } +void LauncherContent::fontChanged() { setLauncher(name(), icon(), exec()); } +void ColorContent::fontChanged() { setColor(color()); } +void UnknownContent::fontChanged() { loadFromFile(/*lazyLoad=*/false); } // TODO: Optimize: setMimeTypes() + +//QString TextContent::customOpenCommand() { return (Settings::isTextUseProg() && ! Settings::textProg().isEmpty() ? Settings::textProg() : QString()); } +QString HtmlContent::customOpenCommand() { return (Settings::isHtmlUseProg() && ! Settings::htmlProg().isEmpty() ? Settings::htmlProg() : QString()); } +QString ImageContent::customOpenCommand() { return (Settings::isImageUseProg() && ! Settings::imageProg().isEmpty() ? Settings::imageProg() : QString()); } +QString AnimationContent::customOpenCommand() { return (Settings::isAnimationUseProg() && ! Settings::animationProg().isEmpty() ? Settings::animationProg() : QString()); } +QString SoundContent::customOpenCommand() { return (Settings::isSoundUseProg() && ! Settings::soundProg().isEmpty() ? Settings::soundProg() : QString()); } + +void LinkContent::serialize(QDataStream &stream) { stream << url() << title() << icon() << (Q_UINT64)autoTitle() << (Q_UINT64)autoIcon(); } +void ColorContent::serialize(QDataStream &stream) { stream << color(); } + +QPixmap TextContent::feedbackPixmap(int width, int height) +{ + QRect textRect = QFontMetrics(note()->font()).boundingRect(0, 0, width, height, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, text()); + QPixmap pixmap( QMIN(width, textRect.width()), QMIN(height, textRect.height()) ); + pixmap.fill(note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPainter painter(&pixmap); + painter.setPen(note()->textColor()); + painter.setFont(note()->font()); + painter.drawText(0, 0, pixmap.width(), pixmap.height(), Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, text()); + painter.end(); + return pixmap; +} + +QPixmap HtmlContent::feedbackPixmap(int width, int height) +{ + QSimpleRichText richText(html(), note()->font()); + richText.setWidth(width); + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPixmap pixmap( QMIN(width, richText.widthUsed()), QMIN(height, richText.height()) ); + pixmap.fill(note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPainter painter(&pixmap); + painter.setPen(note()->textColor()); + richText.draw(&painter, 0, 0, QRect(0, 0, pixmap.width(), pixmap.height()), colorGroup); + painter.end(); + return pixmap; +} + +QPixmap ImageContent::feedbackPixmap(int width, int height) +{ + if (width >= m_pixmap.width() && height >= m_pixmap.height()) { // Full size + if (m_pixmap.hasAlpha()) { + QPixmap opaque(m_pixmap.width(), m_pixmap.height()); + opaque.fill(note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPainter painter(&opaque); + painter.drawPixmap(0, 0, m_pixmap); + painter.end(); + return opaque; + } else + return m_pixmap; + } else { // Scalled down + QImage imageToScale = m_pixmap.convertToImage(); + QPixmap pmScaled; + pmScaled.convertFromImage(imageToScale./*smoothScale*/scale(width, height, QImage::ScaleMin)); + if (pmScaled.hasAlpha()) { + QPixmap opaque(pmScaled.width(), pmScaled.height()); + opaque.fill(note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPainter painter(&opaque); + painter.drawPixmap(0, 0, pmScaled); + painter.end(); + return opaque; + } else + return pmScaled; + } +} + +QPixmap AnimationContent::feedbackPixmap(int width, int height) +{ + QPixmap pixmap = m_movie.framePixmap(); + if (width >= pixmap.width() && height >= pixmap.height()) // Full size + return pixmap; + else { // Scalled down + QImage imageToScale = pixmap.convertToImage(); + QPixmap pmScaled; + pmScaled.convertFromImage(imageToScale./*smoothScale*/scale(width, height, QImage::ScaleMin)); + return pmScaled; + } +} + +QPixmap LinkContent::feedbackPixmap(int width, int height) +{ + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + return m_linkDisplay.feedbackPixmap(width, height, colorGroup, /*isDefaultColor=*/note()->textColor() == basket()->textColor()); +} + +QPixmap ColorContent::feedbackPixmap(int width, int height) +{ + // TODO: Duplicate code: make a rect() method! + QRect textRect = QFontMetrics(note()->font()).boundingRect(color().name()); + int rectHeight = (textRect.height() + 2)*3/2; + int rectWidth = rectHeight * 14 / 10; // 1.4 times the height, like A4 papers. + + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + + QPixmap pixmap( QMIN(width, rectWidth + RECT_MARGIN + textRect.width() + RECT_MARGIN), QMIN(height, rectHeight) ); + pixmap.fill(note()->backgroundColor().dark(FEEDBACK_DARKING)); + QPainter painter(&pixmap); + paint(&painter, pixmap.width(), pixmap.height(), colorGroup, false, false, false); // We don't care of the three last boolean parameters. + painter.end(); + return pixmap; +} + +QPixmap FileContent::feedbackPixmap(int width, int height) +{ + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + return m_linkDisplay.feedbackPixmap(width, height, colorGroup, /*isDefaultColor=*/note()->textColor() == basket()->textColor()); +} + +QPixmap LauncherContent::feedbackPixmap(int width, int height) +{ + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + return m_linkDisplay.feedbackPixmap(width, height, colorGroup, /*isDefaultColor=*/note()->textColor() == basket()->textColor()); +} + +QPixmap UnknownContent::feedbackPixmap(int width, int height) +{ + QRect textRect = QFontMetrics(note()->font()).boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_mimeTypes); + + QColorGroup colorGroup(basket()->colorGroup()); + colorGroup.setColor(QColorGroup::Text, note()->textColor()); + colorGroup.setColor(QColorGroup::Background, note()->backgroundColor().dark(FEEDBACK_DARKING)); + + QPixmap pixmap( QMIN(width, DECORATION_MARGIN + textRect.width() + DECORATION_MARGIN), QMIN(height, DECORATION_MARGIN + textRect.height() + DECORATION_MARGIN) ); + QPainter painter(&pixmap); + paint(&painter, pixmap.width() + 1, pixmap.height(), colorGroup, false, false, false); // We don't care of the three last boolean parameters. + painter.setPen(note()->backgroundColor().dark(FEEDBACK_DARKING)); + painter.drawPoint(0, 0); + painter.drawPoint(pixmap.width() - 1, 0); + painter.drawPoint(0, pixmap.height() - 1); + painter.drawPoint(pixmap.width() - 1, pixmap.height() - 1); + painter.end(); + return pixmap; +} + + +/** class TextContent: + */ + +TextContent::TextContent(Note *parent, const QString &fileName, bool lazyLoad) + : NoteContent(parent, fileName), m_simpleRichText(0) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(lazyLoad); +} + +TextContent::~TextContent() +{ + delete m_simpleRichText; +} + +int TextContent::setWidthAndGetHeight(int width) +{ + if (m_simpleRichText) { + width -= 1; + m_simpleRichText->setWidth(width); + return m_simpleRichText->height(); + } else + return 10; // Lazy loaded +} + +void TextContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + if (m_simpleRichText) { + width -= 1; + m_simpleRichText->draw(painter, 0, 0, QRect(0, 0, width, height), colorGroup); + } +} + +bool TextContent::loadFromFile(bool lazyLoad) +{ + DEBUG_WIN << "Loading TextContent From " + basket()->folderName() + fileName(); + + QString content; + bool success = basket()->loadFromFile(fullPath(), &content, /*isLocalEncoding=*/true); + + if (success) + setText(content, lazyLoad); + else { + std::cout << "FAILED TO LOAD TextContent: " << fullPath() << std::endl; + setText("", lazyLoad); + if (!QFile::exists(fullPath())) + saveToFile(); // Reserve the fileName so no new note will have the same name! + } + return success; +} + +bool TextContent::finishLazyLoad() +{ + int width = (m_simpleRichText ? m_simpleRichText->width() : 1); + delete m_simpleRichText; + QString html = "" + Tools::tagURLs(Tools::textToHTML(m_text)); // Don't collapse multiple spaces! + m_simpleRichText = new QSimpleRichText(html, note()->font()); + m_simpleRichText->setWidth(1); // We put a width of 1 pixel, so usedWidth() is egual to the minimum width + int minWidth = m_simpleRichText->widthUsed(); + m_simpleRichText->setWidth(width); + contentChanged(minWidth + 1); + + return true; +} + +bool TextContent::saveToFile() +{ + return basket()->saveToFile(fullPath(), text(), /*isLocalEncoding=*/true); +} + +QString TextContent::linkAt(const QPoint &pos) +{ + if (m_simpleRichText) + return m_simpleRichText->anchorAt(pos); + else + return ""; // Lazy loaded +} + + +QString TextContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening plain text..."); + case OpenSeveral: return i18n("Opening plain texts..."); + case OpenOneWith: return i18n("Opening plain text with..."); + case OpenSeveralWith: return i18n("Opening plain texts with..."); + case OpenOneWithDialog: return i18n("Open plain text with:"); + case OpenSeveralWithDialog: return i18n("Open plain texts with:"); + default: return ""; + } +} + +void TextContent::setText(const QString &text, bool lazyLoad) +{ + m_text = text; + if (!lazyLoad) + finishLazyLoad(); + else + contentChanged(10); +} + +void TextContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString spaces; + QString html = "" + + Tools::tagURLs(Tools::textToHTMLWithoutP(text().replace("\t", " "))); // Don't collapse multiple spaces! + exporter->stream << html.replace(" ", "  ").replace("\n", "\n" + spaces.fill(' ', indent + 1)); +} + +/** class HtmlContent: + */ + +HtmlContent::HtmlContent(Note *parent, const QString &fileName, bool lazyLoad) + : NoteContent(parent, fileName), m_simpleRichText(0) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(lazyLoad); +} + +HtmlContent::~HtmlContent() +{ + delete m_simpleRichText; +} + +int HtmlContent::setWidthAndGetHeight(int width) +{ + if (m_simpleRichText) { + width -= 1; + m_simpleRichText->setWidth(width); + return m_simpleRichText->height(); + } else + return 10; // Lazy loaded +} + +void HtmlContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + if (m_simpleRichText) { + width -= 1; + m_simpleRichText->draw(painter, 0, 0, QRect(0, 0, width, height), colorGroup); + } +} + +bool HtmlContent::loadFromFile(bool lazyLoad) +{ + DEBUG_WIN << "Loading HtmlContent From " + basket()->folderName() + fileName(); + + QString content; + bool success = basket()->loadFromFile(fullPath(), &content, /*isLocalEncoding=*/true); + + if (success) + setHtml(content, lazyLoad); + else { + std::cout << "FAILED TO LOAD HtmlContent: " << fullPath() << std::endl; + setHtml("", lazyLoad); + if (!QFile::exists(fullPath())) + saveToFile(); // Reserve the fileName so no new note will have the same name! + } + return success; +} + +bool HtmlContent::finishLazyLoad() +{ + int width = (m_simpleRichText ? m_simpleRichText->width() : 1); + delete m_simpleRichText; + m_simpleRichText = new QSimpleRichText(Tools::tagURLs(m_html), note()->font()); + m_simpleRichText->setWidth(1); // We put a width of 1 pixel, so usedWidth() is egual to the minimum width + int minWidth = m_simpleRichText->widthUsed(); + m_simpleRichText->setWidth(width); + contentChanged(minWidth + 1); + + return true; +} + +bool HtmlContent::saveToFile() +{ + return basket()->saveToFile(fullPath(), html(), /*isLocalEncoding=*/true); +} + +QString HtmlContent::linkAt(const QPoint &pos) +{ + if (m_simpleRichText) + return m_simpleRichText->anchorAt(pos); + else + return ""; // Lazy loaded +} + + +QString HtmlContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening text..."); + case OpenSeveral: return i18n("Opening texts..."); + case OpenOneWith: return i18n("Opening text with..."); + case OpenSeveralWith: return i18n("Opening texts with..."); + case OpenOneWithDialog: return i18n("Open text with:"); + case OpenSeveralWithDialog: return i18n("Open texts with:"); + default: return ""; + } +} + +void HtmlContent::setHtml(const QString &html, bool lazyLoad) +{ + m_html = html; + m_textEquivalent = toText(""); //OPTIM_FILTER + if (!lazyLoad) + finishLazyLoad(); + else + contentChanged(10); +} + +void HtmlContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString spaces; + exporter->stream << Tools::htmlToParagraph(Tools::tagURLs(html().replace("\t", " "))) + .replace(" ", "  ") + .replace("\n", "\n" + spaces.fill(' ', indent + 1)); +} + +/** class ImageContent: + */ + +ImageContent::ImageContent(Note *parent, const QString &fileName, bool lazyLoad) + : NoteContent(parent, fileName), m_format(0) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(lazyLoad); +} + +int ImageContent::setWidthAndGetHeight(int width) +{ + width -= 1; + // Don't store width: we will get it on paint! + if (width >= m_pixmap.width()) // Full size + return m_pixmap.height(); + else { // Scalled down + double height = m_pixmap.height() * (double)width / m_pixmap.width(); + return int((double)(int)height <= (height - 0.5) ? height + 1 : height); + } +} + +void ImageContent::paint(QPainter *painter, int width, int /*height*/, const QColorGroup &/*colorGroup*/, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + width -= 1; +// KPixmap pixmap = m_pixmap; +// if (note()->isSelected()) +// pixmap = KPixmapEffect::selectedPixmap(m_pixmap, KGlobalSettings::highlightColor()); + + if (width >= m_pixmap.width()) // Full size + painter->drawPixmap(0, 0, m_pixmap); + else { // Scalled down + double scale = ((double)width) / m_pixmap.width(); + painter->scale(scale, scale); + painter->drawPixmap(0, 0, m_pixmap); // TODO: Smooth !!! + } +} + +bool ImageContent::loadFromFile(bool lazyLoad) +{ + if (lazyLoad) + return true; + else + return finishLazyLoad(); +} + +bool ImageContent::finishLazyLoad() +{ + DEBUG_WIN << "Loading ImageContent From " + basket()->folderName() + fileName(); + + QByteArray content; + + if (basket()->loadFromFile(fullPath(), &content)) + { + QBuffer buffer(content); + + buffer.open(IO_ReadOnly); + m_format = (char* /* from const char* */)QImageIO::imageFormat(&buffer); // See QImageIO to know what formats can be supported. + buffer.close(); + if (m_format) { + m_pixmap.loadFromData(content); + setPixmap(m_pixmap); + return true; + } + } + + std::cout << "FAILED TO LOAD ImageContent: " << fullPath() << std::endl; + m_format = (char*)"PNG"; // If the image is set later, it should be saved without destruction, so we use PNG by default. + m_pixmap.resize(1, 1); // Create a 1x1 pixels image instead of an undefined one. + m_pixmap.fill(); + m_pixmap.setMask(m_pixmap.createHeuristicMask()); + setPixmap(m_pixmap); + if (!QFile::exists(fullPath())) + saveToFile(); // Reserve the fileName so no new note will have the same name! + return false; +} + +bool ImageContent::saveToFile() +{ + QByteArray ba; + QBuffer buffer(ba); + + buffer.open(IO_WriteOnly); + m_pixmap.save(&buffer, m_format); + return basket()->saveToFile(fullPath(), ba); +} + + +void ImageContent::toolTipInfos(QStringList *keys, QStringList *values) +{ + keys->append(i18n("Size")); + values->append(i18n("%1 by %2 pixels").arg(QString::number(m_pixmap.width()), QString::number(m_pixmap.height()))); +} + +QString ImageContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening image..."); + case OpenSeveral: return i18n("Opening images..."); + case OpenOneWith: return i18n("Opening image with..."); + case OpenSeveralWith: return i18n("Opening images with..."); + case OpenOneWithDialog: return i18n("Open image with:"); + case OpenSeveralWithDialog: return i18n("Open images with:"); + default: return ""; + } +} + +void ImageContent::setPixmap(const QPixmap &pixmap) +{ + m_pixmap = pixmap; + // Since it's scalled, the height is always greater or equal to the size of the tag emblems (16) + contentChanged(16 + 1); // TODO: always good? I don't think... +} + +void ImageContent::exportToHTML(HTMLExporter *exporter, int /*indent*/) +{ + int width = m_pixmap.width(); + int height = m_pixmap.height(); + int contentWidth = note()->width() - note()->contentX() - 1 - Note::NOTE_MARGIN; + + QString imageName = exporter->copyFile(fullPath(), /*createIt=*/true); + + if (contentWidth <= m_pixmap.width()) { // Scalled down + double scale = ((double)contentWidth) / m_pixmap.width(); + width = (int)(m_pixmap.width() * scale); + height = (int)(m_pixmap.height() * scale); + exporter->stream << "dataFolderName << imageName << "\" title=\"" << i18n("Click for full size view") << "\">"; + } + + exporter->stream << "dataFolderName << imageName + << "\" width=\"" << width << "\" height=\"" << height << "\" alt=\"\">"; + + if (contentWidth <= m_pixmap.width()) // Scalled down + exporter->stream << ""; +} + +/** class AnimationContent: + */ + +int AnimationContent::INVALID_STATUS = -100; + +AnimationContent::AnimationContent(Note *parent, const QString &fileName, bool lazyLoad) + : NoteContent(parent, fileName), m_oldStatus(INVALID_STATUS) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(lazyLoad); +} + +int AnimationContent::setWidthAndGetHeight(int /*width*/) +{ + /*width -= 1*/; + return m_movie.framePixmap().height() ; // TODO!!! +} + +void AnimationContent::paint(QPainter *painter, int width, int /*height*/, const QColorGroup &/*colorGroup*/, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + /*width -= 1*/; +// DEBUG_WIN << "AnimationContent::paint()"; + const QPixmap &frame = m_movie.framePixmap(); + if (width >= frame.width()) // Full size + painter->drawPixmap(0, 0, frame); + else // Scalled down + painter->drawPixmap(0, 0, frame); // TODO: Scall down +} + +bool AnimationContent::loadFromFile(bool lazyLoad) +{ + if (lazyLoad) + return true; + else + return finishLazyLoad(); +} + +bool AnimationContent::finishLazyLoad() +{ + DEBUG_WIN << "Loading MovieContent From " + basket()->folderName() + fileName(); +// return setMovie(QMovie(fullPath())); + + bool success = false; + QByteArray content; + if (basket()->loadFromFile(fullPath(), &content)) + success = setMovie(QMovie(content, content.size())); + if (!success) + setMovie(QMovie()); + return success; +} + +bool AnimationContent::saveToFile() +{ + // Impossible! + return false; +} + + +QString AnimationContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening animation..."); + case OpenSeveral: return i18n("Opening animations..."); + case OpenOneWith: return i18n("Opening animation with..."); + case OpenSeveralWith: return i18n("Opening animations with..."); + case OpenOneWithDialog: return i18n("Open animation with:"); + case OpenSeveralWithDialog: return i18n("Open animations with:"); + default: return ""; + } +} + +bool AnimationContent::setMovie(const QMovie &movie) +{ + if (!m_movie.isNull()) { + // Disconnect? + return false; + } + m_movie = movie; + m_movie.connectUpdate( this, SLOT(movieUpdated(const QRect&)) ); + m_movie.connectResize( this, SLOT(movieResized(const QSize&)) ); + m_movie.connectStatus( this, SLOT(movieStatus(int)) ); + contentChanged( m_movie.framePixmap().width() + 1 ); // TODO + return true; +} + +void AnimationContent::movieUpdated(const QRect&) +{ + note()->unbufferize(); + note()->update(); +} + +void AnimationContent::movieResized(const QSize&) +{ + note()->requestRelayout(); // ? +} + +/** When a user drop a .gif file, for instance, we don't know if it is an image + * or an animtion (gif file contain multiple images). + * To determin that, we assume this is an animation and count the number of images. + * QMovie send, in this order: + * - For a unique image: QMovie::EndOfFrame, QMovie::EndOfLoop, QMovie::EndOfMovie. + * - For animation: QMovie::EndOfFrame... (for each image), QMovie::EndOfLoop, + * and it then restart that for each loop. + */ +void AnimationContent::movieStatus(int status) +{ + DEBUG_WIN << "movieStatus()"; + + // At least two frames: it's an animation, everything is OK + if (m_oldStatus == QMovie::EndOfFrame && status == QMovie::EndOfFrame) { + movie().disconnectStatus(this); + m_oldStatus = INVALID_STATUS; +// if (note()->isFocused()) // When inserting a new note we ensure it visble +// basket()->ensureNoteVisible(note()); // But after loading it has certainly grown and if it was + } + // Only one image: it's an image, change note's type + else if (m_oldStatus == QMovie::EndOfFrame && status == QMovie::EndOfLoop) { + movie().disconnectStatus(this); + m_oldStatus = INVALID_STATUS; + note()->setContent(new ImageContent(note(), fileName())); + basket()->save(); + //delete this; // CRASH, as always !!!!!!!!! + //QTimer::singleShot(0, this, SLOT(loadContent())); // Delayed to avoid crash! + //QTimer::singleShot(100, this, SLOT(saveProperties())); // We should save it's an image and not an animation +// if (note()->isFocused()) +// QTimer::singleShot(25, note(), SLOT(delayedEnsureVisible())); + } + else + m_oldStatus = status; +} + +void AnimationContent::exportToHTML(HTMLExporter *exporter, int /*indent*/) +{ + exporter->stream << QString("\"\"") + .arg( exporter->dataFolderName + exporter->copyFile(fullPath(), /*createIt=*/true), + QString::number(movie().framePixmap().size().width()), + QString::number(movie().framePixmap().size().height()) ); +} + +/** class FileContent: + */ + +FileContent::FileContent(Note *parent, const QString &fileName) + : NoteContent(parent, fileName), m_previewJob(0) +{ + basket()->addWatchedFile(fullPath()); + setFileName(fileName); // FIXME: TO THAT HERE BECAUSE NoteContent() constructor seems to don't be able to call virtual methods??? +} + +int FileContent::setWidthAndGetHeight(int width) +{ + m_linkDisplay.setWidth(width); + return m_linkDisplay.height(); +} + +void FileContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered) +{ + m_linkDisplay.paint(painter, 0, 0, width, height, colorGroup, isDefaultColor, isSelected, isHovered, isHovered && note()->hoveredZone() == Note::Custom0); +} + +bool FileContent::loadFromFile(bool /*lazyLoad*/) +{ + setFileName(fileName()); // File changed: get new file preview! + return true; +} + +void FileContent::toolTipInfos(QStringList *keys, QStringList *values) +{ + // Get the size of the file: + uint size = QFileInfo(fullPath()).size(); + QString humanFileSize = KIO::convertSize((KIO::filesize_t)size); + + keys->append(i18n("Size")); + values->append(humanFileSize); + + KMimeType::Ptr mime = KMimeType::findByURL(KURL(fullPath())); + if (mime) { + keys->append(i18n("Type")); + values->append(mime->comment()); + } + + KFileMetaInfo infos = KFileMetaInfo(KURL(fullPath())); + if (infos.isValid() && !infos.isEmpty()) { + QStringList groups = infos.preferredKeys(); + int i = 0; + for (QStringList::Iterator it = groups.begin(); i < 6 && it != groups.end(); ++it) { + KFileMetaInfoItem metaInfoItem = infos.item(*it); + if (!metaInfoItem.string().isEmpty()) { + keys->append(metaInfoItem.translatedKey()); + values->append(metaInfoItem.string()); + ++i; + } + } + } +} + +int FileContent::zoneAt(const QPoint &pos) +{ + return (m_linkDisplay.iconButtonAt(pos) ? 0 : Note::Custom0); +} + +QRect FileContent::zoneRect(int zone, const QPoint &/*pos*/) +{ + QRect linkRect = m_linkDisplay.iconButtonRect(); + + if (zone == Note::Custom0) + return QRect(linkRect.width(), 0, note()->width(), note()->height()); // Too wide and height, but it will be clipped by Note::zoneRect() + else if (zone == Note::Content) + return linkRect; + else + return QRect(); +} + +QString FileContent::zoneTip(int zone) +{ + return (zone == Note::Custom0 ? i18n("Open this file") : QString()); +} + +void FileContent::setCursor(QWidget *widget, int zone) +{ + if (zone == Note::Custom0) + widget->setCursor(Qt::PointingHandCursor); +} + + +int FileContent::xEditorIndent() +{ + return m_linkDisplay.iconButtonRect().width() + 2; +} + + +QString FileContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening file..."); + case OpenSeveral: return i18n("Opening files..."); + case OpenOneWith: return i18n("Opening file with..."); + case OpenSeveralWith: return i18n("Opening files with..."); + case OpenOneWithDialog: return i18n("Open file with:"); + case OpenSeveralWithDialog: return i18n("Open files with:"); + default: return ""; + } +} + +void FileContent::setFileName(const QString &fileName) +{ + NoteContent::setFileName(fileName); + KURL url = KURL(fullPath()); + if (linkLook()->previewEnabled()) + m_linkDisplay.setLink(fileName, NoteFactory::iconForURL(url), linkLook(), note()->font()); // FIXME: move iconForURL outside of NoteFactory !!!!! + else + m_linkDisplay.setLink(fileName, NoteFactory::iconForURL(url), QPixmap(), linkLook(), note()->font()); + startFetchingUrlPreview(); + contentChanged(m_linkDisplay.minWidth()); +} + +void FileContent::linkLookChanged() +{ + fontChanged(); + //setFileName(fileName()); + //startFetchingUrlPreview(); +} + +void FileContent::newPreview(const KFileItem*, const QPixmap &preview) +{ + LinkLook *linkLook = this->linkLook(); + m_linkDisplay.setLink(fileName(), NoteFactory::iconForURL(KURL(fullPath())), (linkLook->previewEnabled() ? preview : QPixmap()), linkLook, note()->font()); + contentChanged(m_linkDisplay.minWidth()); +} + +void FileContent::removePreview(const KFileItem*) +{ + newPreview(0, QPixmap()); +} + +void FileContent::startFetchingUrlPreview() +{ + KURL url(fullPath()); + LinkLook *linkLook = this->linkLook(); + +// delete m_previewJob; + if (!url.isEmpty() && linkLook->previewSize() > 0) { + KURL filteredUrl = NoteFactory::filteredURL(url);//KURIFilter::self()->filteredURI(url); + KURL::List urlList; + urlList.append(filteredUrl); + m_previewJob = KIO::filePreview(urlList, linkLook->previewSize(), linkLook->previewSize(), linkLook->iconSize()); + connect( m_previewJob, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), this, SLOT(newPreview(const KFileItem*, const QPixmap&)) ); + connect( m_previewJob, SIGNAL(failed(const KFileItem*)), this, SLOT(removePreview(const KFileItem*)) ); + } +} + +void FileContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString spaces; + QString fileName = exporter->copyFile(fullPath(), true); + exporter->stream << m_linkDisplay.toHtml(exporter, KURL(exporter->dataFolderName + fileName), "").replace("\n", "\n" + spaces.fill(' ', indent + 1)); +} + +/** class SoundContent: + */ + +SoundContent::SoundContent(Note *parent, const QString &fileName) + : FileContent(parent, fileName) +{ + setFileName(fileName); // FIXME: TO THAT HERE BECAUSE NoteContent() constructor seems to don't be able to call virtual methods??? +} + + +QString SoundContent::zoneTip(int zone) +{ + return (zone == Note::Custom0 ? i18n("Open this sound") : QString()); +} + +void SoundContent::setHoveredZone(int oldZone, int newZone) +{ +#ifdef WITHOUT_ARTS + Q_UNUSED(oldZone); + if (newZone == Note::Custom0 || newZone == Note::Content) + std::cout << "Compiled without aRts: sound is not played." << std::endl; +#else + static KArtsDispatcher *s_dispatcher = new KArtsDispatcher(); // Needed for s_playObj (we don't use it directly) + static KArtsServer *s_playServer = new KArtsServer(); + static KDE::PlayObjectFactory *s_playFactory = new KDE::PlayObjectFactory(s_playServer); + static KDE::PlayObject *s_playObj = 0; + + Q_UNUSED(s_dispatcher); // Avoid the compiler to tell us it is not used! + if (newZone == Note::Custom0 || newZone == Note::Content) { + // Start the sound preview: + if (oldZone != Note::Custom0 && oldZone != Note::Content) { // Don't restart if it was already in one of those zones + s_playObj = s_playFactory->createPlayObject(fullPath(), true); + s_playObj->play(); + } + } else { + // Stop the sound preview, if it was started: + if (s_playObj) { + s_playObj->halt(); + delete s_playObj; + s_playObj = 0; + } + } +#endif +} + + +QString SoundContent::messageWhenOpenning(OpenMessage where) +{ + switch (where) { + case OpenOne: return i18n("Opening sound..."); + case OpenSeveral: return i18n("Opening sounds..."); + case OpenOneWith: return i18n("Opening sound with..."); + case OpenSeveralWith: return i18n("Opening sounds with..."); + case OpenOneWithDialog: return i18n("Open sound with:"); + case OpenSeveralWithDialog: return i18n("Open sounds with:"); + default: return ""; + } +} + +/** class LinkContent: + */ + +LinkContent::LinkContent(Note *parent, const KURL &url, const QString &title, const QString &icon, bool autoTitle, bool autoIcon) + : NoteContent(parent), m_previewJob(0) +{ + setLink(url, title, icon, autoTitle, autoIcon); +} + +int LinkContent::setWidthAndGetHeight(int width) +{ + m_linkDisplay.setWidth(width); + return m_linkDisplay.height(); +} + +void LinkContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered) +{ + m_linkDisplay.paint(painter, 0, 0, width, height, colorGroup, isDefaultColor, isSelected, isHovered, isHovered && note()->hoveredZone() == Note::Custom0); +} + +void LinkContent::saveToNode(QDomDocument &doc, QDomElement &content) +{ + content.setAttribute("title", title() ); + content.setAttribute("icon", icon() ); + content.setAttribute("autoTitle", (autoTitle() ? "true" : "false")); + content.setAttribute("autoIcon", (autoIcon() ? "true" : "false")); + QDomText textNode = doc.createTextNode(url().prettyURL()); + content.appendChild(textNode); +} + + +void LinkContent::toolTipInfos(QStringList *keys, QStringList *values) +{ + keys->append(i18n("Target")); + values->append(m_url.prettyURL()); +} + +int LinkContent::zoneAt(const QPoint &pos) +{ + return (m_linkDisplay.iconButtonAt(pos) ? 0 : Note::Custom0); +} + +QRect LinkContent::zoneRect(int zone, const QPoint &/*pos*/) +{ + QRect linkRect = m_linkDisplay.iconButtonRect(); + + if (zone == Note::Custom0) + return QRect(linkRect.width(), 0, note()->width(), note()->height()); // Too wide and height, but it will be clipped by Note::zoneRect() + else if (zone == Note::Content) + return linkRect; + else + return QRect(); +} + +QString LinkContent::zoneTip(int zone) +{ + return (zone == Note::Custom0 ? i18n("Open this link") : QString()); +} + +void LinkContent::setCursor(QWidget *widget, int zone) +{ + if (zone == Note::Custom0) + widget->setCursor(Qt::PointingHandCursor); +} + +QString LinkContent::statusBarMessage(int zone) +{ + if (zone == Note::Custom0 || zone == Note::Content) + return m_url.prettyURL(); + else + return ""; +} + + +KURL LinkContent::urlToOpen(bool /*with*/) +{ + return NoteFactory::filteredURL(url());//KURIFilter::self()->filteredURI(url()); +} + +QString LinkContent::messageWhenOpenning(OpenMessage where) +{ + if (url().isEmpty()) + return i18n("Link have no URL to open."); + + switch (where) { + case OpenOne: return i18n("Opening link target..."); + case OpenSeveral: return i18n("Opening link targets..."); + case OpenOneWith: return i18n("Opening link target with..."); + case OpenSeveralWith: return i18n("Opening link targets with..."); + case OpenOneWithDialog: return i18n("Open link target with:"); + case OpenSeveralWithDialog: return i18n("Open link targets with:"); + default: return ""; + } +} + +void LinkContent::setLink(const KURL &url, const QString &title, const QString &icon, bool autoTitle, bool autoIcon) +{ + m_autoTitle = autoTitle; + m_autoIcon = autoIcon; + m_url = NoteFactory::filteredURL(KURL(url));//KURIFilter::self()->filteredURI(url); + m_title = (autoTitle ? NoteFactory::titleForURL(m_url) : title); + m_icon = (autoIcon ? NoteFactory::iconForURL(m_url) : icon); + + LinkLook *look = LinkLook::lookForURL(m_url); + if (look->previewEnabled()) + m_linkDisplay.setLink(m_title, m_icon, look, note()->font()); + else + m_linkDisplay.setLink(m_title, m_icon, QPixmap(), look, note()->font()); + startFetchingUrlPreview(); + contentChanged(m_linkDisplay.minWidth()); +} + +void LinkContent::linkLookChanged() +{ + fontChanged(); +} + +void LinkContent::newPreview(const KFileItem*, const QPixmap &preview) +{ + LinkLook *linkLook = LinkLook::lookForURL(url()); + m_linkDisplay.setLink(title(), icon(), (linkLook->previewEnabled() ? preview : QPixmap()), linkLook, note()->font()); + contentChanged(m_linkDisplay.minWidth()); +} + +void LinkContent::removePreview(const KFileItem*) +{ + newPreview(0, QPixmap()); +} + +// Code dupicated from FileContent::startFetchingUrlPreview() +void LinkContent::startFetchingUrlPreview() +{ + KURL url = this->url(); + LinkLook *linkLook = LinkLook::lookForURL(this->url()); + +// delete m_previewJob; + if (!url.isEmpty() && linkLook->previewSize() > 0) { + KURL filteredUrl = NoteFactory::filteredURL(url);//KURIFilter::self()->filteredURI(url); + KURL::List urlList; + urlList.append(filteredUrl); + m_previewJob = KIO::filePreview(urlList, linkLook->previewSize(), linkLook->previewSize(), linkLook->iconSize()); + connect( m_previewJob, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), this, SLOT(newPreview(const KFileItem*, const QPixmap&)) ); + connect( m_previewJob, SIGNAL(failed(const KFileItem*)), this, SLOT(removePreview(const KFileItem*)) ); + } +} + +void LinkContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString linkTitle = title(); + +// TODO: +// // Append address (useful for print version of the page/basket): +// if (exportData.formatForImpression && (!autoTitle() && title() != NoteFactory::titleForURL(url().prettyURL()))) { +// // The address is on a new line, unless title is empty (empty lines was replaced by  ): +// if (linkTitle == " "/*" "*/) +// linkTitle = url().prettyURL()/*""*/; +// else +// linkTitle = linkTitle + " <" + url().prettyURL() + ">"/*+ "
      "*/; +// //linkTitle += "" + url().prettyURL() + ""; +// } + + KURL linkURL; +/* + QFileInfo fInfo(url().path()); +// DEBUG_WIN << url().path() +// << "IsFile:" + QString::number(fInfo.isFile()) +// << "IsDir:" + QString::number(fInfo.isDir()); + if (exportData.embedLinkedFiles && fInfo.isFile()) { +// DEBUG_WIN << "Embed file"; + linkURL = exportData.dataFolderName + Basket::copyFile(url().path(), exportData.dataFolderPath, true); + } else if (exportData.embedLinkedFolders && fInfo.isDir()) { +// DEBUG_WIN << "Embed folder"; + linkURL = exportData.dataFolderName + Basket::copyFile(url().path(), exportData.dataFolderPath, true); + } else { +// DEBUG_WIN << "Embed LINK"; +*/ + linkURL = url(); +/* + } +*/ + + QString spaces; + exporter->stream << m_linkDisplay.toHtml(exporter, linkURL, linkTitle).replace("\n", "\n" + spaces.fill(' ', indent + 1)); +} + +/** class LauncherContent: + */ + +LauncherContent::LauncherContent(Note *parent, const QString &fileName) + : NoteContent(parent, fileName) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(/*lazyLoad=*/false); +} + +int LauncherContent::setWidthAndGetHeight(int width) +{ + m_linkDisplay.setWidth(width); + return m_linkDisplay.height(); +} + +void LauncherContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered) +{ + m_linkDisplay.paint(painter, 0, 0, width, height, colorGroup, isDefaultColor, isSelected, isHovered, isHovered && note()->hoveredZone() == Note::Custom0); +} + +bool LauncherContent::loadFromFile(bool /*lazyLoad*/) // TODO: saveToFile() ?? Is it possible? +{ + DEBUG_WIN << "Loading LauncherContent From " + basket()->folderName() + fileName(); + KService service(fullPath()); + setLauncher(service.name(), service.icon(), service.exec()); + return true; +} + + +void LauncherContent::toolTipInfos(QStringList *keys, QStringList *values) +{ + KService service(fullPath()); + + QString exec = service.exec(); + if (service.terminal()) + exec = i18n("%1 (run in terminal)").arg(exec); + + if (!service.comment().isEmpty() && service.comment() != service.name()) { + keys->append(i18n("Comment")); + values->append(service.comment()); + } + + keys->append(i18n("Command")); + values->append(exec); +} + +int LauncherContent::zoneAt(const QPoint &pos) +{ + return (m_linkDisplay.iconButtonAt(pos) ? 0 : Note::Custom0); +} + +QRect LauncherContent::zoneRect(int zone, const QPoint &/*pos*/) +{ + QRect linkRect = m_linkDisplay.iconButtonRect(); + + if (zone == Note::Custom0) + return QRect(linkRect.width(), 0, note()->width(), note()->height()); // Too wide and height, but it will be clipped by Note::zoneRect() + else if (zone == Note::Content) + return linkRect; + else + return QRect(); +} + +QString LauncherContent::zoneTip(int zone) +{ + return (zone == Note::Custom0 ? i18n("Launch this application") : QString()); +} + +void LauncherContent::setCursor(QWidget *widget, int zone) +{ + if (zone == Note::Custom0) + widget->setCursor(Qt::PointingHandCursor); +} + + +KURL LauncherContent::urlToOpen(bool with) +{ + if (KService(fullPath()).exec().isEmpty()) + return KURL(); + + return (with ? KURL() : KURL(fullPath())); // Can open the appliation, but not with another application :-) +} + +QString LauncherContent::messageWhenOpenning(OpenMessage where) +{ + if (KService(fullPath()).exec().isEmpty()) + return i18n("The launcher have no command to run."); + + switch (where) { + case OpenOne: return i18n("Launching application..."); + case OpenSeveral: return i18n("Launching applications..."); + case OpenOneWith: + case OpenSeveralWith: + case OpenOneWithDialog: + case OpenSeveralWithDialog: // TODO: "Open this application with this file as parameter"? + default: return ""; + } +} + +void LauncherContent::setLauncher(const QString &name, const QString &icon, const QString &exec) +{ + m_name = name; + m_icon = icon; + m_exec = exec; + + m_linkDisplay.setLink(name, icon, LinkLook::launcherLook, note()->font()); + contentChanged(m_linkDisplay.minWidth()); +} + +void LauncherContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString spaces; + QString fileName = exporter->copyFile(fullPath(), /*createIt=*/true); + exporter->stream << m_linkDisplay.toHtml(exporter, KURL(exporter->dataFolderName + fileName), "").replace("\n", "\n" + spaces.fill(' ', indent + 1)); +} + +/** class ColorContent: + */ + +const int ColorContent::RECT_MARGIN = 2; + +ColorContent::ColorContent(Note *parent, const QColor &color) + : NoteContent(parent) +{ + setColor(color); +} + +int ColorContent::setWidthAndGetHeight(int /*width*/) // We do not need width because we can't word-break, and width is always >= minWidth() +{ + // FIXME: Duplicate from setColor(): + QRect textRect = QFontMetrics(note()->font()).boundingRect(color().name()); + int rectHeight = (textRect.height() + 2)*3/2; + return rectHeight; +} + +void ColorContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + // FIXME: Duplicate from setColor(): + QRect textRect = QFontMetrics(note()->font()).boundingRect(color().name()); + int rectHeight = (textRect.height() + 2)*3/2; + int rectWidth = rectHeight * 14 / 10; // 1.4 times the height, like A4 papers. + + // FIXME: Duplicate from CommonColorSelector::drawColorRect: + // Fill: + painter->fillRect(1, 1, rectWidth - 2, rectHeight - 2, color()); + // Stroke: + QColor stroke = color().dark(125); + painter->setPen(stroke); + painter->drawLine(1, 0, rectWidth - 2, 0); + painter->drawLine(0, 1, 0, rectHeight - 2); + painter->drawLine(1, rectHeight - 1, rectWidth - 2, rectHeight - 1); + painter->drawLine(rectWidth - 1, 1, rectWidth - 1, rectHeight - 2); + // Round corners: + painter->setPen(Tools::mixColor(color(), stroke)); + painter->drawPoint(1, 1); + painter->drawPoint(1, rectHeight - 2); + painter->drawPoint(rectWidth - 2, rectHeight - 2); + painter->drawPoint(rectWidth - 2, 1); + + // Draw the text: + painter->setFont(note()->font()); + painter->setPen(colorGroup.text()); + painter->drawText(rectWidth + RECT_MARGIN, 0, width - rectWidth - RECT_MARGIN, height, Qt::AlignAuto | Qt::AlignVCenter, color().name()); +} + +void ColorContent::saveToNode(QDomDocument &doc, QDomElement &content) +{ + QDomText textNode = doc.createTextNode(color().name()); + content.appendChild(textNode); +} + + +void ColorContent::toolTipInfos(QStringList *keys, QStringList *values) +{ + int hue, saturation, value; + m_color.getHsv(hue, saturation, value); + + keys->append(i18n("RGB Colorspace: Red/Green/Blue", "RGB")); + values->append(i18n("Red: %1, Green: %2, Blue: %3,").arg(QString::number(m_color.red()), QString::number(m_color.green()), QString::number(m_color.blue()))); + + keys->append(i18n("HSV Colorspace: Hue/Saturation/Value", "HSV")); + values->append(i18n("Hue: %1, Saturation: %2, Value: %3,").arg(QString::number(hue), QString::number(saturation), QString::number(value))); + + static QString cssColors[] = { + "aqua", "00ffff", + "black", "000000", + "blue", "0000ff", + "fuchsia", "ff00ff", + "gray", "808080", + "green", "008000", + "lime", "00ff00", + "maroon", "800000", + "navy", "000080", + "olive", "808000", + "purple", "800080", + "red", "ff0000", + "silver", "c0c0c0", + "teal", "008080", + "white", "ffffff", + "yellow", "ffff00" + }; + + static QString cssExtendedColors[] = { + "aliceblue", "f0f8ff", + "antiquewhite", "faebd7", + "aquamarine", "7fffd4", + "azure", "f0ffff", + "beige", "f5f5dc", + "bisque", "ffe4c4", + "blanchedalmond", "ffebcd", + "blueviolet", "8a2be2", + "brown", "a52a2a", + "burlywood", "deb887", + "cadetblue", "5f9ea0", + "chartreuse", "7fff00", + "chocolate", "d2691e", + "coral", "ff7f50", + "cornflowerblue", "6495ed", + "cornsilk", "fff8dc", + "crimson", "dc1436", + "cyan", "00ffff", + "darkblue", "00008b", + "darkcyan", "008b8b", + "darkgoldenrod", "b8860b", + "darkgray", "a9a9a9", + "darkgreen", "006400", + "darkkhaki", "bdb76b", + "darkmagenta", "8b008b", + "darkolivegreen", "556b2f", + "darkorange", "ff8c00", + "darkorchid", "9932cc", + "darkred", "8b0000", + "darksalmon", "e9967a", + "darkseagreen", "8fbc8f", + "darkslateblue", "483d8b", + "darkslategray", "2f4f4f", + "darkturquoise", "00ced1", + "darkviolet", "9400d3", + "deeppink", "ff1493", + "deepskyblue", "00bfff", + "dimgray", "696969", + "dodgerblue", "1e90ff", + "firebrick", "b22222", + "floralwhite", "fffaf0", + "forestgreen", "228b22", + "gainsboro", "dcdcdc", + "ghostwhite", "f8f8ff", + "gold", "ffd700", + "goldenrod", "daa520", + "greenyellow", "adff2f", + "honeydew", "f0fff0", + "hotpink", "ff69b4", + "indianred", "cd5c5c", + "indigo", "4b0082", + "ivory", "fffff0", + "khaki", "f0e68c", + "lavender", "e6e6fa", + "lavenderblush", "fff0f5", + "lawngreen", "7cfc00", + "lemonchiffon", "fffacd", + "lightblue", "add8e6", + "lightcoral", "f08080", + "lightcyan", "e0ffff", + "lightgoldenrodyellow", "fafad2", + "lightgreen", "90ee90", + "lightgrey", "d3d3d3", + "lightpink", "ffb6c1", + "lightsalmon", "ffa07a", + "lightseagreen", "20b2aa", + "lightskyblue", "87cefa", + "lightslategray", "778899", + "lightsteelblue", "b0c4de", + "lightyellow", "ffffe0", + "limegreen", "32cd32", + "linen", "faf0e6", + "magenta", "ff00ff", + "mediumaquamarine", "66cdaa", + "mediumblue", "0000cd", + "mediumorchid", "ba55d3", + "mediumpurple", "9370db", + "mediumseagreen", "3cb371", + "mediumslateblue", "7b68ee", + "mediumspringgreen", "00fa9a", + "mediumturquoise", "48d1cc", + "mediumvioletred", "c71585", + "midnightblue", "191970", + "mintcream", "f5fffa", + "mistyrose", "ffe4e1", + "moccasin", "ffe4b5", + "navajowhite", "ffdead", + "oldlace", "fdf5e6", + "olivedrab", "6b8e23", + "orange", "ffa500", + "orangered", "ff4500", + "orchid", "da70d6", + "palegoldenrod", "eee8aa", + "palegreen", "98fb98", + "paleturquoise", "afeeee", + "palevioletred", "db7093", + "papayawhip", "ffefd5", + "peachpuff", "ffdab9", + "peru", "cd853f", + "pink", "ffc0cb", + "plum", "dda0dd", + "powderblue", "b0e0e6", + "rosybrown", "bc8f8f", + "royalblue", "4169e1", + "saddlebrown", "8b4513", + "salmon", "fa8072", + "sandybrown", "f4a460", + "seagreen", "2e8b57", + "seashell", "fff5ee", + "sienna", "a0522d", + "skyblue", "87ceeb", + "slateblue", "6a5acd", + "slategray", "708090", + "snow", "fffafa", + "springgreen", "00ff7f", + "steelblue", "4682b4", + "tan", "d2b48c", + "thistle", "d8bfd8", + "tomato", "ff6347", + "turquoise", "40e0d0", + "violet", "ee82ee", + "wheat", "f5deb3", + "whitesmoke", "f5f5f5", + "yellowgreen", "9acd32" + }; + + QString colorHex = color().name().mid(1); // Take the hexadecimal name of the color, without the '#'. + + bool cssColorFound = false; + for (int i = 0; i < 2*16; i += 2) { + if (colorHex == cssColors[i+1]) { + keys->append(i18n("CSS Color Name")); + values->append(cssColors[i]); + cssColorFound = true; + break; + } + } + + if (!cssColorFound) + for (int i = 0; i < 2*124; i += 2) { + if (colorHex == cssExtendedColors[i+1]) { + keys->append(i18n("CSS Extended Color Name")); + values->append(cssExtendedColors[i]); + break; + } + } + + keys->append(i18n("Is Web Color")); + values->append(Tools::isWebColor(color()) ? i18n("Yes") : i18n("No")); + +} + +void ColorContent::setColor(const QColor &color) +{ + m_color = color; + + QRect textRect = QFontMetrics(note()->font()).boundingRect(color.name()); + int rectHeight = (textRect.height() + 2)*3/2; + int rectWidth = rectHeight * 14 / 10; // 1.4 times the height, like A4 papers. + contentChanged(rectWidth + RECT_MARGIN + textRect.width() + RECT_MARGIN); // The second RECT_MARGIN is because textRect.width() is too short. I done a bug? Can't figure out. +} + +void ColorContent::addAlternateDragObjects(KMultipleDrag *dragObject) +{ + dragObject->addDragObject( new QColorDrag(color()) ); + +// addDragObject(new KColorDrag( note->color(), 0 )); +// addDragObject(new QTextDrag( note->color().name(), 0 )); + +/* // Creata and add the QDragObject: + storedDrag = new QStoredDrag("application/x-color"); + storedDrag->setEncodedData(*array); + dragObject->addDragObject(storedDrag); + delete array;*/ +} + +void ColorContent::exportToHTML(HTMLExporter *exporter, int /*indent*/) +{ + // FIXME: Duplicate from setColor(): TODO: rectSize() + QRect textRect = QFontMetrics(note()->font()).boundingRect(color().name()); + int rectHeight = (textRect.height() + 2)*3/2; + int rectWidth = rectHeight * 14 / 10; // 1.4 times the height, like A4 papers. + + QString fileName = /*Tools::fileNameForNewFile(*/QString("color_%1.png").arg(color().name().lower().mid(1))/*, exportData.iconsFolderPath)*/; + QString fullPath = exporter->iconsFolderPath + fileName; + QPixmap colorIcon = KColorCombo2::colorRectPixmap(color(), /*isDefault=*/false, rectWidth, rectHeight); + colorIcon.save(fullPath, "PNG"); + QString iconHtml = QString("\"\"") + .arg(exporter->iconsFolderName + fileName, QString::number(colorIcon.width()), QString::number(colorIcon.height())); + + exporter->stream << iconHtml + " " + color().name(); +} + + + +/** class UnknownContent: + */ + +const int UnknownContent::DECORATION_MARGIN = 2; + +UnknownContent::UnknownContent(Note *parent, const QString &fileName) + : NoteContent(parent, fileName) +{ + basket()->addWatchedFile(fullPath()); + loadFromFile(/*lazyLoad=*/false); +} + +int UnknownContent::setWidthAndGetHeight(int width) +{ + width -= 1; + QRect textRect = QFontMetrics(note()->font()).boundingRect(0, 0, width, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_mimeTypes); + return DECORATION_MARGIN + textRect.height() + DECORATION_MARGIN; +} + +// TODO: Move this function from note.cpp to class Tools: +extern void drawGradient( QPainter *p, const QColor &colorTop, const QColor & colorBottom, + int x, int y, int w, int h, + bool sunken, bool horz, bool flat ); /*const*/ + +void UnknownContent::paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool /*isDefaultColor*/, bool /*isSelected*/, bool /*isHovered*/) +{ + width -= 1; + painter->setPen(colorGroup.text()); + + // FIXME: Duplicate from ColorContent::paint() and CommonColorSelector::drawColorRect: + // Fill with gradient: + drawGradient(painter, colorGroup.background(), colorGroup.background().dark(110), 1, 1, width - 2, height - 2, /*sunken=*/false, /*horz=*/true, /*flat=*/false); + // Stroke: + QColor stroke = Tools::mixColor(colorGroup.background(), colorGroup.text()); + painter->setPen(stroke); + painter->drawLine(1, 0, width - 2, 0); + painter->drawLine(0, 1, 0, height - 2); + painter->drawLine(1, height - 1, width - 2, height - 1); + painter->drawLine(width - 1, 1, width - 1, height - 2); + // Round corners: + painter->setPen(Tools::mixColor(colorGroup.background(), stroke)); + painter->drawPoint(1, 1); + painter->drawPoint(1, height - 2); + painter->drawPoint(width - 2, height - 2); + painter->drawPoint(width - 2, 1); + + painter->setPen(colorGroup.text()); + painter->drawText(DECORATION_MARGIN, DECORATION_MARGIN, width - 2*DECORATION_MARGIN, height - 2*DECORATION_MARGIN, + Qt::AlignAuto | Qt::AlignVCenter | Qt::WordBreak, m_mimeTypes); +} + +bool UnknownContent::loadFromFile(bool /*lazyLoad*/) +{ + DEBUG_WIN << "Loading UnknownContent From " + basket()->folderName() + fileName(); + QFile file(fullPath()); + if (file.open(IO_ReadOnly)) { + QDataStream stream(&file); + QString line; + m_mimeTypes = ""; + // Get the MIME-types names: + do { + if (!stream.atEnd()) { + stream >> line; + if (!line.isEmpty()) { + if (m_mimeTypes.isEmpty()) + m_mimeTypes += line; + else + m_mimeTypes += QString("\n") + line; + } + } + } while (!line.isEmpty() && !stream.atEnd()); + file.close(); + } + + QRect textRect = QFontMetrics(note()->font()).boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop | Qt::WordBreak, m_mimeTypes); + contentChanged(DECORATION_MARGIN + textRect.width() + DECORATION_MARGIN + 1); + return true; +} + +void UnknownContent::addAlternateDragObjects(KMultipleDrag *dragObject) +{ + QFile file(fullPath()); + if (file.open(IO_ReadOnly)) { + QDataStream stream(&file); + // Get the MIME types names: + QValueList mimes; + QString line; + do { + if (!stream.atEnd()) { + stream >> line; + if (!line.isEmpty()) + mimes.append(line); + } + } while (!line.isEmpty() && !stream.atEnd()); + // Add the streams: + Q_UINT64 size; // TODO: It was Q_UINT32 in version 0.5.0 ! + QByteArray *array; + QStoredDrag *storedDrag; + for (uint i = 0; i < mimes.count(); ++i) { + // Get the size: + stream >> size; + // Allocate memory to retreive size bytes and store them: + array = new QByteArray(size); + stream.readRawBytes(array->data(), size); + // Creata and add the QDragObject: + storedDrag = new QStoredDrag(*(mimes.at(i))); + storedDrag->setEncodedData(*array); + dragObject->addDragObject(storedDrag); + delete array; // FIXME: Should we? + } + file.close(); + } +} + +void UnknownContent::exportToHTML(HTMLExporter *exporter, int indent) +{ + QString spaces; + exporter->stream << "
      " << mimeTypes().replace("\n", "\n" + spaces.fill(' ', indent + 1 + 1)) << "
      "; +} + + + + +void NoteFactory__loadNode(const QDomElement &content, const QString &lowerTypeName, Note *parent, bool lazyLoad) +{ + if (lowerTypeName == "text") new TextContent( parent, content.text(), lazyLoad ); + else if (lowerTypeName == "html") new HtmlContent( parent, content.text(), lazyLoad ); + else if (lowerTypeName == "image") new ImageContent( parent, content.text(), lazyLoad ); + else if (lowerTypeName == "animation") new AnimationContent( parent, content.text(), lazyLoad ); + else if (lowerTypeName == "sound") new SoundContent( parent, content.text() ); + else if (lowerTypeName == "file") new FileContent( parent, content.text() ); + else if (lowerTypeName == "link") { + bool autoTitle = content.attribute("title") == content.text(); + bool autoIcon = content.attribute("icon") == NoteFactory::iconForURL(KURL(content.text())); + autoTitle = XMLWork::trueOrFalse( content.attribute("autoTitle"), autoTitle); + autoIcon = XMLWork::trueOrFalse( content.attribute("autoIcon"), autoIcon ); + new LinkContent( parent, KURL(content.text()), content.attribute("title"), content.attribute("icon"), autoTitle, autoIcon ); + } else if (lowerTypeName == "launcher") new LauncherContent( parent, content.text() ); + else if (lowerTypeName == "color") new ColorContent( parent, QColor(content.text()) ); + else if (lowerTypeName == "unknown") new UnknownContent( parent, content.text() ); +} + +#include "notecontent.moc" diff --git a/src/notecontent.h b/src/notecontent.h new file mode 100644 index 0000000..08c3db4 --- /dev/null +++ b/src/notecontent.h @@ -0,0 +1,603 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NOTECONTENT_H +#define NOTECONTENT_H + +#include +#include +#include +#include +#include +#include +#include + +#include "linklabel.h" + +class QDomDocument; +class QDomElement; +class QPainter; +class QWidget; +class QPoint; +class QRect; +class QStringList; +class KMultipleDrag; + +class KFileItem; +namespace KIO { class PreviewJob; } + +class Note; +class Basket; +class FilterData; +class HtmlExporter; + +/** A list of numeric identifier for each note type. + * Declare a varible with the type NoteType::Id and assign a value like NoteType::Text... + * @author S�astien Laot + */ +namespace NoteType +{ + enum Id { Group = 255, Text = 1, Html, Image, Animation, Sound, File, Link, Launcher, Color, Unknown }; // Always positive +} + +/** Abstract base class for every content type of basket note. + * It's a base class to represent those types: Text, Html, Image, Animation, Sound, File, Link, Launcher, Color, Unknown. + * @author S�astien Laot + */ +class NoteContent // TODO: Mark some methods as const! and some (like typeName() as static! +{ + public: + // Constructor and destructor: + NoteContent(Note *parent, const QString &fileName = ""); /// << Constructor. Inherited notes should call it to initialize the parent note. + virtual ~NoteContent() {} /// << Virtual destructor. Reimplement it if you should destroy some data your custom types. + // Simple Abstract Generic Methods: + virtual NoteType::Id type() = 0; /// << @return the internal number that identify that note type. + virtual QString typeName() = 0; /// << @return the translated type name to display in the user interface. + virtual QString lowerTypeName() = 0; /// << @return the type name in lowercase without space, for eg. saving. + virtual QString toText(const QString &cuttedFullPath); /// << @return a plain text equivalent of the content. + virtual QString toHtml(const QString &imageName, const QString &cuttedFullPath) = 0; /// << @return an HTML text equivalent of the content. @param imageName Save image in this Qt ressource. + virtual QPixmap toPixmap() { return QPixmap(); } /// << @return an image equivalent of the content. + virtual void toLink(KURL *url, QString *title, const QString &cuttedFullPath); /// << Set the link to the content. By default, it set them to fullPath() if useFile(). + virtual bool useFile() = 0; /// << @return true if it use a file to store the content. + virtual bool canBeSavedAs() = 0; /// << @return true if the content can be saved as a file by the user. + virtual QString saveAsFilters() = 0; /// << @return the filters for the user to choose a file destination to save the note as. + virtual bool match(const FilterData &data) = 0; /// << @return true if the content match the filter criterias. + // Complexe Abstract Generic Methods: + virtual void exportToHTML(HTMLExporter *exporter, int indent) = 0; /// << Export the note in an HTML file. + virtual QString cssClass() = 0; /// << @return the CSS class of the note when exported to HTML + virtual int setWidthAndGetHeight(int width) = 0; /// << Relayout content with @p width (never less than minWidth()). @return its new height. + virtual void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered) = 0; /// << Paint the content on @p painter, at coordinate (0, 0) and with the size (@p width, @p height). + virtual bool loadFromFile(bool /*lazyLoad*/) { return false; } /// << Load the content from the file. The default implementation does nothing. @see fileName(). + virtual bool finishLazyLoad() { return false; } /// << Load what was not loaded by loadFromFile() if it was lazy-loaded + virtual bool saveToFile() { return false; } /// << Save the content to the file. The default implementation does nothing. @see fileName(). + virtual QString linkAt(const QPoint &/*pos*/) { return ""; } /// << @return the link anchor at position @p pos or "" if there is no link. + virtual void saveToNode(QDomDocument &doc, QDomElement &content); /// << Save the note in the basket XML file. By default it store the filename if a file is used. + virtual void fontChanged() = 0; /// << If your content display textual data, called when the font have changed (from tags or basket font) + virtual void linkLookChanged() {} /// << If your content use LinkDisplay with preview enabled, reload the preview (can have changed size) + virtual QString editToolTipText() = 0; /// << @return "Edit this [text|image|...]" to put in the tooltip for the note's content zone. + virtual void toolTipInfos(QStringList */*keys*/, QStringList */*values*/) {} /// << Get "key: value" couples to put in the tooltip for the note's content zone. + // Custom Zones: /// Implement this if you want to store custom data. + virtual int zoneAt(const QPoint &/*pos*/) { return 0; } /// << If your note-type have custom zones, @return the zone at @p pos or 0 if it's not a custom zone! + virtual QRect zoneRect(int zone, const QPoint &/*pos*/); /// << Idem, @return the rect of the custom zone + virtual QString zoneTip(int /*zone*/) { return ""; } /// << Idem, @return the toolTip of the custom zone + virtual void setCursor(QWidget */*widget*/, int /*zone*/) {} /// << Idem, set the mouse cursor for widget @p widget when it is over zone @p zone! + virtual void setHoveredZone(int /*oldZone*/, int /*newZone*/) {} /// << If your note type need some feedback, you get notified of hovering changes here. + virtual QString statusBarMessage(int /*zone*/) { return ""; } /// << @return the statusBar message to show for zone @p zone, or "" if nothing special have to be said. + // Drag and Drop Content: + virtual void serialize(QDataStream &/*stream*/) {} /// << Serialize the content in a QDragObject. If it consists of a file, it can be serialized for you. + virtual bool shouldSerializeFile() { return useFile(); } /// << @return true if the dragging process should serialize the filename (and move the file if cutting). + virtual void addAlternateDragObjects(KMultipleDrag*/*dragObj*/) {} /// << If you offer more than toText/Html/Image/Link(), this will be called if this is the only selected. + virtual QPixmap feedbackPixmap(int width, int height) = 0; /// << @return the pixmap to put under the cursor while dragging this object. + virtual bool needSpaceForFeedbackPixmap() { return false; } /// << @return true if a space must be inserted before and after the DND feedback pixmap. + // Content Edition: + virtual int xEditorIndent() { return 0; } /// << If the editor should be indented (eg. to not cover an icon), return the number of pixels. + // Open Content or File: + virtual KURL urlToOpen(bool /*with*/); /// << @return the URL to open the note, or an invalid KURL if it's not openable. If @p with if false, it's a normal "Open". If it's true, it's for an "Open with..." action. The default implementation return the fullPath() if the note useFile() and nothing if not. + enum OpenMessage { + OpenOne, /// << Message to send to the statusbar when opening this note. + OpenSeveral, /// << Message to send to the statusbar when opening several notes of this type. + OpenOneWith, /// << Message to send to the statusbar when doing "Open With..." on this note. + OpenSeveralWith, /// << Message to send to the statusbar when doing "Open With..." several notes of this type. + OpenOneWithDialog, /// << Prompt-message of the "Open With..." dialog for this note. + OpenSeveralWithDialog /// << Prompt-message of the "Open With..." dialog for several notes of this type. + }; + virtual QString messageWhenOpenning(OpenMessage /*where*/) { return QString(); } /// << @return the message to display according to @p where or nothing if it can't be done. @see OpenMessage describing the nature of the message that should be returned... The default implementation return an empty string. NOTE: If urlToOpen() is invalid and messageWhenOpenning() is not empty, then the user will be prompted to edit the note (with the message returned by messageWhenOpenning()) for eg. being able to edit URL of a link if it's empty when opening it... + virtual QString customOpenCommand() { return QString(); } /// << Reimplement this if your urlToOpen() should be opened with another application instead of the default KDE one. This choice should be left to the users in the setting (choice to use a custom app or not, and which app). + // Common File Management: /// (and do save changes) and optionnaly hide the toolbar. + virtual void setFileName(const QString &fileName); /// << Set the filename. Reimplement it if you eg. want to update the view when the filename is changed. + bool trySetFileName(const QString &fileName); /// << Set the new filename and return true. Can fail and return false if a file with this fileName already exists. + QString fullPath(); /// << Get the absolute path of the file where this content is stored on disk. + QString fileName() { return m_fileName; } /// << Get the file name where this content is stored (relative to the basket folder). @see fullPath(). + int minWidth() { return m_minWidth; } /// << Get the minimum width for this content. + Note *note() { return m_note; } /// << Get the note managing this content. + Basket *basket(); /// << Get the basket containing the note managing this content. + public: + void setEdited(); /// << Mark the note as edited NOW: change the "last modification time and time" AND save the basket to XML file. + protected: + void contentChanged(int newMinWidth); /// << When the content has changed, inherited classes should call this to specify its new minimum size and trigger a basket relayout. + private: + Note *m_note; + QString m_fileName; + int m_minWidth; + public: + static const int FEEDBACK_DARKING; +}; + +/** Real implementation of plain text notes: + * @author S�astien Laot + */ +class TextContent : public NoteContent +{ + public: + // Constructor and destructor: + TextContent(Note *parent, const QString &fileName, bool lazyLoad = false); + ~TextContent(); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toText(const QString &/*cuttedFullPath*/); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool lazyLoad); + bool finishLazyLoad(); + bool saveToFile(); + QString linkAt(const QPoint &pos); + void fontChanged(); + QString editToolTipText(); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); +// QString customOpenCommand(); + // Content-Specific Methods: + void setText(const QString &text, bool lazyLoad = false); /// << Change the text note-content and relayout the note. + QString text() { return m_text; } /// << @return the text note-content. + protected: + QString m_text; + QSimpleRichText *m_simpleRichText; +}; + +/** Real implementation of rich text (HTML) notes: + * @author S�astien Laot + */ +class HtmlContent : public NoteContent +{ + public: + // Constructor and destructor: + HtmlContent(Note *parent, const QString &fileName, bool lazyLoad = false); + ~HtmlContent(); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toText(const QString &/*cuttedFullPath*/); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool lazyLoad); + bool finishLazyLoad(); + bool saveToFile(); + QString linkAt(const QPoint &pos); + void fontChanged(); + QString editToolTipText(); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); + QString customOpenCommand(); + // Content-Specific Methods: + void setHtml(const QString &html, bool lazyLoad = false); /// << Change the HTML note-content and relayout the note. + QString html() { return m_html; } /// << @return the HTML note-content. + protected: + QString m_html; + QString m_textEquivalent; //OPTIM_FILTER + QSimpleRichText *m_simpleRichText; +}; + +/** Real implementation of image notes: + * @author S�astien Laot + */ +class ImageContent : public NoteContent +{ + public: + // Constructor and destructor: + ImageContent(Note *parent, const QString &fileName, bool lazyLoad = false); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + QPixmap toPixmap(); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool lazyLoad); + bool finishLazyLoad(); + bool saveToFile(); + void fontChanged(); + QString editToolTipText(); + void toolTipInfos(QStringList *keys, QStringList *values); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + bool needSpaceForFeedbackPixmap() { return true; } + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); + QString customOpenCommand(); + // Content-Specific Methods: + void setPixmap(const QPixmap &pixmap); /// << Change the pixmap note-content and relayout the note. + QPixmap pixmap() { return m_pixmap; } /// << @return the pixmap note-content. + protected: + QPixmap m_pixmap; + char *m_format; +}; + +/** Real implementation of animated image (GIF, MNG) notes: + * @author S�astien Laot + */ +class AnimationContent : public QObject, public NoteContent // QObject to be able to receive QMovie signals +{ + Q_OBJECT + public: + // Constructor and destructor: + AnimationContent(Note *parent, const QString &fileName, bool lazyLoad = false); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + QPixmap toPixmap(); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + void fontChanged(); + QString editToolTipText(); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + bool needSpaceForFeedbackPixmap() { return true; } + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool lazyLoad); + bool finishLazyLoad(); + bool saveToFile(); + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); + QString customOpenCommand(); + // Content-Specific Methods: + bool setMovie(const QMovie &movie); /// << Change the movie note-content and relayout the note. + QMovie movie() { return m_movie; } /// << @return the movie note-content. + protected slots: + void movieUpdated(const QRect&); + void movieResized(const QSize&); + void movieStatus(int status); + protected: + QMovie m_movie; + int m_oldStatus; + static int INVALID_STATUS; +}; + +/** Real implementation of file notes: + * @author S�astien Laot + */ +class FileContent : public QObject, public NoteContent +{ + Q_OBJECT + public: + // Constructor and destructor: + FileContent(Note *parent, const QString &fileName); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool /*lazyLoad*/); + void fontChanged(); + void linkLookChanged(); + QString editToolTipText(); + void toolTipInfos(QStringList *keys, QStringList *values); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + // Custom Zones: + int zoneAt(const QPoint &pos); + QRect zoneRect(int zone, const QPoint &/*pos*/); + QString zoneTip(int zone); + void setCursor(QWidget *widget, int zone); + // Content Edition: + int xEditorIndent(); + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); + // Content-Specific Methods: + void setFileName(const QString &fileName); /// << Reimplemented to be able to relayout the note. + virtual LinkLook* linkLook() { return LinkLook::fileLook; } + protected: + LinkDisplay m_linkDisplay; + // File Preview Management: + protected slots: + void newPreview(const KFileItem*, const QPixmap &preview); + void removePreview(const KFileItem*); + void startFetchingUrlPreview(); + protected: + KIO::PreviewJob *m_previewJob; +}; + +/** Real implementation of sound notes: + * @author S�astien Laot + */ +class SoundContent : public FileContent // A sound is a file with just a bit different user interaction +{ + Q_OBJECT + public: + // Constructor and destructor: + SoundContent(Note *parent, const QString &fileName); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + QString editToolTipText(); + // Complexe Generic Methods: + QString cssClass(); + // Custom Zones: + QString zoneTip(int zone); + void setHoveredZone(int oldZone, int newZone); + // Open Content or File: + QString messageWhenOpenning(OpenMessage where); + QString customOpenCommand(); + // Content-Specific Methods: + LinkLook* linkLook() { return LinkLook::soundLook; } +}; + +/** Real implementation of link notes: + * @author S�astien Laot + */ +class LinkContent : public QObject, public NoteContent +{ + Q_OBJECT + public: + // Constructor and destructor: + LinkContent(Note *parent, const KURL &url, const QString &title, const QString &icon, bool autoTitle, bool autoIcon); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toText(const QString &/*cuttedFullPath*/); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + void toLink(KURL *url, QString *title, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + void saveToNode(QDomDocument &doc, QDomElement &content); + void fontChanged(); + void linkLookChanged(); + QString editToolTipText(); + void toolTipInfos(QStringList *keys, QStringList *values); + // Drag and Drop Content: + void serialize(QDataStream &stream); + QPixmap feedbackPixmap(int width, int height); + // Custom Zones: + int zoneAt(const QPoint &pos); + QRect zoneRect(int zone, const QPoint &/*pos*/); + QString zoneTip(int zone); + void setCursor(QWidget *widget, int zone); + QString statusBarMessage(int zone); + // Open Content or File: + KURL urlToOpen(bool /*with*/); + QString messageWhenOpenning(OpenMessage where); + // Content-Specific Methods: + void setLink(const KURL &url, const QString &title, const QString &icon, bool autoTitle, bool autoIcon); /// << Change the link and relayout the note. + KURL url() { return m_url; } /// << @return the URL of the link note-content. + QString title() { return m_title; } /// << @return the displayed title of the link note-content. + QString icon() { return m_icon; } /// << @return the displayed icon of the link note-content. + bool autoTitle() { return m_autoTitle; } /// << @return if the title is auto-computed from the URL. + bool autoIcon() { return m_autoIcon; } /// << @return if the icon is auto-computed from the URL. + protected: + KURL m_url; + QString m_title; + QString m_icon; + bool m_autoTitle; + bool m_autoIcon; + LinkDisplay m_linkDisplay; + // File Preview Management: + protected slots: + void newPreview(const KFileItem*, const QPixmap &preview); + void removePreview(const KFileItem*); + void startFetchingUrlPreview(); + protected: + KIO::PreviewJob *m_previewJob; +}; + +/** Real implementation of launcher notes: + * @author S�astien Laot + */ +class LauncherContent : public NoteContent +{ + public: + // Constructor and destructor: + LauncherContent(Note *parent, const QString &fileName); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + void toLink(KURL *url, QString *title, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool /*lazyLoad*/); + void fontChanged(); + QString editToolTipText(); + void toolTipInfos(QStringList *keys, QStringList *values); + // Drag and Drop Content: + QPixmap feedbackPixmap(int width, int height); + // Custom Zones: + int zoneAt(const QPoint &pos); + QRect zoneRect(int zone, const QPoint &/*pos*/); + QString zoneTip(int zone); + void setCursor(QWidget *widget, int zone); + // Open Content or File: + KURL urlToOpen(bool with); + QString messageWhenOpenning(OpenMessage where); + // Content-Specific Methods: + void setLauncher(const QString &name, const QString &icon, const QString &exec); /// << Change the launcher note-content and relayout the note. Normally called by loadFromFile (no save done). + QString name() { return m_name; } /// << @return the URL of the launcher note-content. + QString icon() { return m_icon; } /// << @return the displayed icon of the launcher note-content. + QString exec() { return m_exec; } /// << @return the execute command line of the launcher note-content. + // TODO: KService *service() ??? And store everything in thta service ? + protected: + QString m_name; // TODO: Store them in linkDisplay to gain place (idem for Link notes) + QString m_icon; + QString m_exec; + LinkDisplay m_linkDisplay; +}; + +/** Real implementation of color notes: + * @author S�astien Laot + */ +class ColorContent : public NoteContent +{ + public: + // Constructor and destructor: + ColorContent(Note *parent, const QColor &color); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toText(const QString &/*cuttedFullPath*/); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + void saveToNode(QDomDocument &doc, QDomElement &content); + void fontChanged(); + QString editToolTipText(); + void toolTipInfos(QStringList *keys, QStringList *values); + // Drag and Drop Content: + void serialize(QDataStream &stream); + QPixmap feedbackPixmap(int width, int height); + bool needSpaceForFeedbackPixmap() { return true; } + void addAlternateDragObjects(KMultipleDrag *dragObject); + // Content-Specific Methods: + void setColor(const QColor &color); /// << Change the color note-content and relayout the note. + QColor color() { return m_color; } /// << @return the color note-content. + protected: + QColor m_color; + static const int RECT_MARGIN; +}; + +/** Real implementation of unknown MIME-types dropped notes: + * @author S�astien Laot + */ +class UnknownContent : public NoteContent +{ + public: + // Constructor and destructor: + UnknownContent(Note *parent, const QString &fileName); + // Simple Generic Methods: + NoteType::Id type(); + QString typeName(); + QString lowerTypeName(); + QString toText(const QString &/*cuttedFullPath*/); + QString toHtml(const QString &imageName, const QString &cuttedFullPath); + void toLink(KURL *url, QString *title, const QString &cuttedFullPath); + bool useFile(); + bool canBeSavedAs(); + QString saveAsFilters(); + bool match(const FilterData &data); + // Complexe Generic Methods: + void exportToHTML(HTMLExporter *exporter, int indent); + QString cssClass(); + int setWidthAndGetHeight(int width); + void paint(QPainter *painter, int width, int height, const QColorGroup &colorGroup, bool isDefaultColor, bool isSelected, bool isHovered); + bool loadFromFile(bool /*lazyLoad*/); + void fontChanged(); + QString editToolTipText(); + // Drag and Drop Content: + bool shouldSerializeFile() { return false; } + void addAlternateDragObjects(KMultipleDrag *dragObject); + QPixmap feedbackPixmap(int width, int height); + bool needSpaceForFeedbackPixmap() { return true; } + // Open Content or File: + KURL urlToOpen(bool /*with*/) { return KURL(); } + // Content-Specific Methods: + QString mimeTypes() { return m_mimeTypes; } /// << @return the list of MIME types this note-content contains. + protected: + QString m_mimeTypes; + static const int DECORATION_MARGIN; +}; + +void NoteFactory__loadNode(const QDomElement &content, const QString &lowerTypeName, Note *parent, bool lazyLoad); + +#endif // NOTECONTENT_H diff --git a/src/notedrag.cpp b/src/notedrag.cpp new file mode 100644 index 0000000..633dec2 --- /dev/null +++ b/src/notedrag.cpp @@ -0,0 +1,593 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "basket.h" +#include "notedrag.h" +#include "notefactory.h" +#include "tools.h" +#include "global.h" + +#include + +/** NoteDrag */ + +const char * NoteDrag::NOTE_MIME_STRING = "application/x-basket-note"; + +void NoteDrag::createAndEmptyCuttingTmpFolder() +{ + Tools::deleteRecursively(Global::tempCutFolder()); + QDir dir; + dir.mkdir(Global::tempCutFolder()); +} + +QDragObject* NoteDrag::dragObject(NoteSelection *noteList, bool cutting, QWidget *source) +{ + if (noteList->count() <= 0) + return 0; + + // The MimeSource: + KMultipleDrag *multipleDrag = new KMultipleDrag(source); + + // Make sure the temporary folder exists and is empty (we delete previously moved file(s) (if exists) + // since we override the content of the clipboard and previous file willn't be accessable anymore): + createAndEmptyCuttingTmpFolder(); + + // The "Native Format" Serialization: + QBuffer buffer; + if (buffer.open(IO_WriteOnly)) { + QDataStream stream(&buffer); + // First append a pointer to the basket: + stream << (Q_UINT64)(noteList->firstStacked()->note->basket()); + // Then a list of pointers to all notes, and parent groups: + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked()) + stream << (Q_UINT64)(node->note); + QValueList groups = noteList->parentGroups(); + for (QValueList::iterator it = groups.begin(); it != groups.end(); ++it) + stream << (Q_UINT64)(*it); + stream << (Q_UINT64)0; + // And finally the notes themselves: + serializeNotes(noteList, stream, cutting); + // Append the object: + buffer.close(); + QStoredDrag *dragObject = new QStoredDrag(NOTE_MIME_STRING, source); + dragObject->setEncodedData(buffer.buffer()); + multipleDrag->addDragObject(dragObject); + } + + // The "Other Flavours" Serialization: + serializeText( noteList, multipleDrag ); + serializeHtml( noteList, multipleDrag ); + serializeImage( noteList, multipleDrag ); + serializeLinks( noteList, multipleDrag, cutting ); + + // The Alternate Flavours: + if (noteList->count() == 1) + noteList->firstStacked()->note->content()->addAlternateDragObjects(multipleDrag); + + // If it is a drag, and not a copy/cut, add the feedback pixmap: + if (source) + setFeedbackPixmap(noteList, multipleDrag); + + return multipleDrag; +} + +void NoteDrag::serializeNotes(NoteSelection *noteList, QDataStream &stream, bool cutting) +{ + for (NoteSelection *node = noteList; node; node = node->next) { + stream << (Q_UINT64)(node->note); + if (node->firstChild) { + stream << (Q_UINT64)(NoteType::Group) << (Q_UINT64)(node->note->groupWidth()) << (Q_UINT64)(node->note->isFolded()); + serializeNotes(node->firstChild, stream, cutting); + } else { + NoteContent *content = node->note->content(); + stream << (Q_UINT64)(content->type()) << (Q_UINT64)(node->note->groupWidth()); + // Serialize file name, and move the file to a temporary place if the note is to be cuttted. + // If note does not have file name, we append empty string to be able to easily decode the notes later: + stream << content->fileName(); + if (content->shouldSerializeFile()) { + if (cutting) { + // Move file in a temporary place: + QString fullPath = Global::tempCutFolder() + Tools::fileNameForNewFile(content->fileName(), Global::tempCutFolder()); + KIO::move(KURL(content->fullPath()), KURL(fullPath), /*showProgressInfo=*/false); + node->fullPath = fullPath; + stream << fullPath; + } else + stream << content->fullPath(); + } else + stream << QString(""); + stream << content->note()->addedDate() << content->note()->lastModificationDate(); + content->serialize(stream); + State::List states = node->note->states(); + for (State::List::Iterator it = states.begin(); it != states.end(); ++it) + stream << (Q_UINT64)(*it); + stream << (Q_UINT64)0; + } + } + stream << (Q_UINT64)0; // Mark the end of the notes in this group/hierarchy. +} + +void NoteDrag::serializeText(NoteSelection *noteList, KMultipleDrag *multipleDrag) +{ + QString textEquivalent; + QString text; + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked()) { + text = node->note->toText(node->fullPath); // note->toText() and not note->content()->toText() because the first one will also export the tags as text. + if (!text.isEmpty()) + textEquivalent += (!textEquivalent.isEmpty() ? "\n" : "") + text; + } + if (!textEquivalent.isEmpty()) + multipleDrag->addDragObject( new QTextDrag(textEquivalent) ); +} + +void NoteDrag::serializeHtml(NoteSelection *noteList, KMultipleDrag *multipleDrag) +{ + QString htmlEquivalent; + QString html; + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked()) { + html = node->note->content()->toHtml("", node->fullPath); + if (!html.isEmpty()) + htmlEquivalent += (!htmlEquivalent.isEmpty() ? "
      \n" : "") + html; + } + if (!htmlEquivalent.isEmpty()) { + // Add HTML flavour: + QTextDrag *htmlDrag = new QTextDrag(htmlEquivalent); + htmlDrag->setSubtype("html"); + multipleDrag->addDragObject(htmlDrag); + // But also QTextEdit flavour, to be able to paste several notes to a text edit: + QByteArray byteArray = ("

      " + htmlEquivalent).local8Bit(); + QStoredDrag *richTextDrag = new QStoredDrag("application/x-qrichtext"); + richTextDrag->setEncodedData(byteArray); + multipleDrag->addDragObject(richTextDrag); + } +} + +void NoteDrag::serializeImage(NoteSelection *noteList, KMultipleDrag *multipleDrag) +{ + QValueList pixmaps; + QPixmap pixmap; + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked()) { + pixmap = node->note->content()->toPixmap(); + if (!pixmap.isNull()) + pixmaps.append(pixmap); + } + if (!pixmaps.isEmpty()) { + QPixmap pixmapEquivalent; + if (pixmaps.count() == 1) + pixmapEquivalent = pixmaps[0]; + else { + // Search the total size: + int height = 0; + int width = 0; + for (QValueList::iterator it = pixmaps.begin(); it != pixmaps.end(); ++it) { + height += (*it).height(); + if ((*it).width() > width) + width = (*it).width(); + } + // Create the image by painting all image into one big image: + pixmapEquivalent.resize(width, height); + pixmapEquivalent.fill(Qt::white); + QPainter painter(&pixmapEquivalent); + height = 0; + for (QValueList::iterator it = pixmaps.begin(); it != pixmaps.end(); ++it) { + painter.drawPixmap(0, height, *it); + height += (*it).height(); + } + } + QImageDrag *imageDrag = new QImageDrag(pixmapEquivalent.convertToImage()); + multipleDrag->addDragObject(imageDrag); + } +} + +void NoteDrag::serializeLinks(NoteSelection *noteList, KMultipleDrag *multipleDrag, bool cutting) +{ + KURL::List urls; + QStringList titles; + KURL url; + QString title; + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked()) { + node->note->content()->toLink(&url, &title, node->fullPath); + if (!url.isEmpty()) { + urls.append(url); + titles.append(title); + } + } + if (!urls.isEmpty()) { + // First, the standard text/uri-list MIME format: +#if KDE_IS_VERSION( 3, 3, 90 ) + KURLDrag *urlsDrag = new KURLDrag(urls); + // ONLY export as text/uri-list, and not as text/plain* as we wil do that better ourself + urlsDrag->setExportAsText(false); + multipleDrag->addDragObject(urlsDrag); +#else + KURLDrag2 *urlsDrag = new KURLDrag2(urls); + QByteArray byteArray = urlsDrag->encodedData2("text/uri-list"); + QStoredDrag *uriListDrag = new QStoredDrag("text/uri-list"); + uriListDrag->setEncodedData(byteArray); + multipleDrag->addDragObject(uriListDrag); + delete urlsDrag; +#endif + // Then, also provide it in the Mozilla proprietary format (that also allow to add titles to URLs): + // A version for Mozilla applications (convert to "theUrl\ntheTitle", into UTF-16): + // FIXME: Does Mozilla support the drag of several URLs at once? + // FIXME: If no, only provide that if theire is only ONE URL. + QString xMozUrl; + for (uint i = 0; i < urls.count(); ++i) + xMozUrl += (xMozUrl.isEmpty() ? "" : "\n") + urls[i].prettyURL() + "\n" + titles[i]; +/* Code for only one: =============== + xMozUrl = note->title() + "\n" + note->url().prettyURL();*/ + QByteArray baMozUrl; + QTextStream stream(baMozUrl, IO_WriteOnly); + stream.setEncoding(QTextStream::RawUnicode); // It's UTF16 (aka UCS2), but with the first two order bytes + stream << xMozUrl; + QStoredDrag *xMozUrlDrag = new QStoredDrag("text/x-moz-url"); + xMozUrlDrag->setEncodedData(baMozUrl); + multipleDrag->addDragObject(xMozUrlDrag); + + if (cutting) { + QByteArray arrayCut(2); + QStoredDrag *storedDragCut = new QStoredDrag("application/x-kde-cutselection"); + arrayCut[0] = '1'; + arrayCut[1] = 0; + storedDragCut->setEncodedData(arrayCut); + multipleDrag->addDragObject(storedDragCut); + } + } +} + +void NoteDrag::setFeedbackPixmap(NoteSelection *noteList, KMultipleDrag *multipleDrag) +{ + QPixmap pixmap = feedbackPixmap(noteList); + if (!pixmap.isNull()) + multipleDrag->setPixmap(pixmap, QPoint(-8, -8)); +} + +QPixmap NoteDrag::feedbackPixmap(NoteSelection *noteList) +{ + if (noteList == 0) + return QPixmap(); + + static const int MARGIN = 2; + static const int SPACING = 1; + + QColor textColor = noteList->firstStacked()->note->basket()->textColor(); + QColor backgroundColor = noteList->firstStacked()->note->basket()->backgroundColor().dark(NoteContent::FEEDBACK_DARKING); + + QValueList pixmaps; + QValueList backgrounds; + QValueList spaces; + QPixmap pixmap; + int height = 0; + int width = 0; + int i = 0; + bool elipsisImage = false; + QColor bgColor; + bool needSpace; + for (NoteSelection *node = noteList->firstStacked(); node; node = node->nextStacked(), ++i) { + if (elipsisImage) { + pixmap = QPixmap(7, 2); + pixmap.fill(backgroundColor); + QPainter painter(&pixmap); + painter.setPen(textColor); + painter.drawPoint(1, 1); + painter.drawPoint(3, 1); + painter.drawPoint(5, 1); + painter.end(); + bgColor = node->note->basket()->backgroundColor(); + needSpace = false; + } else { + pixmap = node->note->content()->feedbackPixmap(/*maxWidth=*/kapp->desktop()->width() / 2, /*maxHeight=*/96); + bgColor = node->note->backgroundColor(); + needSpace = node->note->content()->needSpaceForFeedbackPixmap(); + } + if (!pixmap.isNull()) { + if (pixmap.width() > width) + width = pixmap.width(); + pixmaps.append(pixmap); + backgrounds.append(bgColor); + spaces.append(needSpace); + height += (i > 0 && needSpace ? 1 : 0) + pixmap.height() + SPACING + (needSpace ? 1 : 0); + if (elipsisImage) + break; + if (height > kapp->desktop()->height() / 2) + elipsisImage = true; + } + } + if (!pixmaps.isEmpty()) { + QPixmap result(MARGIN + width + MARGIN, MARGIN + height - SPACING + MARGIN - (spaces.last() ? 1 : 0)); + QPainter painter(&result); + // Draw all the images: + height = MARGIN; + QValueList::iterator it; + QValueList::iterator it2; + QValueList::iterator it3; + int i = 0; + for (it = pixmaps.begin(), it2 = backgrounds.begin(), it3 = spaces.begin(); it != pixmaps.end(); ++it, ++it2, ++it3, ++i) { + if (i != 0 && (*it3)) { + painter.fillRect(MARGIN, height, result.width() - 2 * MARGIN, SPACING, (*it2).dark(NoteContent::FEEDBACK_DARKING)); + ++height; + } + painter.drawPixmap(MARGIN, height, *it); + if ((*it).width() < width) + painter.fillRect(MARGIN + (*it).width(), height, width - (*it).width(), (*it).height(), (*it2).dark(NoteContent::FEEDBACK_DARKING)); + if (*it3) { + painter.fillRect(MARGIN, height + (*it).height(), result.width() - 2 * MARGIN, SPACING, (*it2).dark(NoteContent::FEEDBACK_DARKING)); + ++height; + } + painter.fillRect(MARGIN, height + (*it).height(), result.width() - 2 * MARGIN, SPACING, Tools::mixColor(textColor, backgroundColor)); + height += (*it).height() + SPACING; + } + // Draw the border: + painter.setPen(textColor); + painter.drawLine(0, 0, result.width() - 1, 0); + painter.drawLine(0, 0, 0, result.height() - 1); + painter.drawLine(0, result.height() - 1, result.width() - 1, result.height() - 1); + painter.drawLine(result.width() - 1, 0, result.width() - 1, result.height() - 1); + // Draw the "lightly rounded" border: + painter.setPen(Tools::mixColor(textColor, backgroundColor)); + painter.drawPoint(0, 0); + painter.drawPoint(0, result.height() - 1); + painter.drawPoint(result.width() - 1, result.height() - 1); + painter.drawPoint(result.width() - 1, 0); + // Draw the background in the margin (the inside will be painted above, anyway): + painter.setPen(backgroundColor); + painter.drawLine(1, 1, result.width() - 2, 1); + painter.drawLine(1, 1, 1, result.height() - 2); + painter.drawLine(1, result.height() - 2, result.width() - 2, result.height() - 2); + painter.drawLine(result.width() - 2, 1, result.width() - 2, result.height() - 2); + // And assign the feedback pixmap to the drag object: + //multipleDrag->setPixmap(result, QPoint(-8, -8)); + return result; + } + return QPixmap(); +} + +bool NoteDrag::canDecode(QMimeSource *source) +{ + return source->provides(NOTE_MIME_STRING); +} + +Basket* NoteDrag::basketOf(QMimeSource *source) +{ + QBuffer buffer(source->encodedData(NOTE_MIME_STRING)); + if (buffer.open(IO_ReadOnly)) { + QDataStream stream(&buffer); + // Get the parent basket: + Q_UINT64 basketPointer; + stream >> (Q_UINT64&)basketPointer; + return (Basket*)basketPointer; + } else + return 0; +} + +QValueList NoteDrag::notesOf(QMimeSource *source) +{ + QBuffer buffer(source->encodedData(NOTE_MIME_STRING)); + if (buffer.open(IO_ReadOnly)) { + QDataStream stream(&buffer); + // Get the parent basket: + Q_UINT64 basketPointer; + stream >> (Q_UINT64&)basketPointer; + // Get the note list: + Q_UINT64 notePointer; + QValueList notes; + do { + stream >> notePointer; + if (notePointer != 0) + notes.append((Note*)notePointer); + } while (notePointer); + // Done: + return notes; + } else + return QValueList(); +} + +Note* NoteDrag::decode(QMimeSource *source, Basket *parent, bool moveFiles, bool moveNotes) +{ + QBuffer buffer(source->encodedData(NOTE_MIME_STRING)); + if (buffer.open(IO_ReadOnly)) { + QDataStream stream(&buffer); + // Get the parent basket: + Q_UINT64 basketPointer; + stream >> (Q_UINT64&)basketPointer; + Basket *basket = (Basket*)basketPointer; + // Get the note list: + Q_UINT64 notePointer; + QValueList notes; + do { + stream >> notePointer; + if (notePointer != 0) + notes.append((Note*)notePointer); + } while (notePointer); + // Decode the note hierarchy: + Note *hierarchy = decodeHierarchy(stream, parent, moveFiles, moveNotes, basket); + // In case we moved notes from one basket to another, save the source basket where notes were removed: + basket->filterAgainDelayed(); // Delayed, because if a note is moved to the same basket, the note is not at its + basket->save(); // new position yet, and the call to ensureNoteVisible would make the interface flicker!! + return hierarchy; + } else + return 0; +} + +Note* NoteDrag::decodeHierarchy(QDataStream &stream, Basket *parent, bool moveFiles, bool moveNotes, Basket *originalBasket) +{ + Q_UINT64 notePointer; + Q_UINT64 type; + QString fileName; + QString fullPath; + QDateTime addedDate; + QDateTime lastModificationDate; + + Note *firstNote = 0; // TODO: class NoteTreeChunk + Note *lastInserted = 0; + + do { + stream >> notePointer; + if (notePointer == 0) + return firstNote; + Note *oldNote = (Note*)notePointer; + + Note *note = 0; + Q_UINT64 groupWidth; + stream >> type >> groupWidth; + if (type == NoteType::Group) { + note = new Note(parent); + note->setGroupWidth(groupWidth); + Q_UINT64 isFolded; + stream >> isFolded; + if (isFolded) + note->toggleFolded(/*animate=*/false); + if (moveNotes) { + note->setX(oldNote->x()); // We don't move groups but re-create them (every childs can to not be selected) + note->setY(oldNote->y()); // We just set the position of the copied group so the animation seems as if the group is the same as (or a copy of) the old. + note->setHeight(oldNote->height()); // Idem: the only use of Note::setHeight() + } + Note* childs = decodeHierarchy(stream, parent, moveFiles, moveNotes, originalBasket); + if (childs) { + for (Note *n = childs; n; n = n->next()) + n->setParentNote(note); + note->setFirstChild(childs); + } + } else { + stream >> fileName >> fullPath >> addedDate >> lastModificationDate; + if (moveNotes) { + originalBasket->unplugNote(oldNote); + note = oldNote; + if (note->basket() != parent) { + QString newFileName = NoteFactory::createFileForNewNote(parent, "", fileName); + note->content()->setFileName(newFileName); + KIO::FileCopyJob *copyJob = KIO::file_move(KURL(fullPath), KURL(parent->fullPath() + newFileName), + /*perms=*/-1, /*override=*/true, /*resume=*/false, /*showProgressInfo=*/false); + parent->connect( copyJob, SIGNAL(result(KIO::Job *)), + parent, SLOT(slotCopyingDone2(KIO::Job *)) ); + } + note->setGroupWidth(groupWidth); + note->setParentNote(0); + note->setPrev(0); + note->setNext(0); + note->setParentBasket(parent); + NoteFactory::consumeContent(stream, (NoteType::Id)type); + } else if ( (note = NoteFactory::decodeContent(stream, (NoteType::Id)type, parent)) ) { + note->setGroupWidth(groupWidth); + note->setAddedDate(addedDate); + note->setLastModificationDate(lastModificationDate); + } else if (!fileName.isEmpty()) { + // Here we are CREATING a new EMPTY file, so the name is RESERVED + // (while dropping several files at once a filename cannot be used by two of them). + // Later on, file_copy/file_move will copy/move the file to the new location. + QString newFileName = NoteFactory::createFileForNewNote(parent, "", fileName); + note = NoteFactory::loadFile(newFileName, (NoteType::Id)type, parent); + KIO::FileCopyJob *copyJob; + if (moveFiles) + copyJob = KIO::file_move(KURL(fullPath), KURL(parent->fullPath() + newFileName), + /*perms=*/-1, /*override=*/true, /*resume=*/false, /*showProgressInfo=*/false); + else + copyJob = KIO::file_copy(KURL(fullPath), KURL(parent->fullPath() + newFileName), + /*perms=*/-1, /*override=*/true, /*resume=*/false, /*showProgressInfo=*/false); + parent->connect( copyJob, SIGNAL(result(KIO::Job *)), + parent, SLOT(slotCopyingDone2(KIO::Job *)) ); + note->setGroupWidth(groupWidth); + note->setAddedDate(addedDate); + note->setLastModificationDate(lastModificationDate); + } + } + // Retreive the states (tags) and assign them to the note: + if (note && note->content()) { + Q_UINT64 statePointer; + do { + stream >> statePointer; + if (statePointer) + note->addState((State*)statePointer); + } while (statePointer); + } + // Now that we have created the note, insert it: + if (note) { + if (!firstNote) + firstNote = note; + else { + lastInserted->setNext(note); + note->setPrev(lastInserted); + } + lastInserted = note; + } + } while (true); + + // We've done: return! + return firstNote; +} + +/** ExtendedTextDrag */ + +bool ExtendedTextDrag::decode(const QMimeSource *e, QString &str) +{ + QCString subtype("plain"); + return decode(e, str, subtype); +} + +bool ExtendedTextDrag::decode(const QMimeSource *e, QString &str, QCString &subtype) +{ + // Get the string: + bool ok = QTextDrag::decode(e, str, subtype); + + // Test if it was a UTF-16 string (from eg. Mozilla): + if (str.length() >= 2) { + if ((str[0] == 0xFF && str[1] == 0xFE) || (str[0] == 0xFE && str[1] == 0xFF)) { + QByteArray utf16 = e->encodedData(QString("text/" + subtype).local8Bit()); + str = QTextCodec::codecForName("utf16")->toUnicode(utf16); + return true; + } + } + + // Test if it was empty (sometimes, from GNOME or Mozilla) + if (str.length() == 0 && subtype == "plain") { + if (e->provides("UTF8_STRING")) { + QByteArray utf8 = e->encodedData("UTF8_STRING"); + str = QTextCodec::codecForName("utf8")->toUnicode(utf8); + return true; + } + if (e->provides("text/unicode")) { // FIXME: It's UTF-16 without order bytes!!! + QByteArray utf16 = e->encodedData("text/unicode"); + str = QTextCodec::codecForName("utf16")->toUnicode(utf16); + return true; + } + if (e->provides("TEXT")) { // local encoding + QByteArray text = e->encodedData("TEXT"); + str = QString(text); + return true; + } + if (e->provides("COMPOUND_TEXT")) { // local encoding + QByteArray text = e->encodedData("COMPOUND_TEXT"); + str = QString(text); + return true; + } + } + return ok; +} + +#include "notedrag.moc" diff --git a/src/notedrag.h b/src/notedrag.h new file mode 100644 index 0000000..6dd9c62 --- /dev/null +++ b/src/notedrag.h @@ -0,0 +1,103 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NOTEDRAG_H +#define NOTEDRAG_H + +#include +#include +#include +#include +#include +#include + +class QDataStream; + +class Basket; +class Note; +class NoteSelection; + +/** Dragging/Copying/Cutting Scenario: + * - User select some notes and cut them; + * - NoteDrag::toMultipleDrag() is called with a tree of the selected notes (see Basket::toSelectionTree()): + * - This method create a new KMultipleDrag object, create a stream, + * - And then browse all notes and call the virtual Note::serialize() with the stream as parameter for them to serialize theire content in the "native format". + * - This give the MIME type "application/x-basket-note" that will be used by the application to paste the notes exactly as they were. + * - Then the method try to set alterante formats for the dragged objects: + * - It call successively toText() for each notes and stack up the result so theire is ONE big text flavour to add to the KMultipleDrag object + * - It do the same with toHtml(), toImage() and toLink() to have those flavours as well, if possible... + * - If there is only ONE copied note, addAlternateDragObjects() is called on it, so that Unknown objects can be dragged "as is". + * - It's OK for the flavours. The method finally set the drag feedback pixmap by asking every selected notes to draw the content to a small pixmap. + * - The pixmaps are joined to one big pixmap (but it should not exceed a defined size) and a border is drawn on this image. + * + * Pasting/Dropping Scenario: + * + * @author Sébastien Laoût + */ +class NoteDrag +{ + protected: + static void serializeNotes( NoteSelection *noteList, QDataStream &stream, bool cutting ); + static void serializeText( NoteSelection *noteList, KMultipleDrag *multipleDrag ); + static void serializeHtml( NoteSelection *noteList, KMultipleDrag *multipleDrag ); + static void serializeImage( NoteSelection *noteList, KMultipleDrag *multipleDrag ); + static void serializeLinks( NoteSelection *noteList, KMultipleDrag *multipleDrag, bool cutting ); + static void setFeedbackPixmap( NoteSelection *noteList, KMultipleDrag *multipleDrag ); + static Note* decodeHierarchy(QDataStream &stream, Basket *parent, bool moveFiles, bool moveNotes, Basket *originalBasket); + public: + static QPixmap feedbackPixmap(NoteSelection *noteList); + static QDragObject* dragObject(NoteSelection *noteList, bool cutting, QWidget *source = 0); + static bool canDecode(QMimeSource *source); + static Note* decode(QMimeSource *source, Basket *parent, bool moveFiles, bool moveNotes); + static Basket* basketOf(QMimeSource *source); + static QValueList notesOf(QMimeSource *source); + static void createAndEmptyCuttingTmpFolder(); + + static const char *NOTE_MIME_STRING; +}; + +/** QTextDrag with capabilities to drop GNOME and Mozilla texts + * as well as UTF-16 texts even if it was supposed to be encoded + * with local encoding! + * @author Sébastien Laoût + */ +class ExtendedTextDrag : public QTextDrag +{ + Q_OBJECT + public: + static bool decode(const QMimeSource *e, QString &str); + static bool decode(const QMimeSource *e, QString &str, QCString &subtype); +}; + +// Support KDE 3.3 and older PROTECTED KURLDrag::encodedData()! + +#include +class KURLDrag2 : public KURLDrag +{ + Q_OBJECT + public: + KURLDrag2(const KURL::List &urls) : KURLDrag(urls) {} + QByteArray encodedData2(const char *mime) const + { + return encodedData(mime); + } +}; + +#endif // NOTEDRAG_H diff --git a/src/noteedit.cpp b/src/noteedit.cpp new file mode 100644 index 0000000..b2d25dd --- /dev/null +++ b/src/noteedit.cpp @@ -0,0 +1,916 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "noteedit.h" +#include "notecontent.h" + // Use Tools:: +#include "notefactory.h" +#include "note.h" +#include "basket.h" +#include "settings.h" +#include "tools.h" +#include "variouswidgets.h" +#include "focusedwidgets.h" + +#include + +/** class NoteEditor: */ + +NoteEditor::NoteEditor(NoteContent *noteContent) +{ + m_isEmpty = false; + m_canceled = false; + m_widget = 0; + m_textEdit = 0; + m_lineEdit = 0; + m_noteContent = noteContent; +} + +Note* NoteEditor::note() +{ + return m_noteContent->note(); +} + +NoteEditor* NoteEditor::editNoteContent(NoteContent *noteContent, QWidget *parent) +{ + TextContent *textContent = dynamic_cast(noteContent); + if (textContent) + return new TextEditor(textContent, parent); + + HtmlContent *htmlContent = dynamic_cast(noteContent); + if (htmlContent) + return new HtmlEditor(htmlContent, parent); + + ImageContent *imageContent = dynamic_cast(noteContent); + if (imageContent) + return new ImageEditor(imageContent, parent); + + AnimationContent *animationContent = dynamic_cast(noteContent); + if (animationContent) + return new AnimationEditor(animationContent, parent); + + FileContent *fileContent = dynamic_cast(noteContent); // Same for SoundContent + if (fileContent) + return new FileEditor(fileContent, parent); + + LinkContent *linkContent = dynamic_cast(noteContent); + if (linkContent) + return new LinkEditor(linkContent, parent); + + LauncherContent *launcherContent = dynamic_cast(noteContent); + if (launcherContent) + return new LauncherEditor(launcherContent, parent); + + ColorContent *colorContent = dynamic_cast(noteContent); + if (colorContent) + return new ColorEditor(colorContent, parent); + + UnknownContent *unknownContent = dynamic_cast(noteContent); + if (unknownContent) + return new UnknownEditor(unknownContent, parent); + + return 0; +} + +void NoteEditor::setInlineEditor(QWidget *inlineEditor) +{ + m_widget = inlineEditor; + m_textEdit = 0; + m_lineEdit = 0; + + KTextEdit *textEdit = dynamic_cast(inlineEditor); + if (textEdit) + m_textEdit = textEdit; + else { + QLineEdit *lineEdit = dynamic_cast(inlineEditor); + if (lineEdit) + m_lineEdit = lineEdit; + } +} + +#include + +/** class TextEditor: */ + +TextEditor::TextEditor(TextContent *textContent, QWidget *parent) + : NoteEditor(textContent), m_textContent(textContent) +{ + FocusedTextEdit *textEdit = new FocusedTextEdit(/*disableUpdatesOnKeyPress=*/true, parent); + textEdit->setLineWidth(0); + textEdit->setMidLineWidth(0); + textEdit->setTextFormat(Qt::PlainText); + textEdit->setPaletteBackgroundColor(note()->backgroundColor()); + textEdit->setPaletteForegroundColor(note()->textColor()); + textEdit->setFont(note()->font()); + textEdit->setHScrollBarMode(QScrollView::AlwaysOff); + if (Settings::spellCheckTextNotes()) + textEdit->setCheckSpellingEnabled(true); + textEdit->setText(m_textContent->text()); + textEdit->moveCursor(KTextEdit::MoveEnd, false); // FIXME: Sometimes, the cursor flicker at ends before being positionned where clicked (because kapp->processEvents() I think) + textEdit->verticalScrollBar()->setCursor(Qt::ArrowCursor); + setInlineEditor(textEdit); + connect( textEdit, SIGNAL(escapePressed()), this, SIGNAL(askValidation()) ); + connect( textEdit, SIGNAL(mouseEntered()), this, SIGNAL(mouseEnteredEditorWidget()) ); + + connect( textEdit, SIGNAL(cursorPositionChanged(int, int)), textContent->note()->basket(), SLOT(editorCursorPositionChanged()) ); + // In case it is a very big note, the top is displayed and Enter is pressed: the cursor is on bottom, we should enure it visible: + QTimer::singleShot( 0, textContent->note()->basket(), SLOT(editorCursorPositionChanged()) ); +} + +TextEditor::~TextEditor() +{ + delete widget(); // TODO: delete that in validate(), so we can remove one method +} + +void TextEditor::autoSave(bool toFileToo) +{ + bool autoSpellCheck = true; + if (toFileToo) { + if (Settings::spellCheckTextNotes() != textEdit()->checkSpellingEnabled()) { + Settings::setSpellCheckTextNotes(textEdit()->checkSpellingEnabled()); + Settings::saveConfig(); + } + + autoSpellCheck = textEdit()->checkSpellingEnabled(); + textEdit()->setCheckSpellingEnabled(false); + } + + m_textContent->setText(textEdit()->text()); + + if (toFileToo) { + m_textContent->saveToFile(); + m_textContent->setEdited(); + textEdit()->setCheckSpellingEnabled(autoSpellCheck); + } +} + +void TextEditor::validate() +{ + if (Settings::spellCheckTextNotes() != textEdit()->checkSpellingEnabled()) { + Settings::setSpellCheckTextNotes(textEdit()->checkSpellingEnabled()); + Settings::saveConfig(); + } + + textEdit()->setCheckSpellingEnabled(false); + if (textEdit()->text().isEmpty()) + setEmpty(); + m_textContent->setText(textEdit()->text()); + m_textContent->saveToFile(); + m_textContent->setEdited(); + +// delete widget(); +} + +/** class HtmlEditor: */ + +HtmlEditor::HtmlEditor(HtmlContent *htmlContent, QWidget *parent) + : NoteEditor(htmlContent), m_htmlContent(htmlContent) +{ + FocusedTextEdit *textEdit = new FocusedTextEdit(/*disableUpdatesOnKeyPress=*/true, parent); + textEdit->setLineWidth(0); + textEdit->setMidLineWidth(0); + textEdit->setTextFormat(Qt::RichText); + textEdit->setAutoFormatting(Settings::autoBullet() ? QTextEdit::AutoAll : QTextEdit::AutoNone); + textEdit->setPaletteBackgroundColor(note()->backgroundColor()); + textEdit->setPaletteForegroundColor(note()->textColor()); + textEdit->setFont(note()->font()); + textEdit->setHScrollBarMode(QScrollView::AlwaysOff); + textEdit->setText(m_htmlContent->html()); + textEdit->moveCursor(KTextEdit::MoveEnd, false); + textEdit->verticalScrollBar()->setCursor(Qt::ArrowCursor); + setInlineEditor(textEdit); + + connect( textEdit, SIGNAL(mouseEntered()), this, SIGNAL(mouseEnteredEditorWidget()) ); + connect( textEdit, SIGNAL(escapePressed()), this, SIGNAL(askValidation()) ); + + connect( InlineEditors::instance()->richTextFont, SIGNAL(textChanged(const QString&)), textEdit, SLOT(setFamily(const QString&)) ); + connect( InlineEditors::instance()->richTextFontSize, SIGNAL(sizeChanged(int)), textEdit, SLOT(setPointSize(int)) ); + connect( InlineEditors::instance()->richTextColor, SIGNAL(activated(const QColor&)), textEdit, SLOT(setColor(const QColor&)) ); + + connect( InlineEditors::instance()->richTextFont, SIGNAL(escapePressed()), textEdit, SLOT(setFocus()) ); + connect( InlineEditors::instance()->richTextFont, SIGNAL(returnPressed2()), textEdit, SLOT(setFocus()) ); + connect( InlineEditors::instance()->richTextFont, SIGNAL(activated(int)), textEdit, SLOT(setFocus()) ); + + connect( InlineEditors::instance()->richTextFontSize, SIGNAL(escapePressed()), textEdit, SLOT(setFocus()) ); + connect( InlineEditors::instance()->richTextFontSize, SIGNAL(returnPressed2()), textEdit, SLOT(setFocus()) ); + connect( InlineEditors::instance()->richTextFontSize, SIGNAL(activated(int)), textEdit, SLOT(setFocus()) ); + + connect( InlineEditors::instance()->richTextColor, SIGNAL(escapePressed()), textEdit, SLOT(setFocus()) ); + connect( InlineEditors::instance()->richTextColor, SIGNAL(returnPressed2()), textEdit, SLOT(setFocus()) ); + + connect( textEdit, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(cursorPositionChanged()) ); + connect( textEdit, SIGNAL(clicked(int, int)), this, SLOT(cursorPositionChanged()) ); + connect( textEdit, SIGNAL(currentFontChanged(const QFont&)), this, SLOT(fontChanged(const QFont&)) ); +// connect( textEdit, SIGNAL(currentVerticalAlignmentChanged(VerticalAlignment)), this, SLOT(slotVerticalAlignmentChanged()) ); + + connect( InlineEditors::instance()->richTextBold, SIGNAL(toggled(bool)), textEdit, SLOT(setBold(bool)) ); + connect( InlineEditors::instance()->richTextItalic, SIGNAL(toggled(bool)), textEdit, SLOT(setItalic(bool)) ); + connect( InlineEditors::instance()->richTextUnderline, SIGNAL(toggled(bool)), textEdit, SLOT(setUnderline(bool)) ); + //REMOVE: + //connect( InlineEditors::instance()->richTextBold, SIGNAL(activated()), this, SLOT(setBold()) ); + //connect( InlineEditors::instance()->richTextItalic, SIGNAL(activated()), this, SLOT(setItalic()) ); + //connect( InlineEditors::instance()->richTextUnderline, SIGNAL(activated()), this, SLOT(setUnderline()) ); + connect( InlineEditors::instance()->richTextLeft, SIGNAL(activated()), this, SLOT(setLeft()) ); + connect( InlineEditors::instance()->richTextCenter, SIGNAL(activated()), this, SLOT(setCentered()) ); + connect( InlineEditors::instance()->richTextRight, SIGNAL(activated()), this, SLOT(setRight()) ); + connect( InlineEditors::instance()->richTextJustified, SIGNAL(activated()), this, SLOT(setBlock()) ); + +// InlineEditors::instance()->richTextToolBar()->show(); + cursorPositionChanged(); + fontChanged(textEdit->currentFont()); + //QTimer::singleShot( 0, this, SLOT(cursorPositionChanged()) ); + InlineEditors::instance()->enableRichTextToolBar(); + + connect( InlineEditors::instance()->richTextUndo, SIGNAL(activated()), textEdit, SLOT(undo()) ); + connect( InlineEditors::instance()->richTextRedo, SIGNAL(activated()), textEdit, SLOT(redo()) ); + connect( textEdit, SIGNAL(undoAvailable(bool)), InlineEditors::instance()->richTextUndo, SLOT(setEnabled(bool)) ); + connect( textEdit, SIGNAL(redoAvailable(bool)), InlineEditors::instance()->richTextRedo, SLOT(setEnabled(bool)) ); + connect( textEdit, SIGNAL(textChanged()), this, SLOT(textChanged())); + InlineEditors::instance()->richTextUndo->setEnabled(false); + InlineEditors::instance()->richTextRedo->setEnabled(false); + + connect( textEdit, SIGNAL(cursorPositionChanged(int, int)), htmlContent->note()->basket(), SLOT(editorCursorPositionChanged()) ); + // In case it is a very big note, the top is displayed and Enter is pressed: the cursor is on bottom, we should enure it visible: + QTimer::singleShot( 0, htmlContent->note()->basket(), SLOT(editorCursorPositionChanged()) ); +} + +void HtmlEditor::cursorPositionChanged() +{ + InlineEditors::instance()->richTextFont->setCurrentFont( textEdit()->currentFont().family() ); + if (InlineEditors::instance()->richTextColor->color() != textEdit()->color()) + InlineEditors::instance()->richTextColor->setColor( textEdit()->color() ); + InlineEditors::instance()->richTextBold->setChecked( textEdit()->bold() ); + InlineEditors::instance()->richTextItalic->setChecked( textEdit()->italic() ); + InlineEditors::instance()->richTextUnderline->setChecked( textEdit()->underline() ); + + switch (textEdit()->alignment()) { + default: + case 1/*Qt::AlignLeft*/: InlineEditors::instance()->richTextLeft->setChecked(true); break; + case 4/*Qt::AlignCenter*/: InlineEditors::instance()->richTextCenter->setChecked(true); break; + case 2/*Qt::AlignRight*/: InlineEditors::instance()->richTextRight->setChecked(true); break; + case -8/*Qt::AlignJustify*/: InlineEditors::instance()->richTextJustified->setChecked(true); break; + } +} + +void HtmlEditor::textChanged() +{ + // The following is a workaround for an apparent Qt bug. + // When I start typing in a textEdit, the undo&redo actions are not enabled until I click + // or move the cursor - probably, the signal undoAvailable() is not emitted. + // So, I had to intervene and do that manually. + InlineEditors::instance()->richTextUndo->setEnabled(textEdit()->isUndoAvailable()); + InlineEditors::instance()->richTextRedo->setEnabled(textEdit()->isRedoAvailable()); +} + +void HtmlEditor::fontChanged(const QFont &font) +{ + InlineEditors::instance()->richTextFontSize->setFontSize(font.pointSize()); +} + +/*void HtmlEditor::slotVerichTextSuper->setChecked(true); + InlineEditors::instance()->richTextSub->setChecked(false); + break; + case KTextEdit::AlignSubScript: + InlineEditors::instance()->richTextSuper->setChecked(false); + InlineEditors::instance()->richTextSub->setChecked(true); + break; + default: + InlineEditors::instance()->richTextSuper->setChecked(false); + InlineEditors::instance()->richTextSub->setChecked(false); + } + + NoteHtmlEditor::buttonToggled(int id) : + case 106: + if (isOn && m_toolbar->isButtonOn(107)) + m_toolbar->setButton(107, false); + m_text->setVerticalAlignment(isOn ? KTextEdit::AlignSuperScript : KTextEdit::AlignNormal); + break; + case 107: + if (isOn && m_toolbar->isButtonOn(106)) + m_toolbar->setButton(106, false); + m_text->setVerticalAlignment(isOn ? KTextEdit::AlignSubScript : KTextEdit::AlignNormal); + break; +}*/ + + // REMOVE: These functions are unused - it's now done by direct connection to textEdit + //void HtmlEditor::setBold() { textEdit()->setBold( InlineEditors::instance()->richTextBold->isChecked() ); } + //void HtmlEditor::setItalic() { textEdit()->setItalic( InlineEditors::instance()->richTextItalic->isChecked() ); } + //void HtmlEditor::setUnderline() { textEdit()->setUnderline( InlineEditors::instance()->richTextUnderline->isChecked() ); } +void HtmlEditor::setLeft() { textEdit()->setAlignment(Qt::AlignLeft); } +void HtmlEditor::setCentered() { textEdit()->setAlignment(Qt::AlignCenter); } +void HtmlEditor::setRight() { textEdit()->setAlignment(Qt::AlignRight); } +void HtmlEditor::setBlock() { textEdit()->setAlignment(Qt::AlignJustify); } + +HtmlEditor::~HtmlEditor() +{ + delete widget(); +} + +void HtmlEditor::autoSave(bool toFileToo) +{ + m_htmlContent->setHtml(textEdit()->text()); + if (toFileToo) { + m_htmlContent->saveToFile(); + m_htmlContent->setEdited(); + } +} + +void HtmlEditor::validate() +{ + if (Tools::htmlToText(textEdit()->text()).isEmpty()) + setEmpty(); + m_htmlContent->setHtml(textEdit()->text()); + m_htmlContent->saveToFile(); + m_htmlContent->setEdited(); + + disconnect(); + widget()->disconnect(); + if (InlineEditors::instance()) + { + InlineEditors::instance()->disableRichTextToolBar(); +// if (InlineEditors::instance()->richTextToolBar()) +// InlineEditors::instance()->richTextToolBar()->hide(); + } + delete widget(); + setInlineEditor(0); +} + +/** class ImageEditor: */ + +ImageEditor::ImageEditor(ImageContent *imageContent, QWidget *parent) + : NoteEditor(imageContent) +{ + int choice = KMessageBox::questionYesNo(parent, i18n( + "Images can not be edited here at the moment (the next version of BasKet Note Pads will include an image editor).\n" + "Do you want to open it with an application that understand it?"), + i18n("Edit Image Note"), + KStdGuiItem::open(), + KStdGuiItem::cancel()); + + if (choice == KMessageBox::Yes) + note()->basket()->noteOpen(note()); +} + +/** class AnimationEditor: */ + +AnimationEditor::AnimationEditor(AnimationContent *animationContent, QWidget *parent) + : NoteEditor(animationContent) +{ + int choice = KMessageBox::questionYesNo(parent, i18n( + "This animated image can not be edited here.\n" + "Do you want to open it with an application that understands it?"), + i18n("Edit Animation Note"), + KStdGuiItem::open(), + KStdGuiItem::cancel()); + + if (choice == KMessageBox::Yes) + note()->basket()->noteOpen(note()); +} + +/** class FileEditor: */ + +FileEditor::FileEditor(FileContent *fileContent, QWidget *parent) + : NoteEditor(fileContent), m_fileContent(fileContent) +{ + FocusedLineEdit *lineEdit = new FocusedLineEdit(parent); + lineEdit->setLineWidth(0); + lineEdit->setMidLineWidth(0); + lineEdit->setPaletteBackgroundColor(note()->backgroundColor()); + lineEdit->setPaletteForegroundColor(note()->textColor()); + lineEdit->setFont(note()->font()); + lineEdit->setText(m_fileContent->fileName()); + lineEdit->selectAll(); + setInlineEditor(lineEdit); + connect( lineEdit, SIGNAL(returnPressed()), this, SIGNAL(askValidation()) ); + connect( lineEdit, SIGNAL(escapePressed()), this, SIGNAL(askValidation()) ); + connect( lineEdit, SIGNAL(mouseEntered()), this, SIGNAL(mouseEnteredEditorWidget()) ); +} + +FileEditor::~FileEditor() +{ + delete widget(); +} + +void FileEditor::autoSave(bool toFileToo) +{ + // FIXME: How to detect cancel? + if (toFileToo && !lineEdit()->text().isEmpty() && m_fileContent->trySetFileName(lineEdit()->text())) { + m_fileContent->setFileName(lineEdit()->text()); + m_fileContent->setEdited(); + } +} + +void FileEditor::validate() +{ + autoSave(/*toFileToo=*/true); +} + +/** class LinkEditor: */ + +LinkEditor::LinkEditor(LinkContent *linkContent, QWidget *parent) + : NoteEditor(linkContent) +{ + LinkEditDialog dialog(linkContent, parent); + if (dialog.exec() == QDialog::Rejected) + cancel(); + if (linkContent->url().isEmpty() && linkContent->title().isEmpty()) + setEmpty(); +} + +/** class LauncherEditor: */ + +LauncherEditor::LauncherEditor(LauncherContent *launcherContent, QWidget *parent) + : NoteEditor(launcherContent) +{ + LauncherEditDialog dialog(launcherContent, parent); + if (dialog.exec() == QDialog::Rejected) + cancel(); + if (launcherContent->name().isEmpty() && launcherContent->exec().isEmpty()) + setEmpty(); +} + +/** class ColorEditor: */ + +ColorEditor::ColorEditor(ColorContent *colorContent, QWidget *parent) + : NoteEditor(colorContent) +{ + KColorDialog dialog(parent, /*name=*/"EditColor", /*modal=*/true); + dialog.setColor(colorContent->color()); + dialog.setCaption(i18n("Edit Color Note")); + if (dialog.exec() == QDialog::Accepted) { + if (dialog.color() != colorContent->color()) { + colorContent->setColor(dialog.color()); + colorContent->setEdited(); + } + } else + cancel(); + + /* This code don't allow to set a caption to the dialog: + QColor color = colorContent()->color(); + if (KColorDialog::getColor(color, parent) == QDialog::Accepted && color != m_color) { + colorContent()->setColor(color); + setEdited(); + }*/ +} + +/** class UnknownEditor: */ + +UnknownEditor::UnknownEditor(UnknownContent *unknownContent, QWidget *parent) + : NoteEditor(unknownContent) +{ + KMessageBox::information(parent, i18n( + "The type of this note is unknown and can not be edited here.\n" + "You however can drag or copy the note into an application that understands it."), + i18n("Edit Unknown Note")); +} + +/*********************************************************************/ + + +/** class DebuggedLineEdit: */ + +DebuggedLineEdit::DebuggedLineEdit(const QString &text, QWidget *parent) + : QLineEdit(text, parent) +{ +} + +DebuggedLineEdit::~DebuggedLineEdit() +{ +} + +void DebuggedLineEdit::keyPressEvent(QKeyEvent *event) +{ + QString oldText = text(); + QLineEdit::keyPressEvent(event); + if (oldText != text()) + emit textChanged(text()); +} + + +/** class LinkEditDialog: */ + +LinkEditDialog::LinkEditDialog(LinkContent *contentNote, QWidget *parent/*, QKeyEvent *ke*/) + : KDialogBase(KDialogBase::Plain, i18n("Edit Link Note"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"EditLink", /*modal=*/true, /*separator=*/true), + m_noteContent(contentNote) +{ + QWidget *page = plainPage(); + QGridLayout *layout = new QGridLayout(page, /*nRows=*/4, /*nCols=*/2, /*margin=*/0, spacingHint()); + + m_url = new KURLRequester(m_noteContent->url().url(), page); + + QWidget *wid1 = new QWidget(page); + QHBoxLayout *titleLay = new QHBoxLayout(wid1, /*margin=*/0, spacingHint()); + m_title = new DebuggedLineEdit(m_noteContent->title(), wid1); + m_autoTitle = new QPushButton(i18n("Auto"), wid1); + m_autoTitle->setToggleButton(true); + m_autoTitle->setOn(m_noteContent->autoTitle()); + titleLay->addWidget(m_title); + titleLay->addWidget(m_autoTitle); + + QWidget *wid = new QWidget(page); + QHBoxLayout *hLay = new QHBoxLayout(wid, /*margin=*/0, spacingHint()); + m_icon = new KIconButton(wid); + QLabel *label3 = new QLabel(m_icon, i18n("&Icon:"), page); + KURL filteredURL = NoteFactory::filteredURL(KURL(m_url->lineEdit()->text()));//KURIFilter::self()->filteredURI(KURL(m_url->lineEdit()->text())); + m_icon->setIconType(KIcon::NoGroup, KIcon::MimeType); + m_icon->setIconSize(LinkLook::lookForURL(filteredURL)->iconSize()); + m_autoIcon = new QPushButton(i18n("Auto"), wid); // Create before to know size here: + /* Icon button: */ + m_icon->setIcon(m_noteContent->icon()); + int minSize = m_autoIcon->sizeHint().height(); + // Make the icon button at least the same heigh than the other buttons for a better alignment (nicer to the eyes): + if (m_icon->sizeHint().height() < minSize) + m_icon->setFixedSize(minSize, minSize); + else + m_icon->setFixedSize(m_icon->sizeHint().height(), m_icon->sizeHint().height()); // Make it square + /* Auto button: */ + m_autoIcon->setToggleButton(true); + m_autoIcon->setOn(m_noteContent->autoIcon()); + hLay->addWidget(m_icon); + hLay->addWidget(m_autoIcon); + hLay->addStretch(); + + m_url->lineEdit()->setMinimumWidth(m_url->lineEdit()->fontMetrics().maxWidth()*20); + m_title->setMinimumWidth(m_title->fontMetrics().maxWidth()*20); + + //m_url->setShowLocalProtocol(true); + QLabel *label1 = new QLabel(m_url, i18n("Ta&rget:"), page); + QLabel *label2 = new QLabel(m_title, i18n("&Title:"), page); + layout->addWidget(label1, 0, 0, Qt::AlignVCenter); + layout->addWidget(label2, 1, 0, Qt::AlignVCenter); + layout->addWidget(label3, 2, 0, Qt::AlignVCenter); + layout->addWidget(m_url, 0, 1, Qt::AlignVCenter); + layout->addWidget(wid1, 1, 1, Qt::AlignVCenter); + layout->addWidget(wid, 2, 1, Qt::AlignVCenter); + + m_isAutoModified = false; + connect( m_url, SIGNAL(textChanged(const QString&)), this, SLOT(urlChanged(const QString&)) ); + connect( m_title, SIGNAL(textChanged(const QString&)), this, SLOT(doNotAutoTitle(const QString&)) ); + connect( m_icon, SIGNAL(iconChanged(QString)) , this, SLOT(doNotAutoIcon(QString)) ); + connect( m_autoTitle, SIGNAL(clicked()), this, SLOT(guessTitle()) ); + connect( m_autoIcon, SIGNAL(clicked()), this, SLOT(guessIcon()) ); + + QWidget *stretchWidget = new QWidget(page); + stretchWidget->setSizePolicy(QSizePolicy(/*hor=*/QSizePolicy::Fixed, /*ver=*/QSizePolicy::Expanding, /*hStretch=*/1, /*vStretch=*/255)); // Make it fill ALL vertical space + layout->addWidget(stretchWidget, 3, 1, Qt::AlignVCenter); + + + urlChanged(""); + +// if (ke) +// kapp->postEvent(m_url->lineEdit(), ke); +} + +LinkEditDialog::~LinkEditDialog() +{ +} + +void LinkEditDialog::polish() +{ + KDialogBase::polish(); + if (m_url->lineEdit()->text().isEmpty()) { + m_url->setFocus(); + m_url->lineEdit()->end(false); + } else { + m_title->setFocus(); + m_title->end(false); + } +} + + +void LinkEditDialog::urlChanged(const QString&) +{ + m_isAutoModified = true; +// guessTitle(); +// guessIcon(); + // Optimization (filter only once): + KURL filteredURL = NoteFactory::filteredURL(KURL(m_url->url()));//KURIFilter::self()->filteredURI(KURL(m_url->url())); + if (m_autoIcon->isOn()) + m_icon->setIcon(NoteFactory::iconForURL(filteredURL)); + if (m_autoTitle->isOn()) { + m_title->setText(NoteFactory::titleForURL(filteredURL)); + m_autoTitle->setOn(true); // Because the setText() will disable it! + } +} + +void LinkEditDialog::doNotAutoTitle(const QString&) +{ + if (m_isAutoModified) + m_isAutoModified = false; + else + m_autoTitle->setOn(false); +} + +void LinkEditDialog::doNotAutoIcon(QString) +{ + m_autoIcon->setOn(false); +} + +void LinkEditDialog::guessIcon() +{ + if (m_autoIcon->isOn()) { + KURL filteredURL = NoteFactory::filteredURL(KURL(m_url->url()));//KURIFilter::self()->filteredURI(KURL(m_url->url())); + m_icon->setIcon(NoteFactory::iconForURL(filteredURL)); + } +} + +void LinkEditDialog::guessTitle() +{ + if (m_autoTitle->isOn()) { + KURL filteredURL = NoteFactory::filteredURL(KURL(m_url->url()));//KURIFilter::self()->filteredURI(KURL(m_url->url())); + m_title->setText(NoteFactory::titleForURL(filteredURL)); + m_autoTitle->setOn(true); // Because the setText() will disable it! + } +} + +void LinkEditDialog::slotOk() +{ + KURL filteredURL = NoteFactory::filteredURL(KURL(m_url->url()));//KURIFilter::self()->filteredURI(KURL(m_url->url())); + m_noteContent->setLink(filteredURL, m_title->text(), m_icon->icon(), m_autoTitle->isOn(), m_autoIcon->isOn()); + m_noteContent->setEdited(); + + /* Change icon size if link look have changed */ + LinkLook *linkLook = LinkLook::lookForURL(filteredURL); + QString icon = m_icon->icon(); // When we change size, icon isn't changed and keep it's old size + m_icon->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); // Reset size policy + m_icon->setIconSize(linkLook->iconSize()); // So I store it's name and reload it after size change ! + m_icon->setIcon(icon); + int minSize = m_autoIcon->sizeHint().height(); + // Make the icon button at least the same heigh than the other buttons for a better alignment (nicer to the eyes): + if (m_icon->sizeHint().height() < minSize) + m_icon->setFixedSize(minSize, minSize); + else + m_icon->setFixedSize(m_icon->sizeHint().height(), m_icon->sizeHint().height()); // Make it square + + KDialogBase::slotOk(); +} + +/** class LauncherEditDialog: */ + +LauncherEditDialog::LauncherEditDialog(LauncherContent *contentNote, QWidget *parent) + : KDialogBase(KDialogBase::Plain, i18n("Edit Launcher Note"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"EditLauncher", /*modal=*/true, /*separator=*/true), + m_noteContent(contentNote) +{ + QWidget *page = plainPage(); + QGridLayout *layout = new QGridLayout(page, /*nRows=*/4, /*nCols=*/2, /*margin=*/0, spacingHint()); + + KService service(contentNote->fullPath()); + + m_command = new RunCommandRequester(service.exec(), i18n("Choose a command to run:"), page); + m_name = new QLineEdit(service.name(), page); + + QWidget *wid = new QWidget(page); + QHBoxLayout *hLay = new QHBoxLayout(wid, /*margin=*/0, spacingHint()); + m_icon = new KIconButton(wid); + QLabel *label = new QLabel(m_icon, i18n("&Icon:"), page); + m_icon->setIconType(KIcon::NoGroup, KIcon::Application); + m_icon->setIconSize(LinkLook::launcherLook->iconSize()); + QPushButton *guessButton = new QPushButton(i18n("&Guess"), wid); + /* Icon button: */ + m_icon->setIcon(service.icon()); + int minSize = guessButton->sizeHint().height(); + // Make the icon button at least the same heigh than the other buttons for a better alignment (nicer to the eyes): + if (m_icon->sizeHint().height() < minSize) + m_icon->setFixedSize(minSize, minSize); + else + m_icon->setFixedSize(m_icon->sizeHint().height(), m_icon->sizeHint().height()); // Make it square + /* Guess button: */ + hLay->addWidget(m_icon); + hLay->addWidget(guessButton); + hLay->addStretch(); + + m_command->lineEdit()->setMinimumWidth(m_command->lineEdit()->fontMetrics().maxWidth()*20); + + QLabel *label1 = new QLabel(m_command->lineEdit(), i18n("Comman&d:"), page); + QLabel *label2 = new QLabel(m_name, i18n("&Name:"), page); + layout->addWidget(label1, 0, 0, Qt::AlignVCenter); + layout->addWidget(label2, 1, 0, Qt::AlignVCenter); + layout->addWidget(label, 2, 0, Qt::AlignVCenter); + layout->addWidget(m_command, 0, 1, Qt::AlignVCenter); + layout->addWidget(m_name, 1, 1, Qt::AlignVCenter); + layout->addWidget(wid, 2, 1, Qt::AlignVCenter); + + QWidget *stretchWidget = new QWidget(page); + stretchWidget->setSizePolicy(QSizePolicy(/*hor=*/QSizePolicy::Fixed, /*ver=*/QSizePolicy::Expanding, /*hStretch=*/1, /*vStretch=*/255)); // Make it fill ALL vertical space + layout->addWidget(stretchWidget, 3, 1, Qt::AlignVCenter); + + connect( guessButton, SIGNAL(clicked()), this, SLOT(guessIcon()) ); +} + +LauncherEditDialog::~LauncherEditDialog() +{ +} + +void LauncherEditDialog::polish() +{ + KDialogBase::polish(); + if (m_command->runCommand().isEmpty()) { + m_command->lineEdit()->setFocus(); + m_command->lineEdit()->end(false); + } else { + m_name->setFocus(); + m_name->end(false); + } +} + +void LauncherEditDialog::slotOk() +{ + // TODO: Remember if a string has been modified AND IS DIFFERENT FROM THE ORIGINAL! + + KConfig conf(m_noteContent->fullPath()); + conf.setGroup("Desktop Entry"); + conf.writeEntry("Exec", m_command->runCommand()); + conf.writeEntry("Name", m_name->text()); + conf.writeEntry("Icon", m_icon->icon()); + + // Just for faster feedback: conf object will save to disk (and then m_note->loadContent() called) + m_noteContent->setLauncher(m_name->text(), m_icon->icon(), m_command->runCommand()); + m_noteContent->setEdited(); + + KDialogBase::slotOk(); +} + +void LauncherEditDialog::guessIcon() +{ + m_icon->setIcon( NoteFactory::iconForCommand(m_command->runCommand()) ); +} + +/** class InlineEditors: */ + +InlineEditors::InlineEditors() +{ +} + +InlineEditors::~InlineEditors() +{ +} + +InlineEditors* InlineEditors::instance() +{ + static InlineEditors *instance = 0; + if (!instance) + instance = new InlineEditors(); + return instance; +} + +void InlineEditors::initToolBars(KActionCollection *actionCollection) +{ + QFont defaultFont; + QColor textColor = (Global::bnpView && Global::bnpView->currentBasket() ? + Global::bnpView->currentBasket()->textColor() : + KGlobalSettings::textColor()); + + // Init the RichTextEditor Toolbar: + richTextFont = new FocusedFontCombo(Global::mainWindow()); + richTextFont->setFixedWidth(richTextFont->sizeHint().width() * 2 / 3); + richTextFont->setCurrentFont(defaultFont.family()); + KWidgetAction *action = new KWidgetAction(richTextFont, i18n("Font"), Qt::Key_F6, + /*receiver=*/0, /*slot=*/"", actionCollection, "richtext_font"); + + richTextFontSize = new FontSizeCombo(/*rw=*/true, Global::mainWindow()); + richTextFontSize->setFontSize(defaultFont.pointSize()); + action = new KWidgetAction(richTextFontSize, i18n("Font Size"), Qt::Key_F7, + /*receiver=*/0, /*slot=*/"", actionCollection, "richtext_font_size"); + + richTextColor = new FocusedColorCombo(Global::mainWindow()); + richTextColor->setFixedWidth(richTextColor->sizeHint().height() * 2); + richTextColor->setColor(textColor); + action = new KWidgetAction(richTextColor, i18n("Color"), KShortcut(), 0, SLOT(), actionCollection, "richtext_color"); + + richTextBold = new KToggleAction( i18n("Bold"), "text_bold", "Ctrl+B", actionCollection, "richtext_bold" ); + richTextItalic = new KToggleAction( i18n("Italic"), "text_italic", "Ctrl+I", actionCollection, "richtext_italic" ); + richTextUnderline = new KToggleAction( i18n("Underline"), "text_under", "Ctrl+U", actionCollection, "richtext_underline" ); + +// richTextSuper = new KToggleAction( i18n("Superscript"), "text_super", "", actionCollection, "richtext_super" ); +// richTextSub = new KToggleAction( i18n("Subscript"), "text_sub", "", actionCollection, "richtext_sub" ); + + richTextLeft = new KToggleAction( i18n("Align Left"), "text_left", "", actionCollection, "richtext_left" ); + richTextCenter = new KToggleAction( i18n("Centered"), "text_center", "", actionCollection, "richtext_center" ); + richTextRight = new KToggleAction( i18n("Align Right"), "text_right", "", actionCollection, "richtext_right" ); + richTextJustified = new KToggleAction( i18n("Justified"), "text_block", "", actionCollection, "richtext_block" ); + + richTextLeft->setExclusiveGroup("rt_justify"); + richTextCenter->setExclusiveGroup("rt_justify"); + richTextRight->setExclusiveGroup("rt_justify"); + richTextJustified->setExclusiveGroup("rt_justify"); + + richTextUndo = new KAction( i18n("Undo"), "undo", "", actionCollection, "richtext_undo"); + richTextRedo = new KAction( i18n("Redo"), "redo", "", actionCollection, "richtext_redo"); + + disableRichTextToolBar(); +} + +KToolBar* InlineEditors::richTextToolBar() +{ + if (Global::mainWindow()) { + Global::mainWindow()->toolBar(); // Make sure we create the main toolbar FIRST, so it will be on top of the edit toolbar! + return Global::mainWindow()->toolBar("richTextEditToolBar"); + } else + return 0; +} + +void InlineEditors::enableRichTextToolBar() +{ + richTextFont->setEnabled(true); + richTextFontSize->setEnabled(true); + richTextColor->setEnabled(true); + richTextBold->setEnabled(true); + richTextItalic->setEnabled(true); + richTextUnderline->setEnabled(true); + richTextLeft->setEnabled(true); + richTextCenter->setEnabled(true); + richTextRight->setEnabled(true); + richTextJustified->setEnabled(true); + richTextUndo->setEnabled(true); + richTextRedo->setEnabled(true); +} + +void InlineEditors::disableRichTextToolBar() +{ + disconnect(richTextFont); + disconnect(richTextFontSize); + disconnect(richTextColor); + disconnect(richTextBold); + disconnect(richTextItalic); + disconnect(richTextUnderline); + disconnect(richTextLeft); + disconnect(richTextCenter); + disconnect(richTextRight); + disconnect(richTextJustified); + disconnect(richTextUndo); + disconnect(richTextRedo); + + richTextFont->setEnabled(false); + richTextFontSize->setEnabled(false); + richTextColor->setEnabled(false); + richTextBold->setEnabled(false); + richTextItalic->setEnabled(false); + richTextUnderline->setEnabled(false); + richTextLeft->setEnabled(false); + richTextCenter->setEnabled(false); + richTextRight->setEnabled(false); + richTextJustified->setEnabled(false); + richTextUndo->setEnabled(false); + richTextRedo->setEnabled(false); + + // Return to a "proper" state: + QFont defaultFont; + QColor textColor = (Global::bnpView && Global::bnpView->currentBasket() ? + Global::bnpView->currentBasket()->textColor() : + KGlobalSettings::textColor()); + richTextFont->setCurrentFont(defaultFont.family()); + richTextFontSize->setFontSize(defaultFont.pointSize()); + richTextColor->setColor(textColor); + richTextBold->setChecked(false); + richTextItalic->setChecked(false); + richTextUnderline->setChecked(false); + richTextLeft->setChecked(false); + richTextCenter->setChecked(false); + richTextRight->setChecked(false); + richTextJustified->setChecked(false); +} + +#include "noteedit.moc" diff --git a/src/noteedit.h b/src/noteedit.h new file mode 100644 index 0000000..1866034 --- /dev/null +++ b/src/noteedit.h @@ -0,0 +1,289 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NOTEEDIT_H +#define NOTEEDIT_H + +#include +#include +#include + +class QWidget; +//class QLineEdit; +class QPushButton; +class KIconButton; +class KURLRequester; +class KTextEdit; +class KMainWindow; +class KTooolBar; +class KToggleAction; + +class FontSizeCombo; + +class Note; +class RunCommandRequester; +class FocusedFontCombo; +class FocusedColorCombo; + +#include "notecontent.h" + +/** The base class for every note editors. + * Scenario: + * The Basket class calls NoteEditor::editNoteContent() with the NoteContent to edit. + * This method create the good child NoteEditor depending + * on the note content type and return it to the Basket. + * This custom NoteEditor have two choices regarding what to do in its constructor: + * - Display a dialog and then call cancel() if the user canceled the dialog; + * - Create an inline editor and call setInlineEditor() with that editor as parameter. + * When the user exit the edition, validate() is called by the Basket. + * You should then call setEmpty() is the user cleared the content. + * The custom editor SHOULD call the NoteEditor constructor. + * If the user cleared the content OR if the user canceled the dialog whereas he/she + * JUST ADDED the note, then the note will be deleted by the Basket. + */ +class NoteEditor : public QObject +{ + Q_OBJECT + public: + NoteEditor(NoteContent *noteContent); + bool isEmpty() { return m_isEmpty; } + bool canceled() { return m_canceled; } + bool isInline() { return m_widget != 0; } + QWidget* widget() { return m_widget; } + KTextEdit* textEdit() { return m_textEdit; } + QLineEdit* lineEdit() { return m_lineEdit; } + + private: + bool m_isEmpty; + bool m_canceled; + QWidget *m_widget; + KTextEdit *m_textEdit; + QLineEdit *m_lineEdit; + NoteContent *m_noteContent; + + public: + NoteContent* noteContent() { return m_noteContent; } + Note* note(); + protected: + void setEmpty() { m_isEmpty = true; } + void cancel() { m_canceled = true; } + void setInlineEditor(QWidget *inlineEditor); + public: + virtual void validate() {} + virtual void autoSave(bool /*toFileToo*/) {} // Same as validate(), but does not precede editor close and is triggered either while the editor widget changed size or after 3 seconds of inactivity. + + signals: + void askValidation(); + void mouseEnteredEditorWidget(); + + public: + static NoteEditor* editNoteContent(NoteContent *noteContent, QWidget *parent); +}; + +class TextEditor : public NoteEditor +{ + Q_OBJECT + public: + TextEditor(TextContent *textContent, QWidget *parent); + ~TextEditor(); + void validate(); + void autoSave(bool toFileToo); + protected: + TextContent *m_textContent; +}; + +class HtmlEditor : public NoteEditor +{ + Q_OBJECT + public: + HtmlEditor(HtmlContent *htmlContent, QWidget *parent); + ~HtmlEditor(); + void validate(); + void autoSave(bool toFileToo); + protected: + HtmlContent *m_htmlContent; + public slots: + void cursorPositionChanged(); + void textChanged(); + void fontChanged(const QFont &font); + protected slots: +// void slotVerticalAlignmentChanged(QTextEdit::VerticalAlignment align); + // void setBold(); + // void setItalic(); + // void setUnderline(); + void setLeft(); + void setCentered(); + void setRight(); + void setBlock(); +}; + +class ImageEditor : public NoteEditor +{ + Q_OBJECT + public: + ImageEditor(ImageContent *imageContent, QWidget *parent); +}; + +class AnimationEditor : public NoteEditor +{ + Q_OBJECT + public: + AnimationEditor(AnimationContent *animationContent, QWidget *parent); +}; + +class FileEditor : public NoteEditor +{ + Q_OBJECT + public: + FileEditor(FileContent *fileContent, QWidget *parent); + ~FileEditor(); + void validate(); + void autoSave(bool toFileToo); + protected: + FileContent *m_fileContent; +}; + +class LinkEditor : public NoteEditor +{ + Q_OBJECT + public: + LinkEditor(LinkContent *linkContent, QWidget *parent); +}; + +class LauncherEditor : public NoteEditor +{ + Q_OBJECT + public: + LauncherEditor(LauncherContent *launcherContent, QWidget *parent); +}; + +class ColorEditor : public NoteEditor +{ + Q_OBJECT + public: + ColorEditor(ColorContent *colorContent, QWidget *parent); +}; + +class UnknownEditor : public NoteEditor +{ + Q_OBJECT + public: + UnknownEditor(UnknownContent *unknownContent, QWidget *parent); +}; + +/** QLineEdit behavior: + * Create a new QLineEdit with a text, then the user select a part of it and press ONE letter key. + * The signal textChanged() is not emitted! + * This class correct that! + */ +class DebuggedLineEdit : public QLineEdit +{ + Q_OBJECT + public: + DebuggedLineEdit(const QString &text, QWidget *parent = 0); + ~DebuggedLineEdit(); + protected: + void keyPressEvent(QKeyEvent *event); +}; + +/** The dialog to edit Link Note content. + * @author S�astien Laot + */ +class LinkEditDialog : public KDialogBase +{ + Q_OBJECT + public: + LinkEditDialog(LinkContent *contentNote, QWidget *parent = 0); + ~LinkEditDialog(); + void polish(); + protected slots: + void slotOk(); + void urlChanged(const QString&); + void doNotAutoTitle(const QString&); + void doNotAutoIcon(QString); + void guessTitle(); + void guessIcon(); + private: + LinkContent *m_noteContent; + bool m_isAutoModified; + KURLRequester *m_url; + QLineEdit *m_title; + KIconButton *m_icon; + QPushButton *m_autoTitle; + QPushButton *m_autoIcon; +}; + + +/** The dialog to edit Launcher Note content. + * @author S�astien Laot + */ +class LauncherEditDialog : public KDialogBase +{ + Q_OBJECT + public: + LauncherEditDialog(LauncherContent *contentNote, QWidget *parent = 0); + ~LauncherEditDialog(); + void polish(); + protected slots: + void slotOk(); + void guessIcon(); + private: + LauncherContent *m_noteContent; + RunCommandRequester *m_command; + QLineEdit *m_name; + KIconButton *m_icon; +}; + +/** This class manage toolbars for the inline editors. + * The toolbars should be created once at the application startup, + * then KXMLGUI can manage them and save theire state and position... + * @author S�astien Laot + */ +class InlineEditors : public QObject +{ + Q_OBJECT + public: + InlineEditors(); + ~InlineEditors(); + void initToolBars(KActionCollection *actionCollection); + static InlineEditors* instance(); + + public: + // Rich Text ToolBar: + KToolBar* richTextToolBar(); + void enableRichTextToolBar(); + void disableRichTextToolBar(); + FocusedFontCombo *richTextFont; + FontSizeCombo *richTextFontSize; + FocusedColorCombo *richTextColor; + KToggleAction *richTextBold; + KToggleAction *richTextItalic; + KToggleAction *richTextUnderline; +// KToggleAction *richTextSuper; +// KToggleAction *richTextSub; + KToggleAction *richTextLeft; + KToggleAction *richTextCenter; + KToggleAction *richTextRight; + KToggleAction *richTextJustified; + KAction *richTextUndo; + KAction *richTextRedo; +}; + +#endif // NOTEEDIT_H diff --git a/src/notefactory.cpp b/src/notefactory.cpp new file mode 100644 index 0000000..30efc28 --- /dev/null +++ b/src/notefactory.cpp @@ -0,0 +1,1008 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "basket.h" +#include "note.h" +#include "notefactory.h" +#include "notedrag.h" +#include "linklabel.h" +#include "global.h" +#include "settings.h" +#include "keyboard.h" +#include "variouswidgets.h" +#include "tools.h" + +#include "debugwindow.h" + +/** Create notes from scratch (just a content) */ + +Note* NoteFactory::createNoteText(const QString &text, Basket *parent, bool reallyPlainText/* = false*/) +{ + Note *note = new Note(parent); + if (reallyPlainText) { + TextContent *content = new TextContent(note, createFileForNewNote(parent, "txt")); + content->setText(text); + content->saveToFile(); + } else { + HtmlContent *content = new HtmlContent(note, createFileForNewNote(parent, "html")); + QString html = "" + Tools::textToHTMLWithoutP(text) + ""; + content->setHtml(html); + content->saveToFile(); + } + return note; +} + +Note* NoteFactory::createNoteHtml(const QString &html, Basket *parent) +{ + Note *note = new Note(parent); + HtmlContent *content = new HtmlContent(note, createFileForNewNote(parent, "html")); + content->setHtml(html); + content->saveToFile(); + return note; +} + +Note* NoteFactory::createNoteLink(const KURL &url, Basket *parent) +{ + Note *note = new Note(parent); + new LinkContent(note, url, titleForURL(url), iconForURL(url), /*autoTitle=*/true, /*autoIcon=*/true); + return note; +} + +Note* NoteFactory::createNoteLink(const KURL &url, const QString &title, Basket *parent) +{ + Note *note = new Note(parent); + new LinkContent(note, url, title, iconForURL(url), /*autoTitle=*/false, /*autoIcon=*/true); + return note; +} + +Note* NoteFactory::createNoteImage(const QPixmap &image, Basket *parent) +{ + Note *note = new Note(parent); + ImageContent *content = new ImageContent(note, createFileForNewNote(parent, "png")); + content->setPixmap(image); + content->saveToFile(); + return note; +} + +Note* NoteFactory::createNoteColor(const QColor &color, Basket *parent) +{ + Note *note = new Note(parent); + new ColorContent(note, color); + return note; +} + +/** Return a string list containing {url1, title1, url2, title2, url3, title3...} + */ +QStringList NoteFactory::textToURLList(const QString &text) +{ + // List to return: + QStringList list; + + // Split lines: + QStringList texts = QStringList::split('\n', text); + + // For each lines: + QStringList::iterator it; + for (it = texts.begin(); it != texts.end(); ++it) { + // Strip white spaces: + (*it) = (*it).stripWhiteSpace(); + + // Don't care of empty entries: + if ((*it).isEmpty()) + continue; + + // Compute lower case equivalent: + QString ltext = (*it).lower(); + + /* Search for mail address ("*@*.*" ; "*" can contain '_', '-', or '.') and add protocol to it */ + QString mailExpString = "[\\w-\\.]+@[\\w-\\.]+\\.[\\w]+"; + QRegExp mailExp("^"+mailExpString+"$"); + if (mailExp.search(ltext) != -1) { + ltext.insert(0, "mailto:"); + (*it).insert(0, "mailto:"); + } + + // TODO: Recognize "" (link between '<' and '>') + // TODO: Replace " at " by "@" and " dot " by "." to look for e-mail addresses + + /* Search for mail address like "Name " */ + QRegExp namedMailExp("^([\\w\\s]+)\\s<("+mailExpString+")>$"); + //namedMailExp.setCaseSensitive(true); // For the name to be keeped with uppercases // DOESN'T WORK ! + if (namedMailExp.search(ltext) != -1) { + QString name = namedMailExp.cap(1); + QString address = "mailto:" + namedMailExp.cap(2); + // Threat it NOW, as it's an exception (it have a title): + list.append(address); + list.append(name); + continue; + } + + /* Search for an url and create an URL note */ + if ( ltext.startsWith("/") && ltext[1] != '/' && ltext[1] != '*' || // Take files but not C/C++/... comments ! + ltext.startsWith("file:") || + ltext.startsWith("http://") || + ltext.startsWith("https://") || + ltext.startsWith("www.") || + ltext.startsWith("ftp.") || + ltext.startsWith("ftp://") || + ltext.startsWith("mailto:") ) { + + // First, correct the text to use the good format for the url + if (ltext.startsWith( "/")) + (*it).insert(0, "file:"); + if (ltext.startsWith("www.")) + (*it).insert(0, "http://"); + if (ltext.startsWith("ftp.")) + (*it).insert(0, "ftp://"); + + // And create the Url note (or launcher if URL point a .desktop file) + list.append(*it); + list.append(""); // We don't have any title + } else + return QStringList(); // FAILED: treat the text as a text, and not as a URL list! + } + return list; +} + +Note* NoteFactory::createNoteFromText(const QString &text, Basket *parent) +{ + /* Search for a color (#RGB , #RRGGBB , #RRRGGGBBB , #RRRRGGGGBBBB) and create a color note */ + QRegExp exp("^#(?:[a-fA-F\\d]{3}){1,4}$"); + if ( exp.search(text) != -1 ) + return createNoteColor(QColor(text), parent); + + /* Try to convert the text as a URL or a list of URLs */ + QStringList uriList = textToURLList(text); + if ( ! uriList.isEmpty() ) { + // TODO: This code is almost duplicated from fropURLs()! + Note *note; + Note *firstNote = 0; + Note *lastInserted = 0; + QStringList::iterator it; + for (it = uriList.begin(); it != uriList.end(); ++it) { + QString url = (*it); + ++it; + QString title = (*it); + if (title.isEmpty()) + note = createNoteLinkOrLauncher(KURL(url), parent); + else + note = createNoteLink(KURL(url), title, parent); + + // If we got a new note, insert it in a linked list (we will return the first note of that list): + if (note) { +// std::cout << "Drop URL: " << (*it).prettyURL() << std::endl; + if (!firstNote) + firstNote = note; + else { + lastInserted->setNext(note); + note->setPrev(lastInserted); + } + lastInserted = note; + } + + } + return firstNote; // It don't return ALL inserted notes ! + } + + //QString newText = text.stripWhiteSpace(); // The text for a new note, without useless spaces + /* Else, it's a text or an HTML note, so, create it */ + if (QStyleSheet::mightBeRichText(/*newT*/text)) + return createNoteHtml(/*newT*/text, parent); + else + return createNoteText(/*newT*/text, parent); +} + +Note* NoteFactory::createNoteLauncher(const KURL &url, Basket *parent) +{ + if (url.isEmpty()) + return createNoteLauncher("", "", "", parent); + else + return copyFileAndLoad(url, parent); +} + +Note* NoteFactory::createNoteLauncher(const QString &command, const QString &name, const QString &icon, Basket *parent) +{ + QString fileName = createNoteLauncherFile(command, name, icon, parent); + if (fileName.isEmpty()) + return 0L; + else + return loadFile(fileName, parent); +} + +QString NoteFactory::createNoteLauncherFile(const QString &command, const QString &name, const QString &icon, Basket *parent) +{ + QString content = QString( + "[Desktop Entry]\n" + "Exec=%1\n" + "Name=%2\n" + "Icon=%3\n" + "Encoding=UTF-8\n" + "Type=Application\n").arg(command, name, icon.isEmpty() ? QString("exec") : icon); + QString fileName = fileNameForNewNote(parent, "launcher.desktop"); + QString fullPath = parent->fullPathForFileName(fileName); +// parent->dontCareOfCreation(fullPath); + QFile file(fullPath); + if ( file.open(IO_WriteOnly) ) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + stream << content; + file.close(); + return fileName; + } else + return QString(); +} + +Note* NoteFactory::createNoteLinkOrLauncher(const KURL &url, Basket *parent) +{ + // IMPORTANT: we create the service ONLY if the extension is ".desktop". + // Otherwise, KService take a long time to analyse all the file + // and output such things to stdout: + // "Invalid entry (missing '=') at /my/file.ogg:11984" + // "Invalid entry (missing ']') at /my/file.ogg:11984"... + KService::Ptr service; + if (url.fileName().endsWith(".desktop")) + service = new KService(url.path()); + + // If link point to a .desktop file then add a launcher, otherwise it's a link + if (service && service->isValid()) + return createNoteLauncher(url, parent); + else + return createNoteLink(url, parent); +} + +#include +#include + +bool NoteFactory::movingNotesInTheSameBasket(QMimeSource *source, Basket *parent, QDropEvent::Action action) +{ + if (NoteDrag::canDecode(source)) + return action == QDropEvent::Move && NoteDrag::basketOf(source) == parent; + else + return false; +} + +Note* NoteFactory::dropNote(QMimeSource *source, Basket *parent, bool fromDrop, QDropEvent::Action action, Note */*noteSource*/) +{ + Note *note = 0L; + + /* No data */ + if (source->format(0) == 0L) { + // TODO: add a parameter to say if it's from a clipboard paste, a selection paste, or a drop + // To be able to say "The clipboard/selection/drop is empty". +// KMessageBox::error(parent, i18n("There is no data to insert."), i18n("No Data")); + return 0; + } + + /* Debug */ + if (Global::debugWindow) { + *Global::debugWindow << "Drop :"; + for (int i = 0; source->format(i); ++i) + if ( *(source->format(i)) ) + *Global::debugWindow << "\t[" + QString::number(i) + "] " + QString(source->format(i)); + switch (action) { // The source want that we: + case QDropEvent::Copy: *Global::debugWindow << ">> Drop action: Copy"; break; + case QDropEvent::Move: *Global::debugWindow << ">> Drop action: Move"; break; + case QDropEvent::Link: *Global::debugWindow << ">> Drop action: Link"; break; + case QDropEvent::Private: *Global::debugWindow << ">> Drop action: Private"; break; // What is it? (Copy?) + case QDropEvent::UserAction: *Global::debugWindow << ">> Drop action: UserAction"; break; // Not currently + default: *Global::debugWindow << ">> Drop action: Unknown"; // supported by Qt! + } + } + + /* Copy or move a Note */ + if (NoteDrag::canDecode(source)) { + bool moveFiles = fromDrop && action == QDropEvent::Move; + bool moveNotes = moveFiles; + return NoteDrag::decode(source, parent, moveFiles, moveNotes); // Filename will be kept + } + + /* Else : Drop object to note */ + + QPixmap pixmap; + if ( QImageDrag::decode(source, pixmap) ) + return createNoteImage(pixmap, parent); + + // KColorDrag::decode() is buggy and can trheat strings like "#include " as a black color + // The correct "ideal" code: + /*QColor color; + if ( KColorDrag::decode(source, color) ) { + createNoteColor(color, parent); + return; +}*/ + // And then the hack (if provide color MIME type or a text that contains color), using createNote Color RegExp: + QString hack; + QRegExp exp("^#(?:[a-fA-F\\d]{3}){1,4}$"); + if (source->provides("application/x-color") || (QTextDrag::decode(source, hack) && (exp.search(hack) != -1)) ) { + QColor color; + if (KColorDrag::decode(source, color)) + return createNoteColor(color, parent); +// if ( (note = createNoteColor(color, parent)) ) +// return note; +// // Theorically it should be returned. If not, continue by dropping other things + } + + KURL::List urls; + if ( KURLDrag::decode(source, urls) ) { + // If it's a Paste, we should know if files should be copied (copy&paste) or moved (cut&paste): + if (!fromDrop && Tools::isAFileCut(source)) + action = QDropEvent::Move; + return dropURLs(urls, parent, action, fromDrop); + } + + // FIXME: use dropURLs() also from Mozilla? + + /* + * Mozilla's stuff sometimes uses utf-16-le - little-endian UTF-16. + * + * This has the property that for the ASCII subset case (And indeed, the + * ISO-8859-1 subset, I think), if you treat it as a C-style string, + * it'll come out to one character long in most cases, since it looks + * like: + * + * "<\0H\0T\0M\0L\0>\0" + * + * A strlen() call on that will give you 1, which simply isn't correct. + * That might, I suppose, be the answer, or something close. + * + * Also, Mozilla's drag/drop code predates the use of MIME types in XDnD + * - hence it'll throw about STRING and UTF8_STRING quite happily, hence + * the odd named types. + * + * Thanks to Dave Cridland for having said me that. + */ + if (source->provides("text/x-moz-url")) { // FOR MOZILLA + // Get the array and create a QChar array of 1/2 of the size + QByteArray mozilla = source->encodedData("text/x-moz-url"); + QMemArray chars( mozilla.count() / 2 ); + // A small debug work to know the value of each bytes + if (Global::debugWindow) + for (uint i = 0; i < mozilla.count(); i++) + *Global::debugWindow << QString("'") + QChar(mozilla[i]) + "' " + QString::number(int(mozilla[i])); + // text/x-moz-url give the URL followed by the link title and separed by OxOA (10 decimal: new line?) + uint size = 0; + QChar *name = 0L; + // For each little endian mozilla chars, copy it to the array of QChars + for (uint i = 0; i < mozilla.count(); i += 2) { + chars[i/2] = QChar(mozilla[i], mozilla[i+1]); + if (mozilla[i] == 0x0A) { + size = i/2; + name = &(chars[i/2+1]); + } + } + // Create a QString that take the address of the first QChar and a length + if (name == 0L) { // We haven't found name (FIXME: Is it possible ?) + QString normalHtml(&(chars[0]), chars.size()); + return createNoteLink(normalHtml, parent); + } else { + QString normalHtml( &(chars[0]), size ); + QString normalTitle( name, chars.size()-size-1); + return createNoteLink(normalHtml, normalTitle, parent); + } + } + + if (source->provides("text/html")) { + QString html; + QCString subtype("html"); + // If the text/html comes from Mozilla or GNOME it can be UTF-16 encoded: we need ExtendedTextDrag to check that + ExtendedTextDrag::decode(source, html, subtype); + return createNoteHtml(html, parent); + } + + QString text; + // If the text/plain comes from GEdit or GNOME it can be empty: we need ExtendedTextDrag to check other MIME types + if ( ExtendedTextDrag::decode(source, text) ) + return createNoteFromText(text, parent); + + /* Unsucceful drop */ + note = createNoteUnknown(source, parent); + QString message = i18n("

      %1 doesn't support the data you've dropped.
      " + "It however created a generic note, allowing you to drag or copy it to an application that understand it.

      " + "

      If you want the support of these data, please contact developer or visit the " + "BasKet Drop Database.

      ").arg(kapp->aboutData()->programName()); + KMessageBox::information(parent, message, i18n("Unsupported MIME Type(s)"), + "unsupportedDropInfo", KMessageBox::AllowLink); + return note; +} + +Note* NoteFactory::createNoteUnknown(QMimeSource *source, Basket *parent/*, const QString &annotations*/) +{ + // Save the MimeSource in a file: create and open the file: + QString fileName = createFileForNewNote(parent, "unknown"); + QFile file(parent->fullPath() + fileName); + if ( ! file.open(IO_WriteOnly) ) + return 0L; + QDataStream stream(&file); + + // Echo MIME types: + for (int i = 0; source->format(i); ++i) + if ( *(source->format(i)) ) + stream << QString(source->format(i)); // Output the '\0'-terminated format name string + + // Echo end of MIME types list delimiter: + stream << ""; + + // Echo the length (in bytes) and then the data, and then same for next MIME type: + for (int i = 0; source->format(i); ++i) + if ( *(source->format(i)) ) { + QByteArray data = source->encodedData(source->format(i)); + stream << (Q_UINT32)data.count(); + stream.writeRawBytes(data.data(), data.count()); + } + file.close(); + + Note *note = new Note(parent); + new UnknownContent(note, fileName); + return note; +} + +Note* NoteFactory::dropURLs(KURL::List urls, Basket *parent, QDropEvent::Action action, bool fromDrop) +{ + int shouldAsk = 0; // shouldAsk==0: don't ask ; shouldAsk==1: ask for "file" ; shouldAsk>=2: ask for "files" + bool shiftPressed = Keyboard::shiftPressed(); + bool ctrlPressed = Keyboard::controlPressed(); + bool modified = fromDrop && (shiftPressed || ctrlPressed); + + if (modified) // Then no menu + modified action + ; // action is already set: no work to do + else if (fromDrop) { // Compute if user should be asked or not + for ( KURL::List::iterator it = urls.begin(); it != urls.end(); ++it ) + if ((*it).protocol() != "mailto") { // Do not ask when dropping mail address :-) + shouldAsk++; + if (shouldAsk == 1/*2*/) // Sufficient + break; + } + if (shouldAsk) { + KPopupMenu menu(parent); + menu.insertItem( SmallIconSet("goto"), i18n("&Move Here\tShift"), 0 ); + menu.insertItem( SmallIconSet("editcopy"), i18n("&Copy Here\tCtrl"), 1 ); + menu.insertItem( SmallIconSet("www"), i18n("&Link Here\tCtrl+Shift"), 2 ); + menu.insertSeparator(); + menu.insertItem( SmallIconSet("cancel"), i18n("C&ancel\tEscape"), 3 ); + int id = menu.exec(QCursor::pos()); + switch (id) { + case 0: action = QDropEvent::Move; break; + case 1: action = QDropEvent::Copy; break; + case 2: action = QDropEvent::Link; break; + default: return 0; + } + modified = true; + } + } else { // fromPaste + ; + } + + /* Policy of drops of URL: + * Email: [Modifier keys: Useless] + + - Link mail address + * Remote URL: [Modifier keys: {Copy,Link}] + + - Download as Image, Animation and Launcher + + - Link other URLs + * Local URL: [Modifier keys: {Copy,Move,Link}] + * - Copy as Image, Animation and Launcher [Modifier keys: {Copy,Move,Link}] + * - Link folder [Modifier keys: Useless] + * - Make Launcher of executable [Modifier keys: {Copy_exec,Move_exec,Link_Launcher}] + * - Ask for file (if use want to copy and it is a sound: make Sound) + * Policy of pastes of URL: [NO modifier keys] + * - Same as drops + * - But copy when ask should be done + * - Unless cut-selection is true: move files instead + * Policy of file created in the basket dir: [NO modifier keys] + * - View as Image, Animation, Sound, Launcher + * - View as File + */ + Note *note; + Note *firstNote = 0; + Note *lastInserted = 0; + for (KURL::List::iterator it = urls.begin(); it != urls.end(); ++it) { + if ( ((*it).protocol() == "mailto") || + (action == QDropEvent::Link) ) + note = createNoteLinkOrLauncher(*it, parent); + else if (!(*it).isLocalFile()) { + if ( action != QDropEvent::Link && (maybeImageOrAnimation(*it)/* || maybeSound(*it)*/) ) + note = copyFileAndLoad(*it, parent); + else + note = createNoteLinkOrLauncher(*it, parent); + } else { + if (action == QDropEvent::Copy) + note = copyFileAndLoad(*it, parent); + else if (action == QDropEvent::Move) + note = moveFileAndLoad(*it, parent); + else + note = createNoteLinkOrLauncher(*it, parent); + } + + // If we got a new note, insert it in a linked list (we will return the first note of that list): + if (note) { + DEBUG_WIN << "Drop URL: " + (*it).prettyURL(); + if (!firstNote) + firstNote = note; + else { + lastInserted->setNext(note); + note->setPrev(lastInserted); + } + lastInserted = note; + } + } + return firstNote; +} + +void NoteFactory::consumeContent(QDataStream &stream, NoteType::Id type) +{ + if (type == NoteType::Link) { + KURL url; + QString title, icon; + Q_UINT64 autoTitle64, autoIcon64; + stream >> url >> title >> icon >> autoTitle64 >> autoIcon64; + } else if (type == NoteType::Color) { + QColor color; + stream >> color; + } +} + +Note* NoteFactory::decodeContent(QDataStream &stream, NoteType::Id type, Basket *parent) +{ +/* if (type == NoteType::Text) { + QString text; + stream >> text; + return NoteFactory::createNoteText(text, parent); +} else if (type == NoteType::Html) { + QString html; + stream >> html; + return NoteFactory::createNoteHtml(html, parent); +} else if (type == NoteType::Image) { + QPixmap pixmap; + stream >> pixmap; + return NoteFactory::createNoteImage(pixmap, parent); +} else */ + if (type == NoteType::Link) { + KURL url; + QString title, icon; + Q_UINT64 autoTitle64, autoIcon64; + bool autoTitle, autoIcon; + stream >> url >> title >> icon >> autoTitle64 >> autoIcon64; + autoTitle = (bool)autoTitle64; + autoIcon = (bool)autoIcon64; + Note *note = NoteFactory::createNoteLink(url, parent); + ((LinkContent*)(note->content()))->setLink(url, title, icon, autoTitle, autoIcon); + return note; + } else if (type == NoteType::Color) { + QColor color; + stream >> color; + return NoteFactory::createNoteColor(color, parent); + } else + return 0; // NoteFactory::loadFile() is sufficient +} + +// mayBeLauncher: url.url().endsWith(".desktop"); + +bool NoteFactory::maybeText(const KURL &url) +{ + QString path = url.url().lower(); + return path.endsWith(".txt"); +} + +bool NoteFactory::maybeHtml(const KURL &url) +{ + QString path = url.url().lower(); + return path.endsWith(".html") || path.endsWith(".htm"); +} + +bool NoteFactory::maybeImageOrAnimation(const KURL &url) +{ + /* Examples on my machine: + QImageDrag can understands + {"image/png", "image/bmp", "image/jpeg", "image/pgm", "image/ppm", "image/xbm", "image/xpm"} + QImageIO::inputFormats() returns + {"BMP", "GIF", "JPEG", "MNG", "PBM", "PGM", "PNG", "PPM", "XBM", "XPM"} + QImageDecoder::inputFormats(): + {"GIF", "MNG", "PNG"} */ + QStrList list = QImageIO::inputFormats(); + list.prepend("jpg"); // Since QImageDrag return only "JPEG" and extensions can be "JPG"; preprend for heuristic optim. + char *s; + QString path = url.url().lower(); + for (s = list.first(); s; s = list.next()) + if (path.endsWith(QString(".") + QString(s).lower())) + return true; + // TODO: Search real MIME type for local files? + return false; +} + +bool NoteFactory::maybeAnimation(const KURL &url) +{ + QString path = url.url().lower(); + return path.endsWith(".mng") || path.endsWith(".gif"); +} + +bool NoteFactory::maybeSound(const KURL &url) +{ + QString path = url.url().lower(); + return path.endsWith(".mp3") || path.endsWith(".ogg"); +} + +bool NoteFactory::maybeLauncher(const KURL &url) +{ + QString path = url.url().lower(); + return path.endsWith(".desktop"); +} + +////////////// NEW: + +Note* NoteFactory::copyFileAndLoad(const KURL &url, Basket *parent) +{ + QString fileName = fileNameForNewNote(parent, url.fileName()); + QString fullPath = parent->fullPathForFileName(fileName); + + if (Global::debugWindow) + *Global::debugWindow << "copyFileAndLoad: " + url.prettyURL() + " to " + fullPath; + +// QString annotations = i18n("Original file: %1").arg(url.prettyURL()); +// parent->dontCareOfCreation(fullPath); + + +// KIO::CopyJob *copyJob = KIO::copy(url, KURL(fullPath)); +// parent->connect( copyJob, SIGNAL(copyingDone(KIO::Job *, const KURL &, const KURL &, bool, bool)), +// parent, SLOT(slotCopyingDone(KIO::Job *, const KURL &, const KURL &, bool, bool)) ); + + KIO::FileCopyJob *copyJob = new KIO::FileCopyJob( + url, KURL(fullPath), 0666, /*move=*/false, + /*overwrite=*/true, /*resume=*/true, /*showProgress=*/true ); + parent->connect( copyJob, SIGNAL(result(KIO::Job *)), + parent, SLOT(slotCopyingDone2(KIO::Job *)) ); + + + NoteType::Id type = typeForURL(url, parent); // Use the type of the original file because the target doesn't exist yet + return loadFile(fileName, type, parent); +} + +Note* NoteFactory::moveFileAndLoad(const KURL &url, Basket *parent) +{ + // Globally the same as copyFileAndLoad() but move instead of copy (KIO::move()) + QString fileName = fileNameForNewNote(parent, url.fileName()); + QString fullPath = parent->fullPathForFileName(fileName); + + if (Global::debugWindow) + *Global::debugWindow << "moveFileAndLoad: " + url.prettyURL() + " to " + fullPath; + +// QString annotations = i18n("Original file: %1").arg(url.prettyURL()); +// parent->dontCareOfCreation(fullPath); + + +// KIO::CopyJob *copyJob = KIO::move(url, KURL(fullPath)); +// parent->connect( copyJob, SIGNAL(copyingDone(KIO::Job *, const KURL &, const KURL &, bool, bool)), +// parent, SLOT(slotCopyingDone(KIO::Job *, const KURL &, const KURL &, bool, bool)) ); + + KIO::FileCopyJob *copyJob = new KIO::FileCopyJob( + url, KURL(fullPath), 0666, /*move=*/true, + /*overwrite=*/true, /*resume=*/true, /*showProgress=*/true ); + parent->connect( copyJob, SIGNAL(result(KIO::Job *)), + parent, SLOT(slotCopyingDone2(KIO::Job *)) ); + + + NoteType::Id type = typeForURL(url, parent); // Use the type of the original file because the target doesn't exist yet + return loadFile(fileName, type, parent); +} + +Note* NoteFactory::loadFile(const QString &fileName, Basket *parent) +{ + // The file MUST exists + QFileInfo file( KURL(parent->fullPathForFileName(fileName)).path() ); + if ( ! file.exists() ) + return 0L; + + NoteType::Id type = typeForURL(parent->fullPathForFileName(fileName), parent); + Note *note = loadFile(fileName, type, parent); + return note; +} + +Note* NoteFactory::loadFile(const QString &fileName, NoteType::Id type, Basket *parent) +{ + Note *note = new Note(parent); + switch (type) { + case NoteType::Text: new TextContent( note, fileName ); break; + case NoteType::Html: new HtmlContent( note, fileName ); break; + case NoteType::Image: new ImageContent( note, fileName ); break; + case NoteType::Animation: new AnimationContent( note, fileName ); break; + case NoteType::Sound: new SoundContent( note, fileName ); break; + case NoteType::File: new FileContent( note, fileName ); break; + case NoteType::Launcher: new LauncherContent( note, fileName ); break; + case NoteType::Unknown: new UnknownContent( note, fileName ); break; + + default: + case NoteType::Link: + case NoteType::Color: + return 0; + } + + return note; +} + +NoteType::Id NoteFactory::typeForURL(const KURL &url, Basket */*parent*/) +{ +/* KMimeType::Ptr kMimeType = KMimeType::findByURL(url); + if (Global::debugWindow) + *Global::debugWindow << "typeForURL: " + kMimeType->parentMimeType();//property("MimeType").toString();*/ + bool viewText = Settings::viewTextFileContent(); + bool viewHTML = Settings::viewHtmlFileContent(); + bool viewImage = Settings::viewImageFileContent(); + bool viewSound = Settings::viewSoundFileContent(); + + KFileMetaInfo metaInfo(url); + if (Global::debugWindow && metaInfo.isEmpty()) + *Global::debugWindow << "typeForURL: metaInfo is empty for " + url.prettyURL(); + if (metaInfo.isEmpty()) { // metaInfo is empty for GIF files on my machine ! + if (viewText && maybeText(url)) return NoteType::Text; + else if (viewHTML && (maybeHtml(url))) return NoteType::Html; + else if (viewImage && maybeAnimation(url)) return NoteType::Animation; // See Note::movieStatus(int) + else if (viewImage && maybeImageOrAnimation(url)) return NoteType::Image; // for more explanations + else if (viewSound && maybeSound(url)) return NoteType::Sound; + else if (maybeLauncher(url)) return NoteType::Launcher; + else return NoteType::File; + } + QString mimeType = metaInfo.mimeType(); + + if (Global::debugWindow) + *Global::debugWindow << "typeForURL: " + url.prettyURL() + " ; MIME type = " + mimeType; + + if (mimeType == "application/x-desktop") return NoteType::Launcher; + else if (viewText && mimeType.startsWith("text/plain")) return NoteType::Text; + else if (viewHTML && mimeType.startsWith("text/html")) return NoteType::Html; + else if (viewImage && mimeType == "movie/x-mng") return NoteType::Animation; + else if (viewImage && mimeType == "image/gif") return NoteType::Animation; + else if (viewImage && mimeType.startsWith("image/")) return NoteType::Image; + else if (viewSound && mimeType.startsWith("audio/")) return NoteType::Sound; + else return NoteType::File; +} + +QString NoteFactory::fileNameForNewNote(Basket *parent, const QString &wantedName) +{ + return Tools::fileNameForNewFile(wantedName, parent->fullPath()); +} + +// Create a file to store a new note in Basket parent and with extension extension. +// If wantedName is provided, the function will first try to use this file name, or derive it if it's impossible +// (extension willn't be used for that case) +QString NoteFactory::createFileForNewNote(Basket *parent, const QString &extension, const QString &wantedName) +{ + static int nb = 1; + + QString fileName; + QString fullName; + + if (wantedName.isEmpty()) { // TODO: fileNameForNewNote(parent, "note1."+extension); + QDir dir; + for (/*int nb = 1*/; ; ++nb) { // TODO: FIXME: If overflow ??? + fileName = "note" + QString::number(nb)/*.rightJustify(5, '0')*/ + "." + extension; + fullName = parent->fullPath() + fileName; + dir = QDir(fullName); + if ( ! dir.exists(fullName) ) + break; + } + } else { + fileName = fileNameForNewNote(parent, wantedName); + fullName = parent->fullPath() + fileName; + } + + // Create the file +// parent->dontCareOfCreation(fullName); + QFile file(fullName); + file.open(IO_WriteOnly); + file.close(); + + return fileName; +} + +KURL NoteFactory::filteredURL(const KURL &url) +{ + // KURIFilter::filteredURI() is slow if the URL contains only letters, digits and '-' or '+'. + // So, we don't use that function is that case: + bool isSlow = true; + for (uint i = 0; i < url.url().length(); ++i) { + QChar c = url.url()[i]; + if (!c.isLetterOrNumber() && c != '-' && c != '+') { + isSlow = false; + break; + } + } + if (isSlow) + return url; + else + return KURIFilter::self()->filteredURI(url); +} + +QString NoteFactory::titleForURL(const KURL &url) +{ + QString title = url.prettyURL(); + QString home = "file:" + QDir::homeDirPath() + "/"; + + if (title.startsWith("mailto:")) + return title.remove(0, 7); + + if (title.startsWith(home)) + title = "~/" + title.remove(0, home.length()); + + if (title.startsWith("file://")) + title = title.remove(0, 7); // 7 == QString("file://").length() - 1 + else if (title.startsWith("file:")) + title = title.remove(0, 5); // 5 == QString("file:").length() - 1 + else if (title.startsWith("http://www.")) + title = title.remove(0, 11); // 11 == QString("http://www.").length() - 1 + else if (title.startsWith("http://")) + title = title.remove(0, 7); // 7 == QString("http://").length() - 1 + + if ( ! url.isLocalFile() ) { + if (title.endsWith("/index.html") && title.length() > 11) + title.truncate(title.length() - 11); // 11 == QString("/index.html").length() + else if (title.endsWith("/index.htm") && title.length() > 10) + title.truncate(title.length() - 10); // 10 == QString("/index.htm").length() + else if (title.endsWith("/index.xhtml") && title.length() > 12) + title.truncate(title.length() - 12); // 12 == QString("/index.xhtml").length() + else if (title.endsWith("/index.php") && title.length() > 10) + title.truncate(title.length() - 10); // 10 == QString("/index.php").length() + else if (title.endsWith("/index.asp") && title.length() > 10) + title.truncate(title.length() - 10); // 10 == QString("/index.asp").length() + else if (title.endsWith("/index.php3") && title.length() > 11) + title.truncate(title.length() - 11); // 11 == QString("/index.php3").length() + else if (title.endsWith("/index.php4") && title.length() > 11) + title.truncate(title.length() - 11); // 11 == QString("/index.php4").length() + else if (title.endsWith("/index.php5") && title.length() > 11) + title.truncate(title.length() - 11); // 11 == QString("/index.php5").length() + } + + if (title.length() > 2 && title.endsWith("/")) // length > 2 because "/" and "~/" shouldn't be transformed to "" and "~" + title.truncate(title.length() - 1); // eg. transform "www.kde.org/" to "www.kde.org" + + return title; +} + +QString NoteFactory::iconForURL(const KURL &url) +{ + QString icon = KMimeType::iconForURL(url.url()); + if ( url.protocol() == "mailto" ) + icon = "message"; + return icon; +} + +// TODO: Can I add "autoTitle" and "autoIcon" entries to .desktop files? or just store them in basket, as now... + +/* Try our better to find an icon suited to the command line + * eg. "/usr/bin/kwrite-3.2 ~/myfile.txt /home/other/file.xml" + * will give the "kwrite" icon! + */ +QString NoteFactory::iconForCommand(const QString &command) +{ + QString icon; + + // 1. Use first word as icon (typically the program without argument) + icon = QStringList::split(' ', command).first(); + // 2. If the command is a full path, take only the program file name + icon = icon.mid(icon.findRev('/') + 1); // strip path if given [But it doesn't care of such + // "myprogram /my/path/argument" -> return "argument". Would + // must first strip first word and then strip path... Useful ?? + // 3. Use characters before any '-' (e.g. use "gimp" icon if run command is "gimp-1.3") + if ( ! isIconExist(icon) ) + icon = QStringList::split('-', icon).first(); + // 4. If the icon still not findable, use a generic icon + if ( ! isIconExist(icon) ) + icon = "exec"; + + return icon; +} + +bool NoteFactory::isIconExist(const QString &icon) +{ + return ! kapp->iconLoader()->loadIcon(icon, KIcon::NoGroup, 16, KIcon::DefaultState, 0L, true).isNull(); +} + +Note* NoteFactory::createEmptyNote(NoteType::Id type, Basket *parent) +{ + QPixmap *pixmap; + switch (type) { + case NoteType::Text: + return NoteFactory::createNoteText("", parent, /*reallyPlainText=*/true); + case NoteType::Html: + return NoteFactory::createNoteHtml("", parent); + case NoteType::Image: + pixmap = new QPixmap( QSize(Settings::defImageX(), Settings::defImageY()) ); + pixmap->fill(); + pixmap->setMask(pixmap->createHeuristicMask()); + return NoteFactory::createNoteImage(*pixmap, parent); + case NoteType::Link: + return NoteFactory::createNoteLink(KURL(), parent); + case NoteType::Launcher: + return NoteFactory::createNoteLauncher(KURL(), parent); + case NoteType::Color: + return NoteFactory::createNoteColor(Qt::black, parent); + default: + case NoteType::Animation: + case NoteType::Sound: + case NoteType::File: + case NoteType::Unknown: + return 0; // Not possible! + } +} + +Note* NoteFactory::importKMenuLauncher(Basket *parent) +{ + KOpenWithDlg dialog(parent); + dialog.setSaveNewApplications(true); // To create temp file, needed by createNoteLauncher() + dialog.exec(); + if (dialog.service()) { + // * locateLocal() return a local file even if it is a system wide one (local one doesn't exists) + // * desktopEntryPath() returns the full path for system wide ressources, but relative path if in home + QString serviceUrl = dialog.service()->desktopEntryPath(); + if ( ! serviceUrl.startsWith("/") ) + serviceUrl = dialog.service()->locateLocal(); //locateLocal("xdgdata-apps", serviceUrl); + return createNoteLauncher(serviceUrl, parent); + } + return 0; +} + +Note* NoteFactory::importIcon(Basket *parent) +{ + QString iconName = KIconDialog::getIcon( KIcon::Desktop, KIcon::Application, false, Settings::defIconSize() ); + if ( ! iconName.isEmpty() ) { + IconSizeDialog dialog(i18n("Import Icon as Image"), i18n("Choose the size of the icon to import as an image:"), iconName, Settings::defIconSize(), 0); + dialog.exec(); + if (dialog.iconSize() > 0) { + Settings::setDefIconSize(dialog.iconSize()); + Settings::saveConfig(); + return createNoteImage( DesktopIcon(iconName, dialog.iconSize()), parent ); // TODO: wantedName = iconName ! + } + } + return 0; +} + +Note* NoteFactory::importFileContent(Basket *parent) +{ + KURL url = KFileDialog::getOpenURL( QString::null, QString::null, parent, i18n("Load File Content into a Note") ); + if ( ! url.isEmpty() ) + return copyFileAndLoad(url, parent); + return 0; +} diff --git a/src/notefactory.h b/src/notefactory.h new file mode 100644 index 0000000..3fee459 --- /dev/null +++ b/src/notefactory.h @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NOTEFACTORY_H +#define NOTEFACTORY_H + +#include +#include +#include + +class QString; +class QPixmap; +class QColor; + +class Basket; +class Note; + +enum NoteType::Id; + +/** Factory class to create (new, drop, past) or load BasketIem, and eventuelly save them (?) + * @author Sébastien Laoût + */ +namespace NoteFactory +{ + /** Functions to create a new note from a content. + * Content, if any, is saved to file but the note is not insterted in the basket, and the basket is not saved. + * Return 0 if the note has not been successfully created. + * In some cases, the returned note can be a group containing several notes or the first note of a chained list. + * The method Basket::TODO() can insert several grouped or chained notes without problem. + */ + Note* createNoteText( const QString &text, Basket *parent, bool reallyPlainText = false); + Note* createNoteHtml( const QString &html, Basket *parent); + Note* createNoteLink( const KURL &url, Basket *parent); + Note* createNoteLink( const KURL &url, const QString &title, Basket *parent); + Note* createNoteImage( const QPixmap &image, Basket *parent); + Note* createNoteColor( const QColor &color, Basket *parent); + Note* createNoteFromText( const QString &content, Basket *parent); // Find automatically the type from the text meaning // TODO: Return Note::List? + Note* createNoteLauncher( const KURL &url, Basket *parent); + Note* createNoteLauncher( const QString &command, const QString &name, const QString &icon, Basket *parent); + Note* createNoteUnknown( QMimeSource *source, Basket *parent); + /** Functions to create derived notes from a content */ + Note* createNoteLinkOrLauncher( const KURL &url, Basket *parent); + Note* copyFileAndLoad( const KURL &url, Basket *parent); + Note* moveFileAndLoad( const KURL &url, Basket *parent); + Note* loadFile( const QString &fileName, Basket *parent); /// << Determine the content of the file (the file SHOULD exists) and return a note of the good type. + Note* loadFile( const QString &fileName, NoteType::Id type, Basket *parent ); /// << Create a note of type @p type. The file is not obliged to exist. + /** Functions to create a new note from a drop or past event */ + Note* dropNote(QMimeSource *source, Basket *parent, + bool fromDrop = false, QDropEvent::Action action = QDropEvent::Copy, Note *noteSource = 0); + bool movingNotesInTheSameBasket(QMimeSource *source, Basket *parent, QDropEvent::Action action); + Note* dropURLs(KURL::List urls, Basket *parent, QDropEvent::Action action, bool fromDrop); + Note* decodeContent(QDataStream &stream, NoteType::Id type, Basket *parent); /// << Decode the @p stream to a note or return 0 if a general loadFile() is sufficient. + void consumeContent(QDataStream &stream, NoteType::Id type); /// << Decode the @p stream to a note or return 0 if a general loadFile() is sufficient. + /** Functions to create a note file but not load it in a note object */ + QString createNoteLauncherFile(const QString &command, const QString &name, const QString &icon, Basket *parent); + /** Other useful functions */ + NoteType::Id typeForURL(const KURL &url, Basket *parent); + bool maybeText(const KURL &url); + bool maybeHtml(const KURL &url); + bool maybeImageOrAnimation(const KURL &url); + bool maybeAnimation(const KURL &url); + bool maybeSound(const KURL &url); + bool maybeLauncher(const KURL &url); + QString fileNameForNewNote(Basket *parent, const QString &wantedName); + QString createFileForNewNote(Basket *parent, const QString &extension, const QString &wantedName = ""); + KURL filteredURL(const KURL &url); + QString titleForURL(const KURL &url); + QString iconForURL(const KURL &url); + QString iconForCommand(const QString &command); + bool isIconExist(const QString &icon); + QStringList textToURLList(const QString &text); // @Return { url1, title1, url2, title2, url3, title3... } + /** Insert GUI menu */ + Note* createEmptyNote( NoteType::Id type, Basket *parent ); // Insert empty if of type Note::Type + Note* importKMenuLauncher(Basket *parent); + Note* importIcon(Basket *parent); + Note* importFileContent(Basket *parent); +} + +#endif // NOTEFACTORY_H diff --git a/src/password.cpp b/src/password.cpp new file mode 100644 index 0000000..cbac314 --- /dev/null +++ b/src/password.cpp @@ -0,0 +1,113 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ + +#include "password.h" + +#ifdef HAVE_LIBGPGME + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +PasswordDlg::PasswordDlg(QWidget *parent, const char *name) + :KDialogBase(Plain, i18n("Password Protection"), Ok|Cancel, Ok, + parent, name, /*modal=*/true, /*separator=*/true), w(0) +{ + QHBoxLayout* toplayout = new QHBoxLayout(plainPage(), 0, 0); + w = new Password(plainPage()); + toplayout->addWidget(w, 1); +} + +PasswordDlg::~PasswordDlg() +{ + delete w; +} + +void PasswordDlg::slotOk() +{ + int n = type(); + if(n == Basket::PrivateKeyEncryption && key().isEmpty()) + KMessageBox::error(w, i18n("No private key selected.")); + else + KDialogBase::slotOk(); +} + +QString PasswordDlg::key() const +{ + QString s = w->keyCombo->currentText(); + if(s.length() < 16) + return ""; + int n = s.findRev(' '); + if(n < 0) + return ""; + return s.mid(n+1); +} + +int PasswordDlg::type() const +{ + return w->buttonGroup->selectedId(); +} + +void PasswordDlg::setKey(const QString& key) +{ + for(int i = 0; i < w->keyCombo->count(); ++i) + { + if(w->keyCombo->text(i).find(key) >= 0) + { + w->keyCombo->setCurrentItem(i); + return; + } + } +} + +void PasswordDlg::setType(int type) +{ + w->buttonGroup->setButton(type); +} + +Password::Password(QWidget *parent, const char *name) + : PasswordLayout(parent, name) +{ + KGpgMe gpg; + + KGpgKeyList list = gpg.keys(true); + for(KGpgKeyList::iterator it = list.begin(); it != list.end(); ++it) { + QString name = gpg.checkForUtf8((*it).name); + + keyCombo->insertItem(QString("%1 <%2> %3").arg(name).arg((*it).email).arg((*it).id)); + } + publicPrivateRadioButton->setEnabled(keyCombo->count() > 0); + keyCombo->setEnabled(keyCombo->count() > 0); +} + + +Password::~Password() +{ +} + +#include "password.moc" + +#endif diff --git a/src/password.h b/src/password.h new file mode 100644 index 0000000..8df3e0e --- /dev/null +++ b/src/password.h @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2006 by Petri Damsten * + * damu@iki.fi * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the 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. * + ***************************************************************************/ +#ifndef PASSWORD_H +#define PASSWORD_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_LIBGPGME + +#include +#include + +/** + @author Petri Damsten +*/ +class Password : public PasswordLayout +{ + Q_OBJECT + public: + Password(QWidget *parent, const char *name = 0); + ~Password(); +}; + +class PasswordDlg : public KDialogBase +{ + Q_OBJECT + public: + PasswordDlg(QWidget *parent, const char *name = 0); + ~PasswordDlg(); + + QString key() const; + int type() const; + void setKey(const QString& key); + void setType(int type); + + protected slots: + virtual void slotOk(); + + private: + Password* w; +}; + +#endif // HAVE_LIBGPGME + +#endif // PASSWORD_H + diff --git a/src/passwordlayout.ui b/src/passwordlayout.ui new file mode 100644 index 0000000..9cc630d --- /dev/null +++ b/src/passwordlayout.ui @@ -0,0 +1,122 @@ + +PasswordLayout + + + PasswordLayout + + + + 0 + 0 + 314 + 69 + + + + Password Protection + + + + unnamed + + + + buttonGroup + + + 0 + + + + + + + unnamed + + + 0 + + + + noPasswordRadioButton + + + &No protection + + + Alt+N + + + + + passwordRadioButton + + + Protect basket with a &password + + + Alt+P + + + + + layout2 + + + + unnamed + + + + publicPrivateRadioButton + + + + 0 + 0 + 0 + 0 + + + + Protect basket with private &key: + + + Alt+K + + + + + keyCombo + + + + + + + + + spacer + + + Vertical + + + Expanding + + + + 20 + 6 + + + + + + + changeKey() + clearKey() + + + + diff --git a/src/popupmenu.cpp b/src/popupmenu.cpp new file mode 100644 index 0000000..a73aa65 --- /dev/null +++ b/src/popupmenu.cpp @@ -0,0 +1,151 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include + +#include "popupmenu.h" + +#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x + #define MENU_Y_OFFSET 1 +#else + #define MENU_Y_OFFSET 2 +#endif + +/** NOTE 1 : This implementation forget BIDI support (eg RightToLeft languages + * expect to try to popup the menu first at bottom-right + * and not at bottom-left. + * NOTE 2 : This implementation do not support virtual desktop with more than + * one screen. Pehrapse QPopupMenu solve it by itself but I can't + * try : I have only one screen. + * => Have those methods directly in Qt (or KDE) would be a great benefits ! + */ + +void PopupMenu::execAtRectCenter(QPopupMenu &menu, const QRect &rect) +{ + // Compute point where to popup the menu that should be centered : + QSize menuSize = menu.sizeHint(); + QSize menuHalfSize = menuSize / 2; + QPoint point = rect.center() - QPoint(menuHalfSize.width(), menuHalfSize.height()); + + // Very strange : menu.exec(point) do that clipping (but not when exec() by mouse !!! ) : + // If menu is partially out of the screen, move it : +/* int desktopWidth = kapp->desktop()->width(); + int desktopHeight = kapp->desktop()->height(); + if (point.x() + menuSize.width() > desktopWidth) point.setX(desktopWidth - menuSize.width()); + if (point.y() + menuSize.height() - 2 > desktopHeight) point.setY(desktopHeight - menuSize.height() + 2); + if (point.x() < 0) point.setX(0); + if (point.y() < 0) point.setY(0);*/ + + // And show the menu : + menu.exec( point + QPoint(0, MENU_Y_OFFSET) ); // Stupid offset (Qt bug ?) : we should show the menus 2 pixels more bottom ! +} + +// Needed on debug to draw the passed global rectangle : +//#include +//#include + +void PopupMenu::execAtRectBottom(QPopupMenu &menu, const QRect &rect, bool centered) +{ + QSize menuSize = menu.sizeHint() - QSize(1, 1); // A size is [1..n] => We want two lengths that are [0..(n-1)] + int desktopWidth = kapp->desktop()->width(); // to be compared/added/substracted with QRects/QPoints... + int desktopHeight = kapp->desktop()->height(); + + /** Paint the rect on the screen (desktop). + * For test purpose only (to be sure the passed rectangle is right). + * Comment this (and the qpainter and qpen includes) for a non-debug version. + */ + /*QPainter paint(kapp->desktop(), kapp->desktop(), true); + paint.setPen( QPen(Qt::black, 1) ); + paint.drawRect(rect); + paint.end();*/ + + // rect.bottomLeft() and rect.bottomRight() must be VISIBLE : + // show the menu 1 pixel more BOTTOM (add 1 in Y) : + QPoint point = rect.bottomLeft() + QPoint(0, 1); + if (point.y() + menuSize.height() < desktopHeight) { // First try at bottom + if (centered) + point = QPoint( rect.center().x() - menuSize.width() / 2, point.y() ); + else if (point.x() + menuSize.width() < desktopWidth) // Then, try at bottom-left + /*point is already set*/; + else // Overwise, at bottom-right + point = rect.bottomRight() - QPoint(menuSize.width(), - 1); + // Idem : rect.topLeft() and rect.topRight() must be VISIBLE : + // show the menu 1 pixel more TOP (substract 1 in Y) : + } else { // Overwize, try at top + if (centered) + point = QPoint( rect.center().x() - menuSize.width() / 2, rect.top() - menuSize.height() - 1 ); + else if (point.x() + menuSize.width() < desktopWidth) // Then, try at top-left + point = rect.topLeft() - QPoint(0, menuSize.height() + 1); + else // Overwise, at top-right + point = rect.topRight() - QPoint(menuSize.width(), menuSize.height() + 1); + } + + // No need to clip : it will be done by menu.exec(...) + + // And show the menu : + menu.exec( point + QPoint(0, MENU_Y_OFFSET) ); // Stupid offset (Qt bug ?) : we should show the menus 2 pixels more bottom ! +} + +void PopupMenu::execAtRectRight(QPopupMenu &menu, const QRect &rect, bool centered) +{ + QSize menuSize = menu.sizeHint() - QSize(1, 1); // A size is [1..n] => We want two lengths that are [0..(n-1)] + int desktopWidth = kapp->desktop()->width(); // to be compared/added/substracted with QRects/QPoints... + int desktopHeight = kapp->desktop()->height(); + + /** Paint the rect on the screen (desktop). + * For test purpose only (to be sure the passed rectangle is right). + * Comment this (and the qpainter and qpen includes) for a non-debug version. + */ + /*QPainter paint(kapp->desktop(), kapp->desktop(), true); + paint.setPen( QPen(Qt::black, 1) ); + paint.drawRect(rect); + paint.end();*/ + + // rect.topRight() and rect.topLeft() must be VISIBLE : + // show the menu 1 pixel more RIGHT (add 1 in X) : + QPoint point = rect.topRight() + QPoint(1, 0); + if (point.x() + menuSize.width() < desktopWidth) { // First try at right + if (centered) + point = QPoint( point.x(), rect.center().y() - menuSize.height() / 2 ); + else if (point.y() + menuSize.height() < desktopHeight) // Then, try at top-right + /*point is already set*/; + else // Overwise, at top-left + point = rect.bottomRight() - QPoint(-1, menuSize.height()); + // Idem : rect.topLeft() and rect.bottomLeft() must be VISIBLE : + // show the menu 1 pixel more LEFT (substract 1 in X) : + } else { // Overwize, try at top + if (centered) + point = QPoint( rect.left() - menuSize.width() - 1, rect.center().y() - menuSize.height() / 2 ); + else if (point.y() + menuSize.height() < desktopHeight) // Then, try at top-left + point = rect.topLeft() - QPoint(menuSize.width() + 1, 0); + else // Overwise, at bottom-left + point = rect.bottomLeft() - QPoint(menuSize.width() + 1, menuSize.height()); + } + + // No need to clip : it will be done by menu.exec(...) + + // And show the menu : + menu.exec( point + QPoint(0, MENU_Y_OFFSET) ); // Stupid offset (Qt bug ?) : we should show the menus 2 pixels more bottom ! +} + +// # i n c l u d e " p o p u p m e n u . m o c " // Comment this if you don't compile PopupMenuTest class diff --git a/src/popupmenu.h b/src/popupmenu.h new file mode 100644 index 0000000..fa92f39 --- /dev/null +++ b/src/popupmenu.h @@ -0,0 +1,123 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef POPUPMENU_H +#define POPUPMENU_H + +class QPopupMenu; +class QRect; + +/** QPopupMenu/KPopupMenu doesn't provide metod to exec a menu + * at a given rectangle ! + * eg, popup at bottom of a rectangle, and at top if not possible... + * @author Sébastien Laoût + */ +namespace PopupMenu +{ + /** Show the popup menu centered into rect. + */ + void execAtRectCenter(QPopupMenu &menu, const QRect &rect); + + /** Show the popup menu at left-bottom of rect, or at right-bottom + * if not possible (not enought place). + * If it isn't possible to show it at bottom, it will be shown on + * top of rect (top-left if possible, if not it will be top-right). + * If center is true, it will try to horizontaly center the popup with + * rect, so it will try two positions : bottom center and then top center. + */ + void execAtRectBottom(QPopupMenu &menu, const QRect &rect, bool centered = false); + + /** Idem execAtRectBottom but on the right or left sides, + * prior aligned with the top of the rect, and at the bottom + * if not possible. + * If center is true, it will try to vertically center the popup with + * rect, so it will try two positions : right center and then left center. + */ + void execAtRectRight(QPopupMenu &menu, const QRect &rect, bool centered = false); +} + +/** Test window of PopupMenu methods. + * Just include popupmenu.h in a main Qt application and call + * new PopupMenuTest(); + * Click the window for more explications. + * Resize it to test particular cases. + * (Comment the class, if it isn't done yet to do not compile it :-) ). + * @author Sébastien Laoût + */ + +/***** + +#include +#include +#include +#include + +c l a s s P o p u p M e n u T e s t : p u b l i c Q W i d g e t +{ + Q _ O B J E C T + p u b l i c: + PopupMenuTest() + : QWidget(0) + { + setCaption("Click to test!"); + show(); + } + + void mousePressEvent(QMouseEvent *event) + { + QPopupMenu menu; + QRect rect( mapToGlobal(QPoint(0,0)), size() ); + + menu.insertItem("A test of popup menu!"); + menu.insertItem("This menu contain some items"); + menu.insertItem("Resize the window as you want and:"); + menu.insertItem("- click : execAtRectCenter"); + menu.insertItem("- right click : execAtRectBottom"); + menu.insertItem("- middle click : execAtRectRight"); + menu.insertItem("- Shift + right click : execAtRectBottom centered"); + menu.insertItem("- Shift + middle click : execAtRectRight centered"); + + if (event->button() & Qt::LeftButton) + PopupMenu::execAtRectCenter(menu, rect); + else if ((event->button() & Qt::RightButton) && (event->state() & Qt::ShiftButton)) + PopupMenu::execAtRectBottom(menu, rect, true); + else if (event->button() & Qt::RightButton) + PopupMenu::execAtRectBottom(menu, rect); + else if ((event->button() & Qt::MidButton) && (event->state() & Qt::ShiftButton)) + PopupMenu::execAtRectRight(menu, rect, true); + else if (event->button() & Qt::MidButton) + PopupMenu::execAtRectRight(menu, rect); + } + + void paintEvent(QPaintEvent*) + { + QPainter paint(this); + paint.setPen(paletteBackgroundColor()); + paint.drawRect(rect()); + paint.drawWinFocusRect(rect()); + paint.setPen( QPen(Qt::black, 1) ); + paint.drawLine( rect().topLeft(), rect().bottomRight() ); + paint.drawLine( rect().topRight(), rect().bottomLeft() ); + } +}; + +*****/ + +#endif // POPUPMENU_H diff --git a/src/qeffects.cpp b/src/qeffects.cpp new file mode 100644 index 0000000..4658373 --- /dev/null +++ b/src/qeffects.cpp @@ -0,0 +1,602 @@ +#if 0 + +// Note: this file has been copied from the Qt source. +// Those classes are normally used internally in Qt +// but we need them for immitate the roll-over effect of QComboBox. +// +// A portion of code has been added. It's underlined by "THIS CODE WAS ADDED:". +// +// And some class definitions have been moved from this file to qeffects.h +// Theire old position is indicated by "REMOVED CLASS DEFINITION HERE (MOVED TO qeffects.h)" + +/**************************************************************************** +** $Id: qt/qeffects.cpp 3.3.4 edited Dec 10 10:13 $ +** +** Implementation of QEffects functions +** +** Created : 000621 +** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "qapplication.h" +#ifndef QT_NO_EFFECTS +#include "qwidget.h" +#include "qeffects.h" +#include "qpixmap.h" +#include "qimage.h" +#include "qtimer.h" +#include "qdatetime.h" +#include "qguardedptr.h" +#include "qscrollview.h" + +/* REMOVED CLASS DEFINITION HERE (MOVED TO qeffects.h) */ + +static QAlphaWidget* q_blend = 0; + +/* + Constructs a QAlphaWidget. +*/ +QAlphaWidget::QAlphaWidget( QWidget* w, WFlags f ) + : QWidget( QApplication::desktop()->screen(QApplication::desktop()->screenNumber(w)), + "qt internal alpha effect widget", f ) +{ +#if 1 //ndef Q_WS_WIN + setEnabled( FALSE ); +#endif + + pm.setOptimization( QPixmap::BestOptim ); + setBackgroundMode( NoBackground ); + widget = (QAccessWidget*)w; + alpha = 0; +} + +/* + \reimp +*/ +void QAlphaWidget::paintEvent( QPaintEvent* ) +{ + bitBlt( this, QPoint(0,0), &pm ); +} + +/* + Starts the alphablending animation. + The animation will take about \a time ms +*/ +void QAlphaWidget::run( int time ) +{ + duration = time; + + if ( duration < 0 ) + duration = 150; + + if ( !widget ) + return; + + elapsed = 0; + checkTime.start(); + + showWidget = TRUE; + qApp->installEventFilter( this ); + + widget->setWState( WState_Visible ); + + move( widget->geometry().x(),widget->geometry().y() ); + resize( widget->size().width(), widget->size().height() ); + + front = QImage( widget->size(), 32 ); + front = QPixmap::grabWidget( widget ); + + back = QImage( widget->size(), 32 ); + back = QPixmap::grabWindow( QApplication::desktop()->winId(), + widget->geometry().x(), widget->geometry().y(), + widget->geometry().width(), widget->geometry().height() ); + + if ( !back.isNull() && checkTime.elapsed() < duration / 2 ) { + mixed = back.copy(); + pm = mixed; + show(); + setEnabled(FALSE); + + connect( &anim, SIGNAL(timeout()), this, SLOT(render())); + anim.start( 1 ); + } else { + duration = 0; + render(); + } +} + +/* + \reimp +*/ +bool QAlphaWidget::eventFilter( QObject* o, QEvent* e ) +{ + switch ( e->type() ) { + case QEvent::Move: + if ( o != widget ) + break; + move( widget->geometry().x(),widget->geometry().y() ); + update(); + break; + case QEvent::Hide: + case QEvent::Close: + if ( o != widget ) + break; + case QEvent::MouseButtonPress: +#ifndef QT_NO_SCROLLVIEW + if ( ::qt_cast(o) ) + break; +#endif + case QEvent::MouseButtonDblClick: + setEnabled(TRUE); + showWidget = FALSE; + render(); + break; + case QEvent::KeyPress: + { + QKeyEvent *ke = (QKeyEvent*)e; + if ( ke->key() == Key_Escape ) + showWidget = FALSE; + else + duration = 0; + render(); + break; + } + default: + break; + } + return QWidget::eventFilter( o, e ); +} + +/* + \reimp +*/ +void QAlphaWidget::closeEvent( QCloseEvent *e ) +{ + e->accept(); + if ( !q_blend ) + return; + + showWidget = FALSE; + render(); + + QWidget::closeEvent( e ); +} + +/* + Render alphablending for the time elapsed. + + Show the blended widget and free all allocated source + if the blending is finished. +*/ +void QAlphaWidget::render() +{ + int tempel = checkTime.elapsed(); + if ( elapsed >= tempel ) + elapsed++; + else + elapsed = tempel; + + if ( duration != 0 ) + alpha = tempel / double(duration); + else + alpha = 1; + if ( alpha >= 1 || !showWidget) { + anim.stop(); + qApp->removeEventFilter( this ); + + if ( widget ) { + if ( !showWidget ) { +#ifdef Q_WS_WIN + setEnabled(TRUE); + setFocus(); +#endif + widget->hide(); + widget->setWState( WState_ForceHide ); + widget->clearWState( WState_Visible ); + } else if ( duration ) { + BackgroundMode bgm = widget->backgroundMode(); + QColor erc = widget->eraseColor(); + const QPixmap *erp = widget->erasePixmap(); + + widget->clearWState( WState_Visible ); + widget->setBackgroundMode( NoBackground ); + widget->show(); + if ( bgm != FixedColor && bgm != FixedPixmap ) { + widget->clearWState( WState_Visible ); // prevent update in setBackgroundMode + widget->setBackgroundMode( bgm ); + widget->setWState( WState_Visible ); + } + if ( erc.isValid() ) { + widget->setEraseColor( erc ); + } else if ( erp ) { + widget->setErasePixmap( *erp ); + } + } else { + widget->clearWState( WState_Visible ); + widget->show(); + } + } + q_blend = 0; + deleteLater(); + } else { + if (widget) + widget->clearWState( WState_ForceHide ); + alphaBlend(); + pm = mixed; + repaint( FALSE ); + } +} + +/* + Calculate an alphablended image. +*/ +void QAlphaWidget::alphaBlend() +{ + const double ia = 1-alpha; + const int sw = front.width(); + const int sh = front.height(); + switch( front.depth() ) { + case 32: + { + Q_UINT32** md = (Q_UINT32**)mixed.jumpTable(); + Q_UINT32** bd = (Q_UINT32**)back.jumpTable(); + Q_UINT32** fd = (Q_UINT32**)front.jumpTable(); + + for (int sy = 0; sy < sh; sy++ ) { + Q_UINT32* bl = ((Q_UINT32*)bd[sy]); + Q_UINT32* fl = ((Q_UINT32*)fd[sy]); + for (int sx = 0; sx < sw; sx++ ) { + Q_UINT32 bp = bl[sx]; + Q_UINT32 fp = fl[sx]; + + ((Q_UINT32*)(md[sy]))[sx] = qRgb(int (qRed(bp)*ia + qRed(fp)*alpha), + int (qGreen(bp)*ia + qGreen(fp)*alpha), + int (qBlue(bp)*ia + qBlue(fp)*alpha) ); + } + } + } + default: + break; + } +} + +/* REMOVED CLASS DEFINITION HERE (MOVED TO qeffects.h) */ + +static QRollEffect* q_roll = 0; + +/* + Construct a QRollEffect widget. +*/ +QRollEffect::QRollEffect( QWidget* w, WFlags f, DirFlags orient ) + : QWidget( QApplication::desktop()->screen(QApplication::desktop()->screenNumber(w)), + "qt internal roll effect widget", f ), orientation(orient) +{ +#if 1 //ndef Q_WS_WIN + setEnabled( FALSE ); +#endif + widget = (QAccessWidget*) w; + Q_ASSERT( widget ); + + setBackgroundMode( NoBackground ); + + if ( widget->testWState( WState_Resized ) ) { + totalWidth = widget->width(); + totalHeight = widget->height(); + } else { + totalWidth = widget->sizeHint().width(); + totalHeight = widget->sizeHint().height(); + } + + currentHeight = totalHeight; + currentWidth = totalWidth; + + if ( orientation & (RightScroll|LeftScroll) ) + currentWidth = 0; + if ( orientation & (DownScroll|UpScroll) ) + currentHeight = 0; + + pm.setOptimization( QPixmap::BestOptim ); + pm = QPixmap::grabWidget( widget ); +} + +/* + \reimp +*/ +void QRollEffect::paintEvent( QPaintEvent* ) +{ + int x = orientation & RightScroll ? QMIN(0, currentWidth - totalWidth) : 0; + int y = orientation & DownScroll ? QMIN(0, currentHeight - totalHeight) : 0; + + bitBlt( this, x, y, &pm, + 0, 0, pm.width(), pm.height(), CopyROP, TRUE ); +} + +/* + \reimp +*/ +bool QRollEffect::eventFilter( QObject* o, QEvent* e ) +{ + switch ( e->type() ) { + case QEvent::Move: + if ( o != widget ) + break; + move( widget->geometry().x(),widget->geometry().y() ); + update(); + break; + case QEvent::Hide: + case QEvent::Close: + if ( o != widget || done ) + break; + setEnabled(TRUE); + showWidget = FALSE; + done = TRUE; + scroll(); + break; + case QEvent::MouseButtonPress: +#ifndef QT_NO_SCROLLVIEW + if ( ::qt_cast(o) ) + break; +#endif + case QEvent::MouseButtonDblClick: + if ( done ) + break; + setEnabled(TRUE); + showWidget = FALSE; + done = TRUE; + scroll(); + break; + case QEvent::KeyPress: + { + QKeyEvent *ke = (QKeyEvent*)e; + + + /* THIS CODE WAS ADDED: ************** */ + if (ke->key() == Qt::Key_Enter) /*** Because we are simulating an Enter key press. */ + break; /*** So we should not car about it and continue the animation. */ + /************************************* */ + + + if ( ke->key() == Key_Escape ) + showWidget = FALSE; + done = TRUE; + scroll(); + break; + } + default: + break; + } + return QWidget::eventFilter( o, e ); +} + +/* + \reimp +*/ +void QRollEffect::closeEvent( QCloseEvent *e ) +{ + e->accept(); + if ( done ) + return; + showWidget = FALSE; + done = TRUE; + scroll(); + + QWidget::closeEvent( e ); +} + +/* + Start the animation. + + The animation will take about \a time ms, or is + calculated if \a time is negative +*/ +void QRollEffect::run( int time ) +{ + if ( !widget ) + return; + + duration = time; + elapsed = 0; + + if ( duration < 0 ) { + int dist = 0; + if ( orientation & (RightScroll|LeftScroll) ) + dist += totalWidth - currentWidth; + if ( orientation & (DownScroll|UpScroll) ) + dist += totalHeight - currentHeight; + duration = QMIN( QMAX( dist/3, 50 ), 120 ); + } + + connect( &anim, SIGNAL(timeout()), this, SLOT(scroll())); + + widget->setWState( WState_Visible ); + + move( widget->geometry().x(),widget->geometry().y() ); + resize( QMIN( currentWidth, totalWidth ), QMIN( currentHeight, totalHeight ) ); + + show(); + setEnabled(FALSE); + + qApp->installEventFilter( this ); + + showWidget = TRUE; + done = FALSE; + anim.start( 1 ); + checkTime.start(); +} + +/* + Roll according to the time elapsed. +*/ +void QRollEffect::scroll() +{ + if ( !done && widget) { + widget->clearWState( WState_ForceHide ); + int tempel = checkTime.elapsed(); + if ( elapsed >= tempel ) + elapsed++; + else + elapsed = tempel; + + if ( currentWidth != totalWidth ) { + currentWidth = totalWidth * (elapsed/duration) + + ( 2 * totalWidth * (elapsed%duration) + duration ) + / ( 2 * duration ); + // equiv. to int( (totalWidth*elapsed) / duration + 0.5 ) + done = (currentWidth >= totalWidth); + } + if ( currentHeight != totalHeight ) { + currentHeight = totalHeight * (elapsed/duration) + + ( 2 * totalHeight * (elapsed%duration) + duration ) + / ( 2 * duration ); + // equiv. to int( (totalHeight*elapsed) / duration + 0.5 ) + done = (currentHeight >= totalHeight); + } + done = ( currentHeight >= totalHeight ) && + ( currentWidth >= totalWidth ); + + int w = totalWidth; + int h = totalHeight; + int x = widget->geometry().x(); + int y = widget->geometry().y(); + + if ( orientation & RightScroll || orientation & LeftScroll ) + w = QMIN( currentWidth, totalWidth ); + if ( orientation & DownScroll || orientation & UpScroll ) + h = QMIN( currentHeight, totalHeight ); + + setUpdatesEnabled( FALSE ); + if ( orientation & UpScroll ) + y = widget->geometry().y() + QMAX( 0, totalHeight - currentHeight ); + if ( orientation & LeftScroll ) + x = widget->geometry().x() + QMAX( 0, totalWidth - currentWidth ); + if ( orientation & UpScroll || orientation & LeftScroll ) + move( x, y ); + + resize( w, h ); + setUpdatesEnabled( TRUE ); + repaint( FALSE ); + } + if ( done ) { + anim.stop(); + qApp->removeEventFilter( this ); + if ( widget ) { + if ( !showWidget ) { +#ifdef Q_WS_WIN + setEnabled(TRUE); + setFocus(); +#endif + widget->hide(); + widget->setWState( WState_ForceHide ); + widget->clearWState( WState_Visible ); + } else { + BackgroundMode bgm = widget->backgroundMode(); + QColor erc = widget->eraseColor(); + const QPixmap *erp = widget->erasePixmap(); + + widget->clearWState( WState_Visible ); + widget->setBackgroundMode( NoBackground ); + widget->show(); + if ( bgm != FixedColor && bgm != FixedPixmap ) { + widget->clearWState( WState_Visible ); // prevent update in setBackgroundMode + widget->setBackgroundMode( bgm ); + widget->setWState( WState_Visible ); + } + if ( erc.isValid() ) { + widget->setEraseColor( erc ); + } else if ( erp ) { + widget->setErasePixmap( *erp ); + } + } + } + q_roll = 0; + deleteLater(); + } +} + +/* + Delete this after timeout +*/ + +#include "qeffects.moc" + +/*! + Scroll widget \a w in \a time ms. \a orient may be 1 (vertical), 2 + (horizontal) or 3 (diagonal). + */ +void qScrollEffect( QWidget* w, QEffects::DirFlags orient, int time ) +{ + if ( q_roll ) { + delete q_roll; + q_roll = 0; + } + + qApp->sendPostedEvents( w, QEvent::Move ); + qApp->sendPostedEvents( w, QEvent::Resize ); +#ifdef Q_WS_X11 + uint flags = Qt::WStyle_Customize | Qt::WNoAutoErase | Qt::WStyle_StaysOnTop + | (w->isPopup() ? Qt::WType_Popup : (Qt::WX11BypassWM | Qt::WStyle_Tool)); +#else + uint flags = Qt::WStyle_Customize | Qt::WType_Popup | Qt::WX11BypassWM | Qt::WNoAutoErase | Qt::WStyle_StaysOnTop; +#endif + + // those can popups - they would steal the focus, but are disabled + q_roll = new QRollEffect( w, flags, orient ); + q_roll->run( time ); +} + +/*! + Fade in widget \a w in \a time ms. + */ +void qFadeEffect( QWidget* w, int time ) +{ + if ( q_blend ) { + delete q_blend; + q_blend = 0; + } + + qApp->sendPostedEvents( w, QEvent::Move ); + qApp->sendPostedEvents( w, QEvent::Resize ); + +#ifdef Q_WS_X11 + uint flags = Qt::WStyle_Customize | Qt::WNoAutoErase | Qt::WStyle_StaysOnTop + | (w->isPopup() ? Qt::WType_Popup : (Qt::WX11BypassWM | Qt::WStyle_Tool)); +#else + uint flags = Qt::WStyle_Customize | Qt::WType_Popup | Qt::WX11BypassWM | Qt::WNoAutoErase | Qt::WStyle_StaysOnTop; +#endif + + // those can popups - they would steal the focus, but are disabled + q_blend = new QAlphaWidget( w, flags ); + + q_blend->run( time ); +} +#endif //QT_NO_EFFECTS + +#endif // #if 0 diff --git a/src/qeffects.h b/src/qeffects.h new file mode 100644 index 0000000..b898ad4 --- /dev/null +++ b/src/qeffects.h @@ -0,0 +1,195 @@ +#if 0 + +// Note: this file has been copied from the Qt source. +// Those classes are normally used internally in Qt +// but we need them for immitate the roll-over effect of QComboBox. +// +// Some class definitions have been moved from qeffects.cpp to this file. +// They are framed with the comment "MOVED FROM qeffect.cpp" + +/**************************************************************************** +** $Id: qt/qeffects_p.h 3.3.4 edited May 27 2003 $ +** +** Definition of QEffects functions +** +** Created : 000621 +** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef QEFFECTS_P_H +#define QEFFECTS_P_H + + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qeffects.cpp, qcombobox.cpp, qpopupmenu.cpp and qtooltip.cpp. +// This header file may change from version to version without notice, +// or even be removed. +// +// We mean it. +// +// + +#ifndef QT_H +#include "qnamespace.h" +#endif // QT_H + +#ifndef QT_NO_EFFECTS +class QWidget; + +struct QEffects +{ + enum Direction { + LeftScroll = 0x0001, + RightScroll = 0x0002, + UpScroll = 0x0004, + DownScroll = 0x0008 + }; + + typedef uint DirFlags; +}; + +extern void Q_EXPORT qScrollEffect( QWidget*, QEffects::DirFlags dir = QEffects::DownScroll, int time = -1 ); +extern void Q_EXPORT qFadeEffect( QWidget*, int time = -1 ); + + +/******************* MOVED FROM qeffect.cpp: */ + +#include "qguardedptr.h" +#include "qdatetime.h" +#include "qtimer.h" +#include "qpixmap.h" +#include "qimage.h" + +/* + Internal class to get access to protected QWidget-members +*/ + +class QAccessWidget : public QWidget +{ + friend class QAlphaWidget; + friend class QRollEffect; + public: + QAccessWidget( QWidget* parent=0, const char* name=0, WFlags f = 0 ) + : QWidget( parent, name, f ) {} +}; + +/* + Internal class QAlphaWidget. + + The QAlphaWidget is shown while the animation lasts + and displays the pixmap resulting from the alpha blending. +*/ + +class QAlphaWidget: public QWidget, private QEffects +{ + Q_OBJECT + public: + QAlphaWidget( QWidget* w, WFlags f = 0 ); + + void run( int time ); + + protected: + void paintEvent( QPaintEvent* e ); + void closeEvent( QCloseEvent* ); + bool eventFilter( QObject* o, QEvent* e ); + void alphaBlend(); + + protected slots: + void render(); + + private: + QPixmap pm; + double alpha; + QImage back; + QImage front; + QImage mixed; + QGuardedPtr widget; + int duration; + int elapsed; + bool showWidget; + QTimer anim; + QTime checkTime; +}; + +/* + Internal class QRollEffect + + The QRollEffect widget is shown while the animation lasts + and displays a scrolling pixmap. +*/ + +class QRollEffect : public QWidget, private QEffects +{ + Q_OBJECT + public: + QRollEffect( QWidget* w, WFlags f, DirFlags orient ); + + void run( int time ); + + protected: + void paintEvent( QPaintEvent* ); + bool eventFilter( QObject*, QEvent* ); + void closeEvent( QCloseEvent* ); + + private slots: + void scroll(); + + private: + QGuardedPtr widget; + + int currentHeight; + int currentWidth; + int totalHeight; + int totalWidth; + + int duration; + int elapsed; + bool done; + bool showWidget; + int orientation; + + QTimer anim; + QTime checkTime; + + QPixmap pm; +}; + +/******************************/ + +#endif // QT_NO_EFFECTS + +#endif // QEFFECTS_P_H + +#endif // #if 0 diff --git a/src/regiongrabber.cpp b/src/regiongrabber.cpp new file mode 100644 index 0000000..f7924e6 --- /dev/null +++ b/src/regiongrabber.cpp @@ -0,0 +1,180 @@ +// Code from KSnapshot! + +/* + Copyright (C) 2003 Nadeem Hasan + + This library is free software; you can redistribute it and/or + modify it under the terms of the 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 + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "regiongrabber.h" + +#include +#include +#include +#include +#include +#include + +#include + +SizeTip::SizeTip( QWidget *parent, const char *name ) + : QLabel( parent, name, WStyle_Customize | WX11BypassWM | + WStyle_StaysOnTop | WStyle_NoBorder | WStyle_Tool ) +{ + setMargin( 2 ); + setIndent( 0 ); + setFrameStyle( QFrame::Plain | QFrame::Box ); + + setPalette( QToolTip::palette() ); +} + +void SizeTip::setTip( const QRect &rect ) +{ + QString tip = QString( "%1x%2" ).arg( rect.width() ) + .arg( rect.height() ); + + setText( tip ); + adjustSize(); + + positionTip( rect ); +} + +void SizeTip::positionTip( const QRect &rect ) +{ + QRect tipRect = geometry(); + tipRect.moveTopLeft( QPoint( 0, 0 ) ); + + if ( rect.intersects( tipRect ) ) + { + QRect deskR = KGlobalSettings::desktopGeometry( QPoint( 0, 0 ) ); + + tipRect.moveCenter( QPoint( deskR.width()/2, deskR.height()/2 ) ); + if ( !rect.contains( tipRect, true ) && rect.intersects( tipRect ) ) + tipRect.moveBottomRight( geometry().bottomRight() ); + } + + move( tipRect.topLeft() ); +} + +RegionGrabber::RegionGrabber(int delay) + : QWidget( 0, 0 ), + mouseDown( false ), sizeTip( 0L ) +{ + sizeTip = new SizeTip( ( QWidget * )0L ); + + tipTimer = new QTimer( this ); + connect( tipTimer, SIGNAL( timeout() ), SLOT( updateSizeTip() ) ); + + QTimer::singleShot( delay, this, SLOT( initGrabber() ) ); +} + +RegionGrabber::~RegionGrabber() +{ + delete sizeTip; +} + +void RegionGrabber::initGrabber() +{ + pixmap = QPixmap::grabWindow( qt_xrootwin() ); + setPaletteBackgroundPixmap( pixmap ); + + QDesktopWidget desktopWidget; + QRect desktopSize; + if ( desktopWidget.isVirtualDesktop() ) + desktopSize = desktopWidget.geometry(); + else + desktopSize = desktopWidget.screenGeometry( qt_xrootwin() ); + + setGeometry( desktopSize ); + showFullScreen(); + + QApplication::setOverrideCursor( crossCursor ); +} + +void RegionGrabber::mousePressEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton ) + { + mouseDown = true; + grabRect = QRect( e->pos(), e->pos() ); + drawRubber(); + } +} + +void RegionGrabber::mouseMoveEvent( QMouseEvent *e ) +{ + if ( mouseDown ) + { + sizeTip->hide(); + tipTimer->start( 250, true ); + + drawRubber(); + grabRect.setBottomRight( e->pos() ); + drawRubber(); + } +} + +void RegionGrabber::mouseReleaseEvent( QMouseEvent *e ) +{ + mouseDown = false; + drawRubber(); + sizeTip->hide(); + + grabRect.setBottomRight( e->pos() ); + grabRect = grabRect.normalize(); + + QPixmap region = QPixmap::grabWindow( winId(), grabRect.x(), grabRect.y(), + grabRect.width(), grabRect.height() ); + + QApplication::restoreOverrideCursor(); + + emit regionGrabbed( region ); +} + +void RegionGrabber::keyPressEvent( QKeyEvent *e ) +{ + if ( e->key() == Key_Escape ) + { + QApplication::restoreOverrideCursor(); + emit regionGrabbed( QPixmap() ); + } + else + e->ignore(); +} + +void RegionGrabber::updateSizeTip() +{ + QRect rect = grabRect.normalize(); + + sizeTip->setTip( rect ); + sizeTip->show(); +} + +void RegionGrabber::drawRubber() +{ + QPainter p; + p.begin( this ); + p.setRasterOp( NotROP ); + p.setPen( QPen( color0, 1 ) ); + p.setBrush( NoBrush ); + + style().drawPrimitive( QStyle::PE_FocusRect, &p, grabRect, colorGroup(), + QStyle::Style_Default, QStyleOption( colorGroup().base() ) ); + + p.end(); +} + +#include "regiongrabber.moc" diff --git a/src/regiongrabber.h b/src/regiongrabber.h new file mode 100644 index 0000000..528c4ff --- /dev/null +++ b/src/regiongrabber.h @@ -0,0 +1,72 @@ +// Code from KSnapshot! + +/* + Copyright (C) 2003 Nadeem Hasan + + This library is free software; you can redistribute it and/or + modify it under the terms of the 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 + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef REGIONGRABBER_H +#define REGIONGRABBER_H + +#include +#include + +class QTimer; + +class SizeTip : public QLabel +{ + public: + SizeTip( QWidget *parent, const char *name=0 ); + ~SizeTip() {} + + void setTip( const QRect &rect ); + void positionTip( const QRect &rect ); +}; + +class RegionGrabber : public QWidget +{ + Q_OBJECT + + public: + RegionGrabber(int delay); + ~RegionGrabber(); + + protected slots: + void initGrabber(); + void updateSizeTip(); + + signals: + void regionGrabbed( const QPixmap & ); + + protected: + void mousePressEvent( QMouseEvent *e ); + void mouseReleaseEvent( QMouseEvent *e ); + void mouseMoveEvent( QMouseEvent *e ); + void keyPressEvent( QKeyEvent *e ); + + void drawRubber(); + + bool mouseDown; + QRect grabRect; + QPixmap pixmap; + + SizeTip *sizeTip; + QTimer *tipTimer; +}; + +#endif // REGIONGRABBER_H + diff --git a/src/settings.cpp b/src/settings.cpp new file mode 100644 index 0000000..218dd0a --- /dev/null +++ b/src/settings.cpp @@ -0,0 +1,991 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "basket.h" +#include "linklabel.h" +#include "settings.h" +#include "variouswidgets.h" +#include "note.h" + +/** Settings */ + +// General: // TODO: Use this grouping everywhere! +bool Settings::s_useSystray = true; +bool Settings::s_usePassivePopup = true; +bool Settings::s_playAnimations = true; +bool Settings::s_showNotesToolTip = true; // TODO: RENAME: useBasketTooltips +bool Settings::s_confirmNoteDeletion = true; +bool Settings::s_bigNotes = false; +bool Settings::s_autoBullet = true; +bool Settings::s_exportTextTags = true; +bool Settings::s_useGnuPGAgent = false; +bool Settings::s_treeOnLeft = true; +bool Settings::s_filterOnTop = true; +int Settings::s_defImageX = 300; +int Settings::s_defImageY = 200; +bool Settings::s_enableReLockTimeout = true; +int Settings::s_reLockTimeoutMinutes = 0; +int Settings::s_newNotesPlace = 1; +int Settings::s_viewTextFileContent = false; +int Settings::s_viewHtmlFileContent = false; +int Settings::s_viewImageFileContent = false; +int Settings::s_viewSoundFileContent = false; +// Applications: +bool Settings::s_htmlUseProg = false; // TODO: RENAME: s_*App (with KService!) +bool Settings::s_imageUseProg = true; +bool Settings::s_animationUseProg = true; +bool Settings::s_soundUseProg = false; +QString Settings::s_htmlProg = "quanta"; +QString Settings::s_imageProg = "kolourpaint"; +QString Settings::s_animationProg = "gimp"; +QString Settings::s_soundProg = ""; +// Addictive Features: +bool Settings::s_groupOnInsertionLine = false; +int Settings::s_middleAction = 0; +bool Settings::s_showIconInSystray = false; // TODO: RENAME: basketIconInSystray +bool Settings::s_hideOnMouseOut = false; +int Settings::s_timeToHideOnMouseOut = 0; +bool Settings::s_showOnMouseIn = false; +int Settings::s_timeToShowOnMouseIn = 1; +// Rememberings: +int Settings::s_defIconSize = 32; // TODO: RENAME: importIconSize +bool Settings::s_blinkedFilter = false; +bool Settings::s_startDocked = false; +int Settings::s_basketTreeWidth = -1; +bool Settings::s_welcomeBasketsAdded = false; +QString Settings::s_dataFolder = ""; +QDate Settings::s_lastBackup = QDate(); +QPoint Settings::s_mainWindowPosition = QPoint(); +QSize Settings::s_mainWindowSize = QSize(); +bool Settings::s_showEmptyBasketInfo = true; +bool Settings::s_spellCheckTextNotes = true; + +void Settings::loadConfig() +{ + LinkLook defaultSoundLook; + LinkLook defaultFileLook; + LinkLook defaultLocalLinkLook; + LinkLook defaultNetworkLinkLook; + LinkLook defaultLauncherLook; /* italic bold underlining color hoverColor iconSize preview */ + defaultSoundLook.setLook( false, false, LinkLook::Never, QColor(), QColor(), 32, LinkLook::None ); + defaultFileLook.setLook( false, false, LinkLook::Never, QColor(), QColor(), 32, LinkLook::TwiceIconSize ); + defaultLocalLinkLook.setLook( true, false, LinkLook::OnMouseHover, QColor(), QColor(), 22, LinkLook::TwiceIconSize ); + defaultNetworkLinkLook.setLook( false, false, LinkLook::OnMouseOutside, QColor(), QColor(), 16, LinkLook::None ); + defaultLauncherLook.setLook( false, true, LinkLook::Never, QColor(), QColor(), 48, LinkLook::None ); + + loadLinkLook(LinkLook::soundLook, "Sound Look", defaultSoundLook ); + loadLinkLook(LinkLook::fileLook, "File Look", defaultFileLook ); + loadLinkLook(LinkLook::localLinkLook, "Local Link Look", defaultLocalLinkLook ); + loadLinkLook(LinkLook::networkLinkLook, "Network Link Look", defaultNetworkLinkLook); + loadLinkLook(LinkLook::launcherLook, "Launcher Look", defaultLauncherLook ); + + KConfig* config = Global::config(); + config->setGroup("Main window"); // TODO: Split with a "System tray icon" group ! + setTreeOnLeft( config->readBoolEntry("treeOnLeft", true) ); + setFilterOnTop( config->readBoolEntry("filterOnTop", true) ); + setPlayAnimations( config->readBoolEntry("playAnimations", true) ); + setShowNotesToolTip( config->readBoolEntry("showNotesToolTip", true) ); + setBigNotes( config->readBoolEntry("bigNotes", false) ); + setConfirmNoteDeletion( config->readBoolEntry("confirmNoteDeletion", true) ); + setAutoBullet( config->readBoolEntry("autoBullet", true) ); + setExportTextTags( config->readBoolEntry("exportTextTags", true) ); + setUseGnuPGAgent( config->readBoolEntry("useGnuPGAgent", false) ); + setBlinkedFilter( config->readBoolEntry("blinkedFilter", false) ); + setEnableReLockTimeout( config->readNumEntry( "enableReLockTimeout", true) ); + setReLockTimeoutMinutes( config->readNumEntry( "reLockTimeoutMinutes", 0) ); + setUseSystray( config->readBoolEntry("useSystray", true) ); + setShowIconInSystray( config->readBoolEntry("showIconInSystray", false) ); + setStartDocked( config->readBoolEntry("startDocked", false) ); + setMiddleAction( config->readNumEntry( "middleAction", 0) ); + setGroupOnInsertionLine( config->readBoolEntry("groupOnInsertionLine", false) ); + setSpellCheckTextNotes( config->readBoolEntry("spellCheckTextNotes", true) ); + setHideOnMouseOut( config->readBoolEntry("hideOnMouseOut", false) ); + setTimeToHideOnMouseOut( config->readNumEntry( "timeToHideOnMouseOut", 0) ); + setShowOnMouseIn( config->readBoolEntry("showOnMouseIn", false) ); + setTimeToShowOnMouseIn( config->readNumEntry( "timeToShowOnMouseIn", 1) ); + setBasketTreeWidth( config->readNumEntry( "basketTreeWidth", -1) ); + setUsePassivePopup( config->readBoolEntry("usePassivePopup", true) ); + setWelcomeBasketsAdded( config->readBoolEntry("welcomeBasketsAdded", false) ); + setDataFolder( config->readPathEntry("dataFolder", "") ); + setLastBackup( config->readDateTimeEntry("lastBackup", new QDateTime()).date()); + setMainWindowPosition( config->readPointEntry("position" ) ); + setMainWindowSize( config->readSizeEntry( "size" ) ); + + config->setGroup("Notification Messages"); + setShowEmptyBasketInfo( config->readBoolEntry("emptyBasketInfo", true) ); + + config->setGroup("Programs"); + setIsHtmlUseProg( config->readBoolEntry("htmlUseProg", false) ); + setIsImageUseProg( config->readBoolEntry("imageUseProg", true) ); + setIsAnimationUseProg( config->readBoolEntry("animationUseProg", true) ); + setIsSoundUseProg( config->readBoolEntry("soundUseProg", false) ); + setHtmlProg( config->readEntry( "htmlProg", "quanta") ); + setImageProg( config->readEntry( "imageProg", "kolourpaint") ); + setAnimationProg( config->readEntry( "animationProg", "gimp") ); + setSoundProg( config->readEntry( "soundProg", "") ); + + config->setGroup("Note Addition"); + setNewNotesPlace( config->readNumEntry( "newNotesPlace", 1) ); + setViewTextFileContent( config->readBoolEntry("viewTextFileContent", false) ); + setViewHtmlFileContent( config->readBoolEntry("viewHtmlFileContent", false) ); + setViewImageFileContent( config->readBoolEntry("viewImageFileContent", true) ); + setViewSoundFileContent( config->readBoolEntry("viewSoundFileContent", true) ); + + config->setGroup("Insert Note Default Values"); + setDefImageX( config->readNumEntry( "defImageX", 300) ); + setDefImageY( config->readNumEntry( "defImageY", 200) ); + setDefIconSize( config->readNumEntry( "defIconSize", 32) ); + + config->setGroup("MainWindow Toolbar mainToolBar"); + // The first time we start, we define "Text Alongside Icons" for the main toolbar. + // After that, the user is free to hide the text from the icons or customize as he/she want. + // But it is a good default (Fitt's Laws, better looking, less "empty"-feeling), especially for this application. +// if (!config->readBoolEntry("alreadySetIconTextRight", false)) { +// config->writeEntry( "IconText", "IconTextRight" ); +// config->writeEntry( "alreadySetIconTextRight", true ); +// } + if (!config->readBoolEntry("alreadySetToolbarSettings", false)) { + config->writeEntry("IconText", "IconOnly"); // In 0.6.0 Alpha versions, it was made "IconTextRight". We're back to IconOnly + config->writeEntry("Index", "0"); // Make sure the main toolbar is the first... + config->setGroup("MainWindow Toolbar richTextEditToolBar"); + config->writeEntry("Position", "Top"); // In 0.6.0 Alpha versions, it was made "Bottom" + config->writeEntry("Index", "1"); // ... and the rich text toolbar is on the right of the main toolbar + config->setGroup("MainWindow Toolbar mainToolBar"); + config->writeEntry("alreadySetToolbarSettings", true); + } +} + +void Settings::saveConfig() +{ + saveLinkLook(LinkLook::soundLook, "Sound Look" ); + saveLinkLook(LinkLook::fileLook, "File Look" ); + saveLinkLook(LinkLook::localLinkLook, "Local Link Look" ); + saveLinkLook(LinkLook::networkLinkLook, "Network Link Look"); + saveLinkLook(LinkLook::launcherLook, "Launcher Look" ); + + KConfig* config = Global::config(); + config->setGroup("Main window"); + config->writeEntry( "treeOnLeft", treeOnLeft() ); + config->writeEntry( "filterOnTop", filterOnTop() ); + config->writeEntry( "playAnimations", playAnimations() ); + config->writeEntry( "showNotesToolTip", showNotesToolTip() ); + config->writeEntry( "confirmNoteDeletion", confirmNoteDeletion() ); + config->writeEntry( "bigNotes", bigNotes() ); + config->writeEntry( "autoBullet", autoBullet() ); + config->writeEntry( "exportTextTags", exportTextTags() ); +#ifdef HAVE_LIBGPGME + if (KGpgMe::isGnuPGAgentAvailable()) + config->writeEntry( "useGnuPGAgent", useGnuPGAgent() ); +#endif + config->writeEntry( "blinkedFilter", blinkedFilter() ); + config->writeEntry( "enableReLockTimeout", enableReLockTimeout() ); + config->writeEntry( "reLockTimeoutMinutes", reLockTimeoutMinutes() ); + config->writeEntry( "useSystray", useSystray() ); + config->writeEntry( "showIconInSystray", showIconInSystray() ); + config->writeEntry( "startDocked", startDocked() ); + config->writeEntry( "middleAction", middleAction() ); + config->writeEntry( "groupOnInsertionLine", groupOnInsertionLine() ); + config->writeEntry( "spellCheckTextNotes", spellCheckTextNotes() ); + config->writeEntry( "hideOnMouseOut", hideOnMouseOut() ); + config->writeEntry( "timeToHideOnMouseOut", timeToHideOnMouseOut() ); + config->writeEntry( "showOnMouseIn", showOnMouseIn() ); + config->writeEntry( "timeToShowOnMouseIn", timeToShowOnMouseIn() ); + config->writeEntry( "basketTreeWidth", basketTreeWidth() ); + config->writeEntry( "usePassivePopup", usePassivePopup() ); + config->writeEntry( "welcomeBasketsAdded", welcomeBasketsAdded() ); + config->writePathEntry("dataFolder", dataFolder() ); + config->writeEntry( "lastBackup", QDateTime(lastBackup())); + config->writeEntry( "position", mainWindowPosition() ); + config->writeEntry( "size", mainWindowSize() ); + + config->setGroup("Notification Messages"); + config->writeEntry( "emptyBasketInfo", showEmptyBasketInfo() ); + + config->setGroup("Programs"); + config->writeEntry( "htmlUseProg", isHtmlUseProg() ); + config->writeEntry( "imageUseProg", isImageUseProg() ); + config->writeEntry( "animationUseProg", isAnimationUseProg() ); + config->writeEntry( "soundUseProg", isSoundUseProg() ); + config->writeEntry( "htmlProg", htmlProg() ); + config->writeEntry( "imageProg", imageProg() ); + config->writeEntry( "animationProg", animationProg() ); + config->writeEntry( "soundProg", soundProg() ); + + config->setGroup("Note Addition"); + config->writeEntry( "newNotesPlace", newNotesPlace() ); + config->writeEntry( "viewTextFileContent", viewTextFileContent() ); + config->writeEntry( "viewHtmlFileContent", viewHtmlFileContent() ); + config->writeEntry( "viewImageFileContent", viewImageFileContent() ); + config->writeEntry( "viewSoundFileContent", viewSoundFileContent() ); + + config->setGroup("Insert Note Default Values"); + config->writeEntry( "defImageX", defImageX() ); + config->writeEntry( "defImageY", defImageY() ); + config->writeEntry( "defIconSize", defIconSize() ); + + config->sync(); +} + +void Settings::loadLinkLook(LinkLook *look, const QString &name, const LinkLook &defaultLook) +{ + KConfig* config = Global::config(); + config->setGroup(name); + + QString underliningStrings[] = { "Always", "Never", "OnMouseHover", "OnMouseOutside" }; + QString defaultUnderliningString = underliningStrings[defaultLook.underlining()]; + + QString previewStrings[] = { "None", "IconSize", "TwiceIconSize", "ThreeIconSize" }; + QString defaultPreviewString = previewStrings[defaultLook.preview()]; + + bool italic = config->readBoolEntry( "italic", defaultLook.italic() ); + bool bold = config->readBoolEntry( "bold", defaultLook.bold() ); + QString underliningString = config->readEntry( "underlining", defaultUnderliningString ); + QColor color = config->readPropertyEntry( "color", defaultLook.color() ).asColor(); + QColor hoverColor = config->readPropertyEntry( "hoverColor", defaultLook.hoverColor() ).asColor(); + int iconSize = config->readNumEntry( "iconSize", defaultLook.iconSize() ); + QString previewString = config->readEntry( "preview", defaultPreviewString ); + + int underlining = 0; + if (underliningString == underliningStrings[1]) underlining = 1; + else if (underliningString == underliningStrings[2]) underlining = 2; + else if (underliningString == underliningStrings[3]) underlining = 3; + + int preview = 0; + if (previewString == previewStrings[1]) preview = 1; + else if (previewString == previewStrings[2]) preview = 2; + else if (previewString == previewStrings[3]) preview = 3; + + look->setLook(italic, bold, underlining, color, hoverColor, iconSize, preview); +} + +void Settings::saveLinkLook(LinkLook *look, const QString &name) +{ + KConfig* config = Global::config(); + config->setGroup(name); + + QString underliningStrings[] = { "Always", "Never", "OnMouseHover", "OnMouseOutside" }; + QString underliningString = underliningStrings[look->underlining()]; + + QString previewStrings[] = { "None", "IconSize", "TwiceIconSize", "ThreeIconSize" }; + QString previewString = previewStrings[look->preview()]; + + config->writeEntry( "italic", look->italic() ); + config->writeEntry( "bold", look->bold() ); + config->writeEntry( "underlining", underliningString ); + config->writeEntry( "color", look->color() ); + config->writeEntry( "hoverColor", look->hoverColor() ); + config->writeEntry( "iconSize", look->iconSize() ); + config->writeEntry( "preview", previewString ); +} + +void Settings::setBigNotes(bool big) +{ + if (big == s_bigNotes) + return; + + s_bigNotes = big; + // Big notes for accessibility reasons OR Standard small notes: + Note::NOTE_MARGIN = (big ? 4 : 2); + Note::INSERTION_HEIGHT = (big ? 5 : 3); + Note::EXPANDER_WIDTH = 9; + Note::EXPANDER_HEIGHT = 9; + Note::GROUP_WIDTH = 2*Note::NOTE_MARGIN + Note::EXPANDER_WIDTH; + Note::HANDLE_WIDTH = Note::GROUP_WIDTH; + Note::RESIZER_WIDTH = Note::GROUP_WIDTH; + Note::TAG_ARROW_WIDTH = 5 + (big ? 4 : 0); + Note::EMBLEM_SIZE = 16; + Note::MIN_HEIGHT = 2*Note::NOTE_MARGIN + Note::EMBLEM_SIZE; + + if (Global::bnpView) + Global::bnpView->relayoutAllBaskets(); +} + +void Settings::setAutoBullet(bool yes) +{ + s_autoBullet = yes; + if (Global::bnpView && Global::bnpView->currentBasket()) { + Global::bnpView->currentBasket()->editorPropertiesChanged(); + } +} + +/** GeneralPage */ + +GeneralPage::GeneralPage(QWidget * parent, const char * name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + QHBoxLayout *hLay; + QLabel *label; + HelpLabel *hLabel; + + QGridLayout *gl = new QGridLayout(layout, /*nRows=*/3, /*nCols=*/3); + gl->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 0, 2); + + // Basket Tree Position: + m_treeOnLeft = new QComboBox(this); + m_treeOnLeft->insertItem(i18n("On left")); + m_treeOnLeft->insertItem(i18n("On right")); + label = new QLabel(m_treeOnLeft, i18n("&Basket tree position:"), this); + gl->addWidget(label, 0, 0); + gl->addWidget(m_treeOnLeft, 0, 1); + connect( m_treeOnLeft, SIGNAL(activated(int)), this, SLOT(changed()) ); + + // Filter Bar Position: + m_filterOnTop = new QComboBox(this); + m_filterOnTop->insertItem(i18n("On top")); + m_filterOnTop->insertItem(i18n("On bottom")); + label = new QLabel(m_filterOnTop, i18n("&Filter bar position:"), this); + gl->addWidget(label, 1, 0); + gl->addWidget(m_filterOnTop, 1, 1); + connect( m_filterOnTop, SIGNAL(activated(int)), this, SLOT(changed()) ); + + // Use Baloons to Report Results of Global Actions: + hLay = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + m_usePassivePopup = new QCheckBox(i18n("&Use balloons to report results of global actions"), this); + connect( m_usePassivePopup, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + hLabel = new HelpLabel( + i18n("What are global actions?"), + ("

      " + i18n("You can configure global shortcuts to do some actions without having to show the main window. For instance, you can paste the clipboard content, take a color from " + "a point of the screen, etc. You can also use the mouse scroll wheel over the system tray icon to change the current basket. Or use the middle mouse button " + "on that icon to paste the current selection.") + "

      " + + "

      " + i18n("When doing so, %1 pops up a little balloon message to inform you the action has been successfully done. You can disable that balloon.") + "

      " + + "

      " + i18n("Note that those messages are smart enough to not appear if the main window is visible. This is because you already see the result of your actions in the main window.") + "

      ") + .arg(kapp->aboutData()->programName()), + this); + hLay->addWidget(m_usePassivePopup); + hLay->addWidget(hLabel); + hLay->addStretch(); + layout->addLayout(hLay); + + // System Tray Icon: + QGroupBox *gbSys = new QGroupBox(3, Qt::Vertical, i18n("System Tray Icon"), this); + layout->addWidget(gbSys); + QVBoxLayout *sysLay = new QVBoxLayout(gbSys, /*margin=*/0, KDialogBase::spacingHint()); + + // Dock in System Tray: + m_useSystray = new QCheckBox(i18n("&Dock in system tray"), gbSys); + sysLay->addWidget(m_useSystray); + connect( m_useSystray, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + m_systray = new QWidget(gbSys); + QVBoxLayout *subSysLay = new QVBoxLayout(m_systray, /*margin=*/0, KDialogBase::spacingHint()); + sysLay->addWidget(m_systray); + + // Show Current Basket Icon in System Tray Icon: + m_showIconInSystray = new QCheckBox(i18n("&Show current basket icon in system tray icon"), m_systray); + subSysLay->addWidget(m_showIconInSystray); + connect(m_showIconInSystray, SIGNAL(stateChanged(int)), this, SLOT(changed())); + + QGridLayout *gs = new QGridLayout(0, /*nRows=*/2, /*nCols=*/3); + subSysLay->addLayout(gs); + gs->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 0, 2); + + // Hide Main Window when Mouse Goes out of it for Some Time: + m_timeToHideOnMouseOut = new KIntNumInput(0, m_systray); + m_hideOnMouseOut = new QCheckBox(i18n("&Hide main window when mouse leaves it for"), m_systray); + m_timeToHideOnMouseOut->setRange(0, 600, 1, false); + m_timeToHideOnMouseOut->setSuffix(i18n(" tenths of seconds")); + gs->addWidget(m_hideOnMouseOut, 0, 0); + gs->addWidget(m_timeToHideOnMouseOut, 0, 1); + connect(m_hideOnMouseOut, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_timeToHideOnMouseOut, SIGNAL(valueChanged (int)), this, SLOT(changed())); +// subSysLay->addWidget( + + // Show Main Window when Mouse Hovers over the System Tray Icon for Some Time: + m_timeToShowOnMouseIn = new KIntNumInput(0, m_systray); + m_showOnMouseIn = new QCheckBox(i18n("Show &main window when mouse hovers over the system tray icon for"), m_systray); + m_timeToShowOnMouseIn->setRange(0, 600, 1, false); + m_timeToShowOnMouseIn->setSuffix(i18n(" tenths of seconds")); + gs->addWidget(m_showOnMouseIn, 1, 0); + gs->addWidget(m_timeToShowOnMouseIn, 1, 1); + connect(m_showOnMouseIn, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_timeToShowOnMouseIn, SIGNAL(valueChanged (int)), this, SLOT(changed())); + + connect( m_hideOnMouseOut, SIGNAL(toggled(bool)), m_timeToHideOnMouseOut, SLOT(setEnabled(bool)) ); + connect( m_showOnMouseIn, SIGNAL(toggled(bool)), m_timeToShowOnMouseIn, SLOT(setEnabled(bool)) ); + + connect( m_useSystray, SIGNAL(toggled(bool)), m_systray, SLOT(setEnabled(bool)) ); + + layout->insertStretch(-1); + load(); +} + +void GeneralPage::load() +{ + m_treeOnLeft->setCurrentItem( (int)!Settings::treeOnLeft() ); + m_filterOnTop->setCurrentItem( (int)!Settings::filterOnTop() ); + + m_usePassivePopup->setChecked(Settings::usePassivePopup()); + + m_useSystray->setChecked( Settings::useSystray() ); + m_systray->setEnabled( Settings::useSystray() ); + + m_showIconInSystray->setChecked( Settings::showIconInSystray() ); + + m_hideOnMouseOut->setChecked( Settings::hideOnMouseOut() ); + m_timeToHideOnMouseOut->setValue( Settings::timeToHideOnMouseOut() ); + m_timeToHideOnMouseOut->setEnabled( Settings::hideOnMouseOut() ); + + m_showOnMouseIn->setChecked( Settings::showOnMouseIn() ); + m_timeToShowOnMouseIn->setValue( Settings::timeToShowOnMouseIn() ); + m_timeToShowOnMouseIn->setEnabled( Settings::showOnMouseIn() ); + + +} + +void GeneralPage::save() +{ + Settings::setTreeOnLeft( ! m_treeOnLeft->currentItem() ); + Settings::setFilterOnTop( ! m_filterOnTop->currentItem() ); + + Settings::setUsePassivePopup( m_usePassivePopup->isChecked() ); + + Settings::setUseSystray( m_useSystray->isChecked() ); + Settings::setShowIconInSystray( m_showIconInSystray->isChecked() ); + Settings::setShowOnMouseIn( m_showOnMouseIn->isChecked() ); + Settings::setTimeToShowOnMouseIn( m_timeToShowOnMouseIn->value() ); + Settings::setHideOnMouseOut( m_hideOnMouseOut->isChecked() ); + Settings::setTimeToHideOnMouseOut( m_timeToHideOnMouseOut->value() ); +} + +void GeneralPage::defaults() +{ + // TODO +} + +/** BasketsPage */ + +BasketsPage::BasketsPage(QWidget * parent, const char * name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + QHBoxLayout *hLay; + HelpLabel *hLabel; + + // Appearance: + + QGroupBox *appearanceBox = new QGroupBox(3, Qt::Vertical, i18n("Appearance"), this); + layout->addWidget(appearanceBox); + + m_playAnimations = new QCheckBox(i18n("Ani&mate changes in baskets"), appearanceBox); + connect( m_playAnimations, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + m_showNotesToolTip = new QCheckBox(i18n("&Show tooltips in baskets"), appearanceBox); + connect( m_showNotesToolTip, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + m_bigNotes = new QCheckBox(i18n("&Big notes"), appearanceBox); + connect( m_bigNotes, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + // Behavior: + + QGroupBox *behaviorBox = new QGroupBox(5, Qt::Vertical, i18n("Behavior"), this); + layout->addWidget(behaviorBox); + + m_autoBullet = new QCheckBox(i18n("&Transform lines starting with * or - to lists in text editors"), behaviorBox); + connect( m_autoBullet, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + m_confirmNoteDeletion = new QCheckBox(i18n("Ask confirmation before &deleting notes"), behaviorBox); + connect( m_confirmNoteDeletion, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + QWidget *widget = new QWidget(behaviorBox); + hLay = new QHBoxLayout(widget, /*margin=*/0, KDialogBase::spacingHint()); + m_exportTextTags = new QCheckBox(i18n("&Export tags in texts"), widget); + connect( m_exportTextTags, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + QPixmap pixmapHelp(KGlobal::dirs()->findResource("data", "basket/images/tag_export_help.png")); + QMimeSourceFactory::defaultFactory()->setPixmap("__resource_help_tag_export.png", pixmapHelp); + hLabel = new HelpLabel( + i18n("When does this apply?"), + "

      " + i18n("It does apply when you copy and paste, or drag and drop notes to a text editor.") + "

      " + + "

      " + i18n("If enabled, this property lets you paste the tags as textual equivalents.") + "
      " + + i18n("For instance, a list of notes with the To Do and Done tags are exported as lines preceded by [ ] or [x], " + "representing an empty checkbox and a checked box.") + "

      " + + "

      ", + widget); + hLay->addWidget(m_exportTextTags); + hLay->addWidget(hLabel); + hLay->addStretch(); + + m_groupOnInsertionLineWidget = new QWidget(behaviorBox); + QHBoxLayout *hLayV = new QHBoxLayout(m_groupOnInsertionLineWidget, /*margin=*/0, KDialogBase::spacingHint()); + m_groupOnInsertionLine = new QCheckBox(i18n("&Group a new note when clicking on the right of the insertion line"), m_groupOnInsertionLineWidget); + QPixmap pixmap(KGlobal::dirs()->findResource("data", "basket/images/insertion_help.png")); + QMimeSourceFactory::defaultFactory()->setPixmap("__resource_help_insertion_line.png", pixmap); + HelpLabel *helpV = new HelpLabel( + i18n("How to group a new note?"), + i18n("

      When this option is enabled, the insertion-line not only allows you to insert notes at the cursor position, but also allows you to group a new note with the one under the cursor:

      ") + + "

      " + + i18n("

      Place your mouse between notes, where you want to add a new one.
      " + "Click on the left of the insertion-line middle-mark to insert a note.
      " + "Click on the right to group a note, with the one below or above, depending on where your mouse is.

      "), + m_groupOnInsertionLineWidget); + hLayV->addWidget(m_groupOnInsertionLine); + hLayV->addWidget(helpV); + hLayV->insertStretch(-1); + layout->addWidget(m_groupOnInsertionLineWidget); + connect(m_groupOnInsertionLine, SIGNAL(stateChanged(int)), this, SLOT(changed())); + + widget = new QWidget(behaviorBox); + QGridLayout *ga = new QGridLayout(widget, /*nRows=*/3, /*nCols=*/4, /*margin=*/0, KDialogBase::spacingHint()); + ga->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 0, 3); + + m_middleAction = new QComboBox(widget); + m_middleAction->insertItem( i18n("Do nothing") ); + m_middleAction->insertItem( i18n("Paste clipboard") ); + m_middleAction->insertItem( i18n("Insert image note") ); + m_middleAction->insertItem( i18n("Insert link note") ); + m_middleAction->insertItem( i18n("Insert launcher note") ); + m_middleAction->insertItem( i18n("Insert color note") ); + m_middleAction->insertItem( i18n("Grab screen zone") ); + m_middleAction->insertItem( i18n("Insert color from screen") ); + m_middleAction->insertItem( i18n("Load note from file") ); + m_middleAction->insertItem( i18n("Import Launcher from KDE Menu") ); + m_middleAction->insertItem( i18n("Import icon") ); + QLabel *labelM = new QLabel(m_middleAction, i18n("&Shift+middle-click anywhere:"), widget); + ga->addWidget(labelM, 0, 0); + ga->addWidget(m_middleAction, 0, 1); + ga->addWidget(new QLabel(i18n("at cursor position"), widget), 0, 2); + connect( m_middleAction, SIGNAL(activated(int)), this, SLOT(changed()) ); + + // Protection: + + QGroupBox *protectionBox = new QGroupBox(3, Qt::Vertical, i18n("Password Protection"), this); + layout->addWidget(protectionBox); + widget = new QWidget(protectionBox); + + // Re-Lock timeout configuration + hLay = new QHBoxLayout(widget, /*margin=*/0, KDialogBase::spacingHint()); + m_enableReLockTimeoutMinutes = new QCheckBox(i18n("A&utomatically lock protected baskets when closed for"), widget); + hLay->addWidget(m_enableReLockTimeoutMinutes); + m_reLockTimeoutMinutes = new KIntNumInput(widget); + m_reLockTimeoutMinutes->setMinValue(0); + m_reLockTimeoutMinutes->setSuffix(i18n(" minutes")); + hLay->addWidget(m_reLockTimeoutMinutes); + //label = new QLabel(i18n("minutes"), this); + //hLay->addWidget(label); + hLay->addStretch(); +// layout->addLayout(hLay); + connect( m_enableReLockTimeoutMinutes, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + connect( m_reLockTimeoutMinutes, SIGNAL(valueChanged(int)), this, SLOT(changed()) ); + connect( m_enableReLockTimeoutMinutes, SIGNAL(toggled(bool)), m_reLockTimeoutMinutes, SLOT(setEnabled(bool)) ); + +#ifdef HAVE_LIBGPGME + m_useGnuPGAgent = new QCheckBox(i18n("Use GnuPG agent for &private/public key protected baskets"), protectionBox); +// hLay->addWidget(m_useGnuPGAgent); + connect( m_useGnuPGAgent, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); +#endif + + layout->insertStretch(-1); + load(); +} + +void BasketsPage::load() +{ + m_playAnimations->setChecked(Settings::playAnimations()); + m_showNotesToolTip->setChecked(Settings::showNotesToolTip()); + m_bigNotes->setChecked(Settings::bigNotes()); + + m_autoBullet->setChecked(Settings::autoBullet()); + m_confirmNoteDeletion->setChecked(Settings::confirmNoteDeletion()); + m_exportTextTags->setChecked(Settings::exportTextTags()); + + m_groupOnInsertionLine->setChecked(Settings::groupOnInsertionLine()); + m_middleAction->setCurrentItem(Settings::middleAction()); + + // The correctness of this code depends on the default of enableReLockTimeout + // being true - otherwise, the reLockTimeoutMinutes widget is not disabled properly. + m_enableReLockTimeoutMinutes->setChecked(Settings::enableReLockTimeout()); + m_reLockTimeoutMinutes->setValue(Settings::reLockTimeoutMinutes()); +#ifdef HAVE_LIBGPGME + m_useGnuPGAgent->setChecked(Settings::useGnuPGAgent()); + + if (KGpgMe::isGnuPGAgentAvailable()) { + m_useGnuPGAgent->setChecked(Settings::useGnuPGAgent()); + } else { + m_useGnuPGAgent->setChecked(false); + m_useGnuPGAgent->setEnabled(false); + } +#endif +} + +void BasketsPage::save() +{ + Settings::setPlayAnimations( m_playAnimations->isChecked() ); + Settings::setShowNotesToolTip( m_showNotesToolTip->isChecked() ); + Settings::setBigNotes( m_bigNotes->isChecked() ); + + Settings::setAutoBullet( m_autoBullet->isChecked() ); + Settings::setConfirmNoteDeletion( m_confirmNoteDeletion->isChecked() ); + Settings::setExportTextTags( m_exportTextTags->isChecked() ); + + Settings::setGroupOnInsertionLine( m_groupOnInsertionLine->isChecked() ); + Settings::setMiddleAction( m_middleAction->currentItem() ); + + Settings::setEnableReLockTimeout( m_enableReLockTimeoutMinutes->isChecked()); + Settings::setReLockTimeoutMinutes(m_reLockTimeoutMinutes->value()); +#ifdef HAVE_LIBGPGME + Settings::setUseGnuPGAgent( m_useGnuPGAgent->isChecked() ); +#endif +} + +void BasketsPage::defaults() +{ + // TODO +} + +/** class NewNotesPage: */ + +NewNotesPage::NewNotesPage(QWidget * parent, const char * name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + QHBoxLayout *hLay; + QLabel *label; + + // Place of New Notes: + + hLay = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + m_newNotesPlace = new QComboBox(this); + label = new QLabel(m_newNotesPlace, i18n("&Place of new notes:"), this); + m_newNotesPlace->insertItem(i18n("On top")); + m_newNotesPlace->insertItem(i18n("On bottom")); + m_newNotesPlace->insertItem(i18n("At current note")); + hLay->addWidget(label); + hLay->addWidget(m_newNotesPlace); + hLay->addStretch(); + //layout->addLayout(hLay); + label->hide(); + m_newNotesPlace->hide(); + connect( m_newNotesPlace, SIGNAL(textChanged(const QString &)), this, SLOT(changed()) ); + + // New Images Size: + + hLay = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + m_imgSizeX = new KIntNumInput(this); + m_imgSizeX->setMinValue(1); + m_imgSizeX->setMaxValue(4096); + m_imgSizeX->setReferencePoint(100); + connect( m_imgSizeX, SIGNAL(valueChanged(int)), this, SLOT(changed()) ); + label = new QLabel(m_imgSizeX, i18n("&New images size:"), this); + hLay->addWidget(label); + hLay->addWidget(m_imgSizeX); + m_imgSizeY = new KIntNumInput(this); + m_imgSizeY->setMinValue(1); + m_imgSizeY->setMaxValue(4096); + m_imgSizeY->setReferencePoint(100); + connect( m_imgSizeY, SIGNAL(valueChanged(int)), this, SLOT(changed()) ); + label = new QLabel(m_imgSizeY, i18n("&by"), this); + hLay->addWidget(label); + hLay->addWidget(m_imgSizeY); + label = new QLabel(i18n("pixels"), this); + hLay->addWidget(label); + m_pushVisualize = new QPushButton(i18n("&Visualize..."), this); + hLay->addWidget(m_pushVisualize); + hLay->addStretch(); + layout->addLayout(hLay); + connect( m_pushVisualize, SIGNAL(clicked()), this, SLOT(visualize()) ); + + // View File Content: + + QVButtonGroup *buttonGroup = new QVButtonGroup(i18n("View Content of Added Files for the Following Types"), this); + m_viewTextFileContent = new QCheckBox( i18n("&Plain text"), buttonGroup ); + m_viewHtmlFileContent = new QCheckBox( i18n("&HTML page"), buttonGroup ); + m_viewImageFileContent = new QCheckBox( i18n("&Image or animation"), buttonGroup ); + m_viewSoundFileContent = new QCheckBox( i18n("&Sound"), buttonGroup ); + layout->addWidget(buttonGroup); + connect( m_viewTextFileContent, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + connect( m_viewHtmlFileContent, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + connect( m_viewImageFileContent, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + connect( m_viewSoundFileContent, SIGNAL(stateChanged(int)), this, SLOT(changed()) ); + + layout->insertStretch(-1); + load(); +} + +void NewNotesPage::load() +{ + m_newNotesPlace->setCurrentItem(Settings::newNotesPlace()); + + m_imgSizeX->setValue(Settings::defImageX()); + m_imgSizeY->setValue(Settings::defImageY()); + + m_viewTextFileContent->setChecked( Settings::viewTextFileContent() ); + m_viewHtmlFileContent->setChecked( Settings::viewHtmlFileContent() ); + m_viewImageFileContent->setChecked( Settings::viewImageFileContent() ); + m_viewSoundFileContent->setChecked( Settings::viewSoundFileContent() ); +} + +void NewNotesPage::save() +{ + Settings::setNewNotesPlace(m_newNotesPlace->currentItem()); + + Settings::setDefImageX(m_imgSizeX->value()); + Settings::setDefImageY(m_imgSizeY->value()); + + Settings::setViewTextFileContent( m_viewTextFileContent->isChecked() ); + Settings::setViewHtmlFileContent( m_viewHtmlFileContent->isChecked() ); + Settings::setViewImageFileContent( m_viewImageFileContent->isChecked() ); + Settings::setViewSoundFileContent( m_viewSoundFileContent->isChecked() ); +} + +void NewNotesPage::defaults() +{ + // TODO +} + +void NewNotesPage::visualize() +{ + ViewSizeDialog size(this, m_imgSizeX->value(), m_imgSizeY->value()); + size.exec(); + m_imgSizeX->setValue(size.width()); + m_imgSizeY->setValue(size.height()); +} + +/** class NotesAppearancePage: */ + +NotesAppearancePage::NotesAppearancePage(QWidget * parent, const char * name) + : KCModule(parent, name) +{ + QVBoxLayout *layout = new QVBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + QTabWidget *tabs = new QTabWidget(this); + layout->addWidget(tabs); + + m_soundLook = new LinkLookEditWidget(this, i18n("Conference audio record"), "sound", tabs); + m_fileLook = new LinkLookEditWidget(this, i18n("Annual report"), "document", tabs); + m_localLinkLook = new LinkLookEditWidget(this, i18n("Home folder"), "folder_home", tabs); + m_networkLinkLook = new LinkLookEditWidget(this, "www.kde.org", KMimeType::iconForURL("http://www.kde.org"), tabs); + m_launcherLook = new LinkLookEditWidget(this, i18n("Launch %1").arg(kapp->aboutData()->programName()), "basket", tabs); + tabs->addTab(m_soundLook, i18n("&Sounds") ); + tabs->addTab(m_fileLook, i18n("&Files") ); + tabs->addTab(m_localLinkLook, i18n("&Local Links") ); + tabs->addTab(m_networkLinkLook, i18n("&Network Links")); + tabs->addTab(m_launcherLook, i18n("Launc&hers") ); + + load(); +} + +void NotesAppearancePage::load() +{ + m_soundLook->set(LinkLook::soundLook); + m_fileLook->set(LinkLook::fileLook); + m_localLinkLook->set(LinkLook::localLinkLook); + m_networkLinkLook->set(LinkLook::networkLinkLook); + m_launcherLook->set(LinkLook::launcherLook); +} + +void NotesAppearancePage::save() +{ + m_soundLook->saveChanges(); + m_fileLook->saveChanges(); + m_localLinkLook->saveChanges(); + m_networkLinkLook->saveChanges(); + m_launcherLook->saveChanges(); + Global::bnpView->linkLookChanged(); +} + +void NotesAppearancePage::defaults() +{ + // TODO +} + +/** class ApplicationsPage: */ + +ApplicationsPage::ApplicationsPage(QWidget * parent, const char * name) + : KCModule(parent, name) +{ + /* Applications page */ + QVBoxLayout *layout = new QVBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + + m_htmlUseProg = new QCheckBox(i18n("Open &text notes with a custom application:"), this); + m_htmlProg = new RunCommandRequester("", i18n("Open text notes with:"), this); + QHBoxLayout *hLayH = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + hLayH->insertSpacing(-1, 20); + hLayH->addWidget(m_htmlProg); + connect(m_htmlUseProg, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_htmlProg->lineEdit(), SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + + m_imageUseProg = new QCheckBox(i18n("Open &image notes with a custom application:"), this); + m_imageProg = new RunCommandRequester("", i18n("Open image notes with:"), this); + QHBoxLayout *hLayI = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + hLayI->insertSpacing(-1, 20); + hLayI->addWidget(m_imageProg); + connect(m_imageUseProg, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_imageProg->lineEdit(), SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + + m_animationUseProg = new QCheckBox(i18n("Open a&nimation notes with a custom application:"), this); + m_animationProg = new RunCommandRequester("", i18n("Open animation notes with:"), this); + QHBoxLayout *hLayA = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + hLayA->insertSpacing(-1, 20); + hLayA->addWidget(m_animationProg); + connect(m_animationUseProg, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_animationProg->lineEdit(), SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + + m_soundUseProg = new QCheckBox(i18n("Open so&und notes with a custom application:"), this); + m_soundProg = new RunCommandRequester("", i18n("Open sound notes with:"), this); + QHBoxLayout *hLayS = new QHBoxLayout(0L, /*margin=*/0, KDialogBase::spacingHint()); + hLayS->insertSpacing(-1, 20); + hLayS->addWidget(m_soundProg); + connect(m_soundUseProg, SIGNAL(stateChanged(int)), this, SLOT(changed())); + connect(m_soundProg->lineEdit(), SIGNAL(textChanged(const QString &)), this, SLOT(changed())); + + QString whatsthis = i18n( + "

      If checked, the application defined below will be used when opening that type of note.

      " + "

      Otherwise, the application you've configured in Konqueror will be used.

      "); + + QWhatsThis::add(m_htmlUseProg, whatsthis); + QWhatsThis::add(m_imageUseProg, whatsthis); + QWhatsThis::add(m_animationUseProg, whatsthis); + QWhatsThis::add(m_soundUseProg, whatsthis); + + whatsthis = i18n( + "

      Define the application to use for opening that type of note instead of the " + "application configured in Konqueror.

      "); + + QWhatsThis::add(m_htmlProg, whatsthis); + QWhatsThis::add(m_imageProg, whatsthis); + QWhatsThis::add(m_animationProg, whatsthis); + QWhatsThis::add(m_soundProg, whatsthis); + + layout->addWidget(m_htmlUseProg); + layout->addItem(hLayH); + layout->addWidget(m_imageUseProg); + layout->addItem(hLayI); + layout->addWidget(m_animationUseProg); + layout->addItem(hLayA); + layout->addWidget(m_soundUseProg); + layout->addItem(hLayS); + + layout->addSpacing(KDialogBase::spacingHint()); + + QHBoxLayout *hLay = new QHBoxLayout(0L, /*margin=*/0, /*spacing=*/0); + HelpLabel *hl1 = new HelpLabel( + i18n("How to change the application used to open Web links?"), + i18n("

      When opening Web links, they are opened in different applications, depending on the content of the link " + "(a Web page, an image, a PDF document...), such as if they were files on your computer.

      " + "

      Here is how to do if you want every Web addresses to be opened in your Web browser. " + "It is useful if you are not using KDE (if you are using eg. GNOME, XFCE...).

      " + "
        " + "
      • Open the KDE Control Center (if it is not available, try to type \"kcontrol\" in a command line terminal);
      • " + "
      • Go to the \"KDE Components\" and then \"Components Selector\" section;
      • " + "
      • Choose \"Web Browser\", check \"In the following browser:\" and enter the name of your Web browser (like \"firefox\" or \"epiphany\").
      • " + "
      " + "

      Now, when you click any link that start with \"http://...\", it will be opened in your Web browser (eg. Mozilla Firefox or Epiphany or...).

      " + "

      For more fine-grained configuration (like opening only Web pages in your Web browser), read the second help link.

      "), + this); + hLay->addWidget(hl1); + hLay->addStretch(); + layout->addLayout(hLay); + + hLay = new QHBoxLayout(0L, /*margin=*/0, /*spacing=*/0); + HelpLabel *hl2 = new HelpLabel( + i18n("How to change the applications used to open files and links?"), + i18n("

      Here is how to set the application to be used for each type of file. " + "This also applies to Web links if you choose not to open them systematically in a Web browser (see the first help link). " + "The default settings should be good enough for you, but this tip is useful if you are using GNOME, XFCE, or another environment than KDE.

      " + "

      This is an example of how to open HTML pages in your Web browser (and keep using the other applications for other addresses or files). " + "Repeat these steps for each type of file you want to open in a specific application.

      " + "
        " + "
      • Open the KDE Control Center (if it is not available, try to type \"kcontrol\" in a command line terminal);
      • " + "
      • Go to the \"KDE Components\" and then \"File Associations\" section;
      • " + "
      • In the tree, expand \"text\" and click \"html\";
      • " + "
      • In the applications list, add your Web browser as the first entry;
      • " + "
      • Do the same for the type \"application -> xhtml+xml\".
      • " + "
      "), + this); + hLay->addWidget(hl2); + hLay->addStretch(); + layout->addLayout(hLay); + + connect( m_htmlUseProg, SIGNAL(toggled(bool)), m_htmlProg, SLOT(setEnabled(bool)) ); + connect( m_imageUseProg, SIGNAL(toggled(bool)), m_imageProg, SLOT(setEnabled(bool)) ); + connect( m_animationUseProg, SIGNAL(toggled(bool)), m_animationProg, SLOT(setEnabled(bool)) ); + connect( m_soundUseProg, SIGNAL(toggled(bool)), m_soundProg, SLOT(setEnabled(bool)) ); + + layout->insertStretch(-1); + load(); +} + +void ApplicationsPage::load() +{ + m_htmlProg->setRunCommand(Settings::htmlProg()); + m_htmlUseProg->setChecked(Settings::isHtmlUseProg()); + m_htmlProg->setEnabled(Settings::isHtmlUseProg()); + + m_imageProg->setRunCommand(Settings::imageProg()); + m_imageUseProg->setChecked(Settings::isImageUseProg()); + m_imageProg->setEnabled(Settings::isImageUseProg()); + + m_animationProg->setRunCommand(Settings::animationProg()); + m_animationUseProg->setChecked(Settings::isAnimationUseProg()); + m_animationProg->setEnabled(Settings::isAnimationUseProg()); + + m_soundProg->setRunCommand(Settings::soundProg()); + m_soundUseProg->setChecked(Settings::isSoundUseProg()); + m_soundProg->setEnabled(Settings::isSoundUseProg()); +} + +void ApplicationsPage::save() +{ + Settings::setIsHtmlUseProg( m_htmlUseProg->isChecked() ); + Settings::setHtmlProg( m_htmlProg->runCommand() ); + + Settings::setIsImageUseProg( m_imageUseProg->isChecked() ); + Settings::setImageProg( m_imageProg->runCommand() ); + + Settings::setIsAnimationUseProg( m_animationUseProg->isChecked() ); + Settings::setAnimationProg( m_animationProg->runCommand() ); + + Settings::setIsSoundUseProg( m_soundUseProg->isChecked() ); + Settings::setSoundProg( m_soundProg->runCommand() ); +} + +void ApplicationsPage::defaults() +{ + // TODO +} + +#include "settings.moc" diff --git a/src/settings.h b/src/settings.h new file mode 100644 index 0000000..e731262 --- /dev/null +++ b/src/settings.h @@ -0,0 +1,392 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "global.h" +#include "bnpview.h" +#include "systemtray.h" + +class QGroupBox; +class QButtonGroup; +class KColorCombo; +class KIntNumInput; +class KGlobalAccel; +class QLabel; + +class Container; +class SystemTray; +class DebugWindow; +class LinkLook; +class LinkLookEditWidget; +class RunCommandRequester; +class IconSizeCombo; + +class GeneralPage : public KCModule +{ + Q_OBJECT + public: + GeneralPage(QWidget * parent=0, const char * name=0); + GeneralPage() {}; + virtual ~GeneralPage() {} + + virtual void load(); + virtual void save(); + virtual void defaults(); + + private: + // General + QComboBox *m_treeOnLeft; + QComboBox *m_filterOnTop; + QCheckBox *m_usePassivePopup; + + // System Tray Icon + QCheckBox *m_useSystray; + QWidget *m_systray; + QCheckBox *m_showIconInSystray; + QCheckBox *m_hideOnMouseOut; + KIntNumInput *m_timeToHideOnMouseOut; + QCheckBox *m_showOnMouseIn; + KIntNumInput *m_timeToShowOnMouseIn; +}; + +class BasketsPage : public KCModule +{ + Q_OBJECT + public: + BasketsPage(QWidget * parent=0, const char * name=0); + BasketsPage() {}; + + virtual void load(); + virtual void save(); + virtual void defaults(); + + private: + // Appearance + QCheckBox *m_playAnimations; + QCheckBox *m_showNotesToolTip; + QCheckBox *m_bigNotes; + + // Behavior + QCheckBox *m_autoBullet; + QCheckBox *m_confirmNoteDeletion; + QCheckBox *m_exportTextTags; + QWidget *m_groupOnInsertionLineWidget; + QCheckBox *m_groupOnInsertionLine; + QComboBox *m_middleAction; + + // Protection + QCheckBox *m_useGnuPGAgent; + QCheckBox *m_enableReLockTimeoutMinutes; + KIntNumInput *m_reLockTimeoutMinutes; +}; + +class NewNotesPage : public KCModule +{ + Q_OBJECT + public: + NewNotesPage(QWidget * parent=0, const char * name=0); + NewNotesPage() {}; + + virtual void load(); + virtual void save(); + virtual void defaults(); + + private slots: + void visualize(); + + private: + // Notes Image Size + KIntNumInput *m_imgSizeX; + KIntNumInput *m_imgSizeY; + QPushButton *m_pushVisualize; + + // Note Addition + QComboBox *m_newNotesPlace; + QCheckBox *m_viewTextFileContent; + QCheckBox *m_viewHtmlFileContent; + QCheckBox *m_viewImageFileContent; + QCheckBox *m_viewSoundFileContent; +}; + +class NotesAppearancePage : public KCModule +{ + Q_OBJECT + public: + NotesAppearancePage(QWidget * parent=0, const char * name=0); + NotesAppearancePage() {}; + + virtual void load(); + virtual void save(); + virtual void defaults(); + + private: + // Link Looks + LinkLookEditWidget *m_soundLook; + LinkLookEditWidget *m_fileLook; + LinkLookEditWidget *m_localLinkLook; + LinkLookEditWidget *m_networkLinkLook; + LinkLookEditWidget *m_launcherLook; +}; + +class ApplicationsPage : public KCModule +{ + Q_OBJECT + public: + ApplicationsPage(QWidget * parent=0, const char * name=0); + ApplicationsPage() {}; + + virtual void load(); + virtual void save(); + virtual void defaults(); + + private: + // Applications + QCheckBox *m_htmlUseProg; + QCheckBox *m_imageUseProg; + QCheckBox *m_animationUseProg; + QCheckBox *m_soundUseProg; + RunCommandRequester *m_htmlProg; + RunCommandRequester *m_imageProg; + RunCommandRequester *m_animationProg; + RunCommandRequester *m_soundProg; +}; + +/** Handle all global variables (to avoid lot of extern declarations) + * @author S�astien Laot + */ +class Settings // FIXME: Distaptch new config events ? +{ + protected: + /** Main window */ + static bool s_treeOnLeft; + static bool s_filterOnTop; + static bool s_playAnimations; + static bool s_showNotesToolTip; + static bool s_confirmNoteDeletion; + static bool s_bigNotes; + static bool s_autoBullet; + static bool s_exportTextTags; + static bool s_useGnuPGAgent; + static bool s_usePassivePopup; + static int s_middleAction; // O:Nothing ; 1:Paste ; 2:Text ; 3:Html ; 4:Image ; 5:Link ; 6:Launcher ; 7:Color + static bool s_groupOnInsertionLine; + static bool s_spellCheckTextNotes; + static int s_basketTreeWidth; + static bool s_welcomeBasketsAdded; + static QString s_dataFolder; + static QDate s_lastBackup; + static QPoint s_mainWindowPosition; + static QSize s_mainWindowSize; + static bool s_showEmptyBasketInfo; + static bool s_blinkedFilter; + static bool s_enableReLockTimeout; + static int s_reLockTimeoutMinutes; + /** Note Addition */ + static int s_newNotesPlace; // 0:OnTop ; 1:OnBottom ; 2:AtCurrentNote + static int s_viewTextFileContent; + static int s_viewHtmlFileContent; + static int s_viewImageFileContent; + static int s_viewSoundFileContent; + /** System tray Icon */ + static bool s_useSystray; + static bool s_showIconInSystray; + static bool s_startDocked; + static bool s_hideOnMouseOut; + static int s_timeToHideOnMouseOut; + static bool s_showOnMouseIn; + static int s_timeToShowOnMouseIn; + /** Programs */ + static bool s_htmlUseProg; + static bool s_imageUseProg; + static bool s_animationUseProg; + static bool s_soundUseProg; + static QString s_htmlProg; + static QString s_imageProg; + static QString s_animationProg; + static QString s_soundProg; + /** Insert Note Default Values */ + static int s_defImageX; + static int s_defImageY; + static int s_defIconSize; + public: /* And the following methods are just getter / setters */ + /** App settings GET */ + static inline bool treeOnLeft() { return s_treeOnLeft; } + static inline bool filterOnTop() { return s_filterOnTop; } + static inline bool playAnimations() { return s_playAnimations; } + static inline bool showNotesToolTip() { return s_showNotesToolTip; } + static inline bool confirmNoteDeletion() { return s_confirmNoteDeletion; } + static inline bool bigNotes() { return s_bigNotes; } + static inline bool autoBullet() { return s_autoBullet; } + static inline bool exportTextTags() { return s_exportTextTags; } + static inline bool useGnuPGAgent() { return s_useGnuPGAgent; } + static inline bool blinkedFilter() { return s_blinkedFilter; } + static inline bool enableReLockTimeout() { return s_enableReLockTimeout; } + static inline int reLockTimeoutMinutes() { return s_reLockTimeoutMinutes; } + static inline bool useSystray() { return s_useSystray; } + static inline bool showIconInSystray() { return s_showIconInSystray; } + static inline bool startDocked() { return s_startDocked; } + static inline int middleAction() { return s_middleAction; } + static inline bool groupOnInsertionLine() { return s_groupOnInsertionLine; } + static inline bool spellCheckTextNotes() { return s_spellCheckTextNotes; } + static inline bool hideOnMouseOut() { return s_hideOnMouseOut; } + static inline int timeToHideOnMouseOut() { return s_timeToHideOnMouseOut; } + static inline bool showOnMouseIn() { return s_showOnMouseIn; } + static inline int timeToShowOnMouseIn() { return s_timeToShowOnMouseIn; } + static inline int basketTreeWidth() { return s_basketTreeWidth; } + static inline int dropTimeToShow() { return 7; } // TODO: 700 ; TODO: There is certainly a KGlobalConfig ??? + static inline bool usePassivePopup() { return s_usePassivePopup; } + static inline bool welcomeBasketsAdded() { return s_welcomeBasketsAdded; } + static inline QString dataFolder() { return s_dataFolder; } + static inline QDate lastBackup() { return s_lastBackup; } + static inline QPoint mainWindowPosition() { return s_mainWindowPosition; } + static inline QSize mainWindowSize() { return s_mainWindowSize; } + static inline bool showEmptyBasketInfo() { return s_showEmptyBasketInfo; } + /** Programs */ + static inline bool isHtmlUseProg() { return s_htmlUseProg; } + static inline bool isImageUseProg() { return s_imageUseProg; } + static inline bool isAnimationUseProg() { return s_animationUseProg; } + static inline bool isSoundUseProg() { return s_soundUseProg; } + static inline QString htmlProg() { return s_htmlProg; } + static inline QString imageProg() { return s_imageProg; } + static inline QString animationProg() { return s_animationProg; } + static inline QString soundProg() { return s_soundProg; } + /** Insert Note Default Values */ + static inline int defImageX() { return s_defImageX; } + static inline int defImageY() { return s_defImageY; } + static inline int defIconSize() { return s_defIconSize; } + /** Note Addition */ + static inline int newNotesPlace() { return s_newNotesPlace; } + static inline int viewTextFileContent() { return s_viewTextFileContent; } + static inline int viewHtmlFileContent() { return s_viewHtmlFileContent; } + static inline int viewImageFileContent() { return s_viewImageFileContent; } + static inline int viewSoundFileContent() { return s_viewSoundFileContent; } + + /** App settings SET */ + static void setTreeOnLeft(bool onLeft) + { + s_treeOnLeft = onLeft; + if (Global::bnpView) + Global::bnpView->setTreePlacement(onLeft); + } + static void setFilterOnTop(bool onTop) + { + if (s_filterOnTop != onTop) { + s_filterOnTop = onTop; + if (Global::bnpView) + Global::bnpView->filterPlacementChanged(onTop); + } + } + static void setShowNotesToolTip(bool show) + { + s_showNotesToolTip = show; + } + static void setUseSystray(bool useSystray) + { + if (s_useSystray != useSystray) { + s_useSystray = useSystray; + if (Global::systemTray != 0L) { + if (Settings::useSystray()) + Global::systemTray->show(); + else { + Global::systemTray->hide(); + if(Global::mainWindow()) Global::mainWindow()->show(); + } + } + if (Global::bnpView) + Global::bnpView->m_actHideWindow->setEnabled(useSystray); + } + } + static void setShowIconInSystray(bool show) + { + if (s_showIconInSystray != show) { + s_showIconInSystray = show; + if (Global::systemTray != 0L && Settings::useSystray()) + Global::systemTray->updateToolTip(); + } + } + static inline void setConfirmNoteDeletion(bool confirm) { s_confirmNoteDeletion = confirm; } + static void setBigNotes(bool big); + static void setAutoBullet(bool yes); + static inline void setExportTextTags(bool yes) { s_exportTextTags = yes; } + static inline void setUseGnuPGAgent(bool yes) { s_useGnuPGAgent = yes; } + static inline void setPlayAnimations(bool play) { s_playAnimations = play; } + static inline void setBlinkedFilter(bool blinked) { s_blinkedFilter = blinked; } + static inline void setEnableReLockTimeout(bool yes) { s_enableReLockTimeout = yes; } + static inline void setReLockTimeoutMinutes(int minutes) { s_reLockTimeoutMinutes = minutes; } + static inline void setStartDocked(bool docked) { s_startDocked = docked; } + static inline void setMiddleAction(int action) { s_middleAction = action; } + static inline void setGroupOnInsertionLine(bool yes) { s_groupOnInsertionLine = yes; } + static inline void setSpellCheckTextNotes(bool yes) { s_spellCheckTextNotes = yes; } + static inline void setHideOnMouseOut(bool hide) { s_hideOnMouseOut = hide; } + static inline void setTimeToHideOnMouseOut(int time) { s_timeToHideOnMouseOut = time; } + static inline void setShowOnMouseIn(bool show) { s_showOnMouseIn = show; } + static inline void setTimeToShowOnMouseIn(int time) { s_timeToShowOnMouseIn = time; } + static inline void setBasketTreeWidth(int width) { s_basketTreeWidth = width; } + static inline void setUsePassivePopup(bool enable) { s_usePassivePopup = enable; } + static inline void setWelcomeBasketsAdded(bool added) { s_welcomeBasketsAdded = added; } + static inline void setDataFolder(const QString &folder) { s_dataFolder = folder; } + static inline void setLastBackup(const QDate &date) { s_lastBackup = date; } + static inline void setMainWindowPosition(const QPoint &pos) { s_mainWindowPosition = pos; } + static inline void setMainWindowSize(const QSize &size) { s_mainWindowSize = size; } + static inline void setShowEmptyBasketInfo(bool show) { s_showEmptyBasketInfo = show; } + // Programs : + static inline void setIsHtmlUseProg(bool useProg) { s_htmlUseProg = useProg; } + static inline void setIsImageUseProg(bool useProg) { s_imageUseProg = useProg; } + static inline void setIsAnimationUseProg(bool useProg) { s_animationUseProg = useProg; } + static inline void setIsSoundUseProg(bool useProg) { s_soundUseProg = useProg; } + static inline void setHtmlProg(const QString &prog) { s_htmlProg = prog; } + static inline void setImageProg(const QString &prog) { s_imageProg = prog; } + static inline void setAnimationProg(const QString &prog) { s_animationProg = prog; } + static inline void setSoundProg(const QString &prog) { s_soundProg = prog; } + // Insert Note Default Values : + static inline void setDefImageX(int val) { s_defImageX = val; } + static inline void setDefImageY(int val) { s_defImageY = val; } + static inline void setDefIconSize(int val) { s_defIconSize = val; } + // Note Addition + static inline void setNewNotesPlace(int val) { s_newNotesPlace = val; } + static inline void setViewTextFileContent(bool view) { s_viewTextFileContent = view; } + static inline void setViewHtmlFileContent(bool view) { s_viewHtmlFileContent = view; } + static inline void setViewImageFileContent(bool view) { s_viewImageFileContent = view; } + static inline void setViewSoundFileContent(bool view) { s_viewSoundFileContent = view; } + public: + /* Save and load config */ + static void loadConfig(); + static void saveConfig(); + protected: + static void loadLinkLook(LinkLook *look, const QString &name, const LinkLook &defaultLook); + static void saveLinkLook(LinkLook *look, const QString &name); +}; + +#endif // SETTINGS_H diff --git a/src/softwareimporters.cpp b/src/softwareimporters.cpp new file mode 100644 index 0000000..9f276c7 --- /dev/null +++ b/src/softwareimporters.cpp @@ -0,0 +1,696 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "softwareimporters.h" +#include "basket.h" +#include "basketfactory.h" +#include "notefactory.h" +#include "global.h" +#include "bnpview.h" +#include "xmlwork.h" +#include "tools.h" + +/** class TreeImportDialog: */ + +TreeImportDialog::TreeImportDialog(QWidget *parent) + : KDialogBase(KDialogBase::Swallow, i18n("Import Hierarchy"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"ImportHierarchy", /*modal=*/true, /*separator=*/false) +{ + QWidget *page = new QWidget(this); + QVBoxLayout *topLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + m_choices = new QVButtonGroup(i18n("How to Import the Notes?"), page); + new QRadioButton(i18n("&Keep original hierarchy (all notes in separate baskets)"), m_choices); + new QRadioButton(i18n("&First level notes in separate baskets"), m_choices); + new QRadioButton(i18n("&All notes in one basket"), m_choices); + m_choices->setButton(0); + topLayout->addWidget(m_choices); + topLayout->addStretch(10); + + setMainWidget(page); +} + +TreeImportDialog::~TreeImportDialog() +{ +} + +int TreeImportDialog::choice() +{ + return m_choices->selectedId(); +} + +/** class TextFileImportDialog: */ + +TextFileImportDialog::TextFileImportDialog(QWidget *parent) + : KDialogBase(KDialogBase::Swallow, i18n("Import Text File"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"ImportTextFile", /*modal=*/true, /*separator=*/false) +{ + QWidget *page = new QWidget(this); + QVBoxLayout *topLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + m_choices = new QVButtonGroup(i18n("Format of the Text File"), page); + new QRadioButton(i18n("Notes separated by an &empty line"), m_choices); + new QRadioButton(i18n("One ¬e per line"), m_choices); + new QRadioButton(i18n("Notes begin with a &dash (-)"), m_choices); + new QRadioButton(i18n("Notes begin with a &star (*)"), m_choices); + m_anotherSeparator = new QRadioButton(i18n("&Use another separator:"), m_choices); + + QWidget *indentedTextEdit = new QWidget(m_choices); + QHBoxLayout *hLayout = new QHBoxLayout(indentedTextEdit, /*margin=*/0, spacingHint()); + hLayout->addSpacing(20); + m_customSeparator = new QTextEdit(indentedTextEdit); + m_customSeparator->setTextFormat(Qt::PlainText); + hLayout->addWidget(m_customSeparator); + m_choices->insertChild(indentedTextEdit); + + new QRadioButton(i18n("&All in one note"), m_choices); + m_choices->setButton(0); + topLayout->addWidget(m_choices); + + connect( m_customSeparator, SIGNAL(textChanged()), this, SLOT(customSeparatorChanged()) ); + + setMainWidget(page); +} + +TextFileImportDialog::~TextFileImportDialog() +{ +} + +QString TextFileImportDialog::separator() +{ + switch (m_choices->selectedId()) { + default: + case 0: return "\n\n"; + case 1: return "\n"; + case 2: return "\n-"; + case 3: return "\n*"; + case 4: return m_customSeparator->text(); + case 5: return ""; + } +} + +void TextFileImportDialog::customSeparatorChanged() +{ + if (!m_anotherSeparator->isOn()) + m_anotherSeparator->toggle(); +} + +/** namespace SoftwareImporters: */ + +QString SoftwareImporters::fromICS(const QString &ics) +{ + QString result = ics; + + // Remove escaped '\' characters and append the text to the body + int pos = 0; + while ( (pos = result.find('\\', pos)) != -1 ) { + if ((uint)pos == result.length() - 1) // End of string + break; + if (result[pos+1] == 'n') { + result.replace(pos, 2, '\n'); + } else if (result[pos+1] == 'r') { + result.replace(pos, 2, '\r'); + } else if (result[pos+1] == 't') { + result.replace(pos, 2, '\t'); + } else if (result[pos] == '\\') { + result.remove(pos, 1); // Take care of "\\", "\,", "\;" and other escaped characters I haven't noticed + ++pos; + } + } + + return result; +} + +QString SoftwareImporters::fromTomboy(QString tomboy) +{ + // The first line is the note title, and we already have it, so we remove it (yes, that's pretty stupid to duplicate it in the content...): + tomboy = tomboy.mid(tomboy.find("\n")).stripWhiteSpace(); + + // Font styles and decorations: + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + + // Highlight not supported by QTextEdit: + tomboy.replace("", ""); + tomboy.replace("", ""); + + // Font sizes: + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + tomboy.replace("", ""); + + // Internal links to other notes aren't supported yet by BasKet Note Pads: + tomboy.replace("", ""); + tomboy.replace("", ""); + + // In the Tomboy file, new lines are "\n" and not "
      ": + tomboy.replace("\n", "
      \n"); + + // Preserve consecutive spaces: + return "" + tomboy + ""; +} + +Note* SoftwareImporters::insertTitledNote(Basket *parent, const QString &title, const QString &content, Qt::TextFormat format/* = Qt::PlainText*/, Note *parentNote/* = 0*/) +{ + Note *nGroup = new Note(parent); + + Note *nTitle = NoteFactory::createNoteText(title, parent); + nTitle->addState(Tag::stateForId("title")); + + Note *nContent; + if (format == Qt::PlainText) + nContent = NoteFactory::createNoteText(content, parent); + else + nContent = NoteFactory::createNoteHtml(content, parent); + + if (parentNote == 0) + parentNote = parent->firstNote(); // In the first column! + parent->insertNote(nGroup, parentNote, Note::BottomColumn, QPoint(), /*animate=*/false); + parent->insertNote(nTitle, nGroup, Note::BottomColumn, QPoint(), /*animate=*/false); + parent->insertNote(nContent, nTitle, Note::BottomInsert, QPoint(), /*animate=*/false); + + return nGroup; +} + +void SoftwareImporters::finishImport(Basket *basket) +{ + // Unselect the last inserted group: + basket->unselectAll(); + + // Focus the FIRST note (the last inserted note is currently focused!): + basket->setFocusedNote(basket->firstNoteShownInStack()); + + // Relayout every notes at theire new place and simulate a load animation (because already loaded just after the creation). + // Without a relayouting, notes on the bottom would comes from the top (because they were inserted on top) and clutter the animation load: + basket->relayoutNotes(/*animate=*/false); + basket->animateLoad(); + basket->save(); +} + + + +void SoftwareImporters::importKJots() +{ + QString dirPath = locateLocal("appdata","") + "/../kjots/"; // I think the assumption is good + QDir dir(dirPath, QString::null, QDir::Name | QDir::IgnoreCase, QDir::Files | QDir::NoSymLinks); + + QStringList list = dir.entryList(); + if (list.isEmpty()) + return; + + BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/i18n("From KJots"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + Basket *kjotsBasket = Global::bnpView->currentBasket(); + + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file + QFile file(dirPath + *it); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::Locale); + QString buf = stream.readLine(); + + // IT IS A NOTEBOOK FILE, AT THE VERION 0.6.x and older: + if ( !buf.isNull() && buf.left(9) == "\\NewEntry") { + + // First create a basket for it: + BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/KURL(file.name()).fileName(), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/kjotsBasket); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + QString title, body; + bool haveAnEntry = false; + while (1) { + if (buf.left(9) == "\\NewEntry") { + if (haveAnEntry) // Do not add note the first time + insertTitledNote(basket, title, Tools::stripEndWhiteSpaces(body)); + title = buf.mid(10, buf.length()); // Problem : basket will be saved + body = ""; // New note will then be created // EACH time a note is imported + haveAnEntry = true; + } else if (buf.left(3) != "\\ID") { // Don't care of the ID + // Remove escaped '\' characters and append the text to the body + int pos = 0; + while ( (pos = buf.find('\\', pos)) != -1 ) + if (buf[++pos] == '\\') + buf.remove(pos, 1); + body.append(buf + "\n"); + } + buf = stream.readLine(); + if (buf.isNull()) // OEF + break; + } + // Add the ending note (there isn't any other "\\NewEntry" to do it): + if (haveAnEntry) + insertTitledNote(basket, title, Tools::stripEndWhiteSpaces(body)); + finishImport(basket); + + // IT IS A NOTEBOOK XML FILE, AT THE VERION 0.7.0 and later: + } else if ( (*it).endsWith(".book") /*&& !buf.isNull() && (buf.left(2) == "documentElement(), "KJotsBook/Title"); + + // First create a basket for it: + BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/bookTitle, /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/kjotsBasket); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + QDomElement docElem = XMLWork::getElement(doc->documentElement(), "KJotsBook"); + for ( QDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling() ) { + QDomElement e = n.toElement(); + if ( (!e.isNull()) && e.tagName() == "KJotsPage" ) + insertTitledNote(basket, XMLWork::getElementText(e, "Title"), XMLWork::getElementText(e, "Text")); + } + finishImport(basket); + + } + + file.close(); + } + } +} + +void SoftwareImporters::importKNotes() +{ + QString dirPath = locateLocal("appdata","") + "/../knotes/"; // I thing the assumption is good + QDir dir(dirPath, QString::null, QDir::Name | QDir::IgnoreCase, QDir::Files | QDir::NoSymLinks); + + QStringList list = dir.entryList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file + if ( ! (*it).endsWith(".ics") ) // Don't process *.ics~ and otehr files + continue; + QFile file(dirPath + *it); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + + // First create a basket for it: + BasketFactory::newBasket(/*icon=*/"knotes", /*name=*/i18n("From KNotes"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + bool inVJournal = false; + bool inDescription = false; + bool isRichText = false; + QString title, body; + QString buf; + while (1) { + buf = stream.readLine(); + if (buf.isNull()) // OEF + break; + + if ( !buf.isNull() && buf == "BEGIN:VJOURNAL") { + inVJournal = true; + } else if (inVJournal && buf.startsWith("SUMMARY:")) { + title = buf.mid(8, buf.length()); + } else if (inVJournal && buf.startsWith("DESCRIPTION:")) { + body = buf.mid(12, buf.length()); + inDescription = true; + } else if (inDescription && buf.startsWith(" ")) { + body += buf.mid(1, buf.length()); + } else if (buf.startsWith("X-KDE-KNotes-RichText:")) { + isRichText = XMLWork::trueOrFalse(buf.mid(22, buf.length() - 22).stripWhiteSpace(), "false"); + } else if (buf == "END:VJOURNAL") { + insertTitledNote(basket, fromICS(title), fromICS(body), (isRichText ? Qt::RichText : Qt::PlainText)); + inVJournal = false; + inDescription = false; + isRichText = false; + title = ""; + body = ""; + } else + inDescription = false; + } + + // Bouh : duplicate code + // In case of unvalide ICAL file! + if ( ! body.isEmpty() ) // Add the ending note + insertTitledNote(basket, fromICS(title), fromICS(body), (isRichText ? Qt::RichText : Qt::PlainText)); + file.close(); + finishImport(basket); + } + } +} + +void SoftwareImporters::importStickyNotes() +{ + // Sticky Notes file is usually located in ~/.gnome2/stickynotes_applet + // We will search all directories in "~/" that contain "gnome" in the name, + // and will search for "stickynotes_applet" file (that should be XML file with root. + QDir dir(QDir::home().absPath(), QString::null, QDir::Name | QDir::IgnoreCase, + QDir::Dirs | QDir::NoSymLinks | QDir::Hidden); + QStringList founds; + + QStringList list = dir.entryList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each folder + if ( (*it).contains("gnome", false) ) { + QString fullPath = QDir::home().absPath() + "/" + (*it) + "/stickynotes_applet"; + if (dir.exists(fullPath)) + founds += fullPath; + } + } + + for ( QStringList::Iterator it = founds.begin(); it != founds.end(); ++it ) { // For each file + QFile file(*it); + QDomDocument *doc = XMLWork::openFile("stickynotes", *it); + if (doc == 0) + continue; + + // First create a basket for it: + BasketFactory::newBasket(/*icon=*/"gnome", /*name=*/i18n("From Sticky Notes"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + QDomElement docElem = doc->documentElement(); + for ( QDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling() ) { + QDomElement e = n.toElement(); + if ( (!e.isNull()) && e.tagName() == "note" ) + insertTitledNote(basket, e.attribute("title"), e.text()); + } + finishImport(basket); + } +} + + + +// TODO: FIXME: Code duplicated from notecontent.cpp but with UTF-8 encoding. +// TODO: FIXME: Later, merge! +QString loadUtf8FileToString(const QString &fileName) +{ + QFile file(fileName); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + QString text; + text = stream.read(); + file.close(); + return text; + } else + return ""; +} + + +void SoftwareImporters::importTomboy() +{ + QString dirPath = QDir::home().absPath() + "/.tomboy/"; // I thing the assumption is good + QDir dir(dirPath, QString::null, QDir::Name | QDir::IgnoreCase, QDir::Files | QDir::NoSymLinks); + + Basket *basket = 0; // Create the basket ONLY if we found at least one note to add! + + QStringList list = dir.entryList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file + if ( ! (*it).endsWith(".note") ) + continue; + QDomDocument *doc = XMLWork::openFile("note", dirPath + *it); + if (doc == 0) + continue; + + if (basket == 0) { + // First create a basket for it: + BasketFactory::newBasket(/*icon=*/"tomboy", /*name=*/i18n("From Tomboy"), /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + basket = Global::bnpView->currentBasket(); + basket->load(); + } + + QDomElement docElem = doc->documentElement(); + QString title = XMLWork::getElementText(docElem, "title"); + + // DOES NOT REALLY WORKS: + //QDomElement contentElement = XMLWork::getElement(docElem, "text/note-content"); + //QString content = XMLWork::innerXml(contentElement); + + // Isolate "CONTENT"! + QString xml = loadUtf8FileToString(dirPath + *it); + xml = xml.mid(xml.find("") + 1); + xml = xml.mid(0, xml.find("")); + + if (!title.isEmpty() && !/*content*/xml.isEmpty()) + insertTitledNote(basket, title, fromTomboy(xml/*content*/), Qt::RichText); + } + + if (basket) + finishImport(basket); +} + +void SoftwareImporters::importTextFile() +{ + QString fileName = KFileDialog::getOpenFileName(":ImportTextFile", "*|All files"); + if (fileName.isEmpty()) + return; + + TextFileImportDialog dialog; + if (dialog.exec() == QDialog::Rejected) + return; + QString separator = dialog.separator(); + + QFile file(fileName); + if (file.open(IO_ReadOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::Locale); + QString content = stream.read(); + QStringList list = (separator.isEmpty() + ? QStringList(content) + : QStringList::split(separator, content, /*allowEmptyEntries=*/false) + ); + + // First create a basket for it: + QString title = i18n("From TextFile.txt", "From %1").arg(KURL(fileName).fileName()); + BasketFactory::newBasket(/*icon=*/"txt", title, /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", /*createIn=*/0); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + // Import every notes: + for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { + Note *note = NoteFactory::createNoteFromText((*it).stripWhiteSpace(), basket); + basket->insertNote(note, basket->firstNote(), Note::BottomColumn, QPoint(), /*animate=*/false); + } + + // Finish the export: + finishImport(basket); + } +} + +/** @author Petri Damsten + */ +void SoftwareImporters::importKnowIt() +{ + KURL url = KFileDialog::getOpenURL(":ImportKnowIt", + "*.kno|KnowIt files\n*|All files"); + if (!url.isEmpty()) + { + QFile file(url.path()); + QFileInfo info(url.path()); + Basket* basket = 0; + QPtrStack baskets; + QString text; + int hierarchy = 0; + + TreeImportDialog dialog; + if (dialog.exec() == QDialog::Rejected) + return; + + hierarchy = dialog.choice(); + + BasketFactory::newBasket(/*icon=*/"knowit", + /*name=*/info.baseName(), + /*backgroundImage=*/"", + /*backgroundColor=*/QColor(), + /*textColor=*/QColor(), + /*templateName=*/"1column", + /*createIn=*/0); + basket = Global::bnpView->currentBasket(); + basket->load(); + baskets.push(basket); + + if(file.open(IO_ReadOnly)) + { + QTextStream stream(&file); + uint level = 0; + QString name; + QString line; + QStringList links; + QStringList descriptions; + + stream.setEncoding(QTextStream::UnicodeUTF8); + while(1) + { + line = stream.readLine(); + + if(line.startsWith("\\NewEntry") || + line.startsWith("\\CurrentEntry") || stream.atEnd()) + { + while(level + 1 < baskets.count()) + baskets.pop(); + if(level + 1 > baskets.count()) + baskets.push(basket); + + if(!name.isEmpty()) + { + if((level == 0 && hierarchy == 1) || + (hierarchy == 0)) + { + BasketFactory::newBasket(/*icon=*/"knowit", + /*name=*/name, + /*backgroundImage=*/"", + /*backgroundColor=*/QColor(), + /*textColor=*/QColor(), + /*templateName=*/"1column", + /*createIn=*/baskets.top()); + basket = Global::bnpView->currentBasket(); + basket->load(); + } + + if(!text.stripWhiteSpace().isEmpty() || + hierarchy == 2 || + (hierarchy == 1 && level > 0)) + { + insertTitledNote(basket, name, text, Qt::RichText); + } + for(uint j = 0; j < links.count(); ++j) + { + Note* link; + if(descriptions.count() < j+1 || descriptions[j].isEmpty()) + link = NoteFactory::createNoteLink(links[j], basket); + else + link = NoteFactory::createNoteLink(links[j], + descriptions[j], basket); + basket->insertCreatedNote(link); + } + finishImport(basket); + } + if(stream.atEnd()) + break; + + int i = line.find("Entry") + 6; + int n = line.find(' ', i); + level = line.mid(i, n - i).toInt(); + name = line.mid(n+1); + text = ""; + links.clear(); + descriptions.clear(); + } + else if(line.startsWith("\\Link")) + { + links.append(line.mid(6)); + } + else if(line.startsWith("\\Descr")) + { + while(descriptions.count() < links.count() - 1) + descriptions.append(""); + descriptions.append(line.mid(7)); + } + else + { + text += line + "\n"; + } + } + file.close(); + } + } +} + +void SoftwareImporters::importTuxCards() +{ + QString fileName = KFileDialog::getOpenFileName(":ImportTuxCards", "*|All files"); + if (fileName.isEmpty()) + return; + + TreeImportDialog dialog; + if (dialog.exec() == QDialog::Rejected) + return; + + int hierarchy = dialog.choice(); + + QDomDocument *document = XMLWork::openFile("tuxcards_data_file"/*"InformationCollection"*/, fileName); + if (document == 0) { + KMessageBox::error(0, i18n("Can not import that file. It is either corrupted or not a TuxCards file."), i18n("Bad File Format")); + return; + } + + QDomElement collection = document->documentElement(); + int remainingHierarchy = (hierarchy == 0 ? 65000 : 3 - hierarchy); + importTuxCardsNode(collection, /*parentBasket=*/0, /*parentNote=*/0, remainingHierarchy); +} + +// TODO: Encrypted note.
      The importer do not support encrypted notes yet. Please remove the encryption with TuxCards and re-import the file."); + } + + if (remainingHierarchy > 0) { + BasketFactory::newBasket(icon, name, /*backgroundImage=*/"", /*backgroundColor=*/QColor(), /*textColor=*/QColor(), /*templateName=*/"1column", parentBasket); + Basket *basket = Global::bnpView->currentBasket(); + basket->load(); + + if (isRichText) + nContent = NoteFactory::createNoteHtml(content, basket); + else + nContent = NoteFactory::createNoteText(content, basket); + basket->insertNote(nContent, basket->firstNote(), Note::BottomColumn, QPoint(), /*animate=*/false); + + importTuxCardsNode(e, basket, 0, remainingHierarchy - 1); + finishImport(basket); + } else { + Note *nGroup = insertTitledNote(parentBasket, name, content, (isRichText ? Qt::RichText : Qt::PlainText), parentNote); + importTuxCardsNode(e, parentBasket, nGroup, remainingHierarchy - 1); + } + } +} + +#include "softwareimporters.moc" diff --git a/src/softwareimporters.h b/src/softwareimporters.h new file mode 100644 index 0000000..05df6f8 --- /dev/null +++ b/src/softwareimporters.h @@ -0,0 +1,91 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef SOFTWAREIMPORTERS_H +#define SOFTWAREIMPORTERS_H + +#include +#include + +class QString; +class QVButtonGroup; +class QDomElement; +class KTextEdit; + +class Basket; +class Note; + +/** The dialog to ask how to import hierarchical data. + * @author Sébastien Laoût + */ +class TreeImportDialog : public KDialogBase +{ + Q_OBJECT + public: + TreeImportDialog(QWidget *parent = 0); + ~TreeImportDialog(); + int choice(); + private: + QVButtonGroup *m_choices; +}; + +/** The dialog to ask how to import text files. + * @author Sébastien Laoût + */ +class TextFileImportDialog : public KDialogBase +{ + Q_OBJECT + public: + TextFileImportDialog(QWidget *parent = 0); + ~TextFileImportDialog(); + QString separator(); + protected slots: + void customSeparatorChanged(); + private: + QVButtonGroup *m_choices; + QRadioButton *m_anotherSeparator; + QTextEdit *m_customSeparator; +}; + +/** Functions that import data from other softwares. + * @author Sébastien Laoût + */ +namespace SoftwareImporters +{ + // Useful methods to design importers: + QString fromICS(const QString &ics); + QString fromTomboy(QString tomboy); + Note* insertTitledNote(Basket *parent, const QString &title, const QString &content, Qt::TextFormat format = Qt::PlainText, Note *parentNote = 0); + void finishImport(Basket *basket); + + // The importers in themselves: + void importKNotes(); + void importKJots(); + void importKnowIt(); + void importTuxCards(); + void importStickyNotes(); + void importTomboy(); + void importTextFile(); + + // + void importTuxCardsNode(const QDomElement &element, Basket *parentBasket, Note *parentNote, int remainingHierarchy); +} + +#endif // SOFTWAREIMPORTERS_H diff --git a/src/systemtray.cpp b/src/systemtray.cpp new file mode 100644 index 0000000..d245a3a --- /dev/null +++ b/src/systemtray.cpp @@ -0,0 +1,463 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +/** KSystemTray2 */ + +// To draw the systray screenshot image: +#include +#include +#include +#include "linklabel.h" +#include "note.h" + +#include +#include +#include +#include +#include +// To know the program name: +#include +#include +#include +#include +// Others: +#include +#include +#include +#include +#include +#include +#include +#include "systemtray.h" +#include "basket.h" +#include "settings.h" +#include "global.h" +#include "tools.h" + +KSystemTray2::KSystemTray2(QWidget *parent, const char *name) + : KSystemTray(parent, name) +{ +} + +KSystemTray2::~KSystemTray2() +{ +} + +void KSystemTray2::displayCloseMessage(QString fileMenu) +{ + /* IDEAS OF IMPROVEMENTS: + * - Use queuedMessageBox() but it need a dontAskAgainName parameter + * and image in QMimeSourceFactory shouldn't be removed. + * - Sometimes the systray icon is covered (a passive popup...) + * Use XComposite extension, if available, to get the kicker pixmap. + * - Perhapse desaturate the area around the proper SysTray icon, + * helping bring it into sharper focus. Or draw the cicle with XOR + * brush. + * - Perhapse add the icon in the text (eg. "... in the + * system tray ([icon])."). Add some clutter to the dialog. + */ +#if KDE_IS_VERSION( 3, 1, 90 ) + // Don't do all the computations if they are unneeded: + if ( ! KMessageBox::shouldBeShownContinue("hideOnCloseInfo") ) + return; +#endif + // "Default parameter". Here, to avoid a i18n() call and dependancy in the .h + if (fileMenu.isEmpty()) + fileMenu = i18n("File"); + + // Some values we need: + QPoint g = mapToGlobal(pos()); + int desktopWidth = kapp->desktop()->width(); + int desktopHeight = kapp->desktop()->height(); + int tw = width(); + int th = height(); + + // We are triying to make a live screenshot of the systray icon to circle it + // and show it to the user. If no systray is used or if the icon is not visible, + // we should not show that screenshot but only a text! + + // 1. Determine if the user use a system tray area or not: + QCString screenstr; + screenstr.setNum(qt_xscreen()); + QCString trayatom = "_NET_SYSTEM_TRAY_S" + screenstr; + bool useSystray = (KSelectionWatcher(trayatom).owner() != 0L); + + // 2. And then if the icon is visible too (eg. this->show() has been called): + useSystray = useSystray && isVisible(); + + // 3. Kicker (or another systray manager) can be visible but masked out of + // the screen (ie. on right or on left of it). We check if the icon isn't + // out of screen. + if (useSystray) { + QRect deskRect(0, 0, desktopWidth, desktopHeight); + if ( !deskRect.contains(g.x(), g.y()) || + !deskRect.contains(g.x() + tw, g.y() + th) ) + useSystray = false; + } + + // 4. We raise the window containing the systray icon (typically the kicker) to + // have the most chances it is visible during the capture: +/* if (useSystray) { + // We are testing if one of the corners is hidden, and if yes, we would enter + // a time consuming process (raise kicker and wait some time): +// if (kapp->widgetAt(g) != this || +// kapp->widgetAt(g + QPoint(tw-1, 0)) != this || +// kapp->widgetAt(g + QPoint(0, th-1)) != this || +// kapp->widgetAt(g + QPoint(tw-1, th-1)) != this) { + int systrayManagerWinId = topLevelWidget()->winId(); + KWin::forceActiveWindow(systrayManagerWinId); + kapp->processEvents(); // Because without it the systrayManager is raised only after the messageBox is displayed +// KWin::activateWindow(systrayManagerWinId); +// kapp->processEvents(); // Because without it the systrayManager is raised only after the messageBox is displayed +// KWin::raiseWindow(systrayManagerWinId); +// kapp->processEvents(); // Because without it the systrayManager is raised only after the messageBox is displayed + sleep(1); + // TODO: Re-verify that at least one corner is now visible +// } + }*/ + +// KMessageBox::information(this, QString::number(g.x()) + ":" + QString::number(g.y()) + ":" + +// QString::number((int)(kapp->widgetAt(g+QPoint(1,1))))); + + QString message = i18n( + "

      Closing the main window will keep %1 running in the system tray. " + "Use Quit from the Basket menu to quit the application.

      " + ).arg(KGlobal::instance()->aboutData()->programName()); + // We are sure the systray icon is visible: ouf! + if (useSystray) { + // Compute size and position of the pixmap to be grabbed: + int w = desktopWidth / 4; + int h = desktopHeight / 9; + int x = g.x() + tw/2 - w/2; // Center the rectange in the systray icon + int y = g.y() + th/2 - h/2; + if (x < 0) x = 0; // Move the rectangle to stay in the desktop limits + if (y < 0) y = 0; + if (x + w > desktopWidth) x = desktopWidth - w; + if (y + h > desktopHeight) y = desktopHeight - h; + + // Grab the desktop and draw a circle arround the icon: + QPixmap shot = QPixmap::grabWindow(qt_xrootwin(), x, y, w, h); + QPainter painter(&shot); + const int CIRCLE_MARGINS = 6; + const int CIRCLE_WIDTH = 3; + const int SHADOW_OFFSET = 1; + const int IMAGE_BORDER = 1; + int ax = g.x() - x - CIRCLE_MARGINS - 1; + int ay = g.y() - y - CIRCLE_MARGINS - 1; + painter.setPen( QPen(KApplication::palette().active().dark(), CIRCLE_WIDTH) ); + painter.drawArc(ax + SHADOW_OFFSET, ay + SHADOW_OFFSET, + tw + 2*CIRCLE_MARGINS, th + 2*CIRCLE_MARGINS, 0, 16*360); + painter.setPen( QPen(Qt::red/*KApplication::palette().active().highlight()*/, CIRCLE_WIDTH) ); + painter.drawArc(ax, ay, tw + 2*CIRCLE_MARGINS, th + 2*CIRCLE_MARGINS, 0, 16*360); +#if 1 + // Draw the pixmap over the screenshot in case a window hide the icon: + painter.drawPixmap(g.x() - x, g.y() - y + 1, *pixmap()); +#endif + painter.end(); + + // Then, we add a border arround the image to make it more visible: + QPixmap finalShot(w + 2*IMAGE_BORDER, h + 2*IMAGE_BORDER); + finalShot.fill(KApplication::palette().active().foreground()); + painter.begin(&finalShot); + painter.drawPixmap(IMAGE_BORDER, IMAGE_BORDER, shot); + painter.end(); + + // Associate source to image and show the dialog: + QMimeSourceFactory::defaultFactory()->setPixmap("systray_shot", finalShot); + KMessageBox::information(kapp->activeWindow(), + message + "

      ", + i18n("Docking in System Tray"), "hideOnCloseInfo"); + QMimeSourceFactory::defaultFactory()->setData("systray_shot", 0L); + } else { + KMessageBox::information(kapp->activeWindow(), + message, + i18n("Docking in System Tray"), "hideOnCloseInfo"); + } +} + +/** SystemTray */ + +SystemTray::SystemTray(QWidget *parent, const char *name) + : KSystemTray2(parent, name != 0 ? name : "SystemTray"), m_showTimer(0), m_autoShowTimer(0) +{ + setAcceptDrops(true); + + m_showTimer = new QTimer(this); + connect( m_showTimer, SIGNAL(timeout()), Global::bnpView, SLOT(setActive()) ); + + m_autoShowTimer = new QTimer(this); + connect( m_autoShowTimer, SIGNAL(timeout()), Global::bnpView, SLOT(setActive()) ); + + // Create pixmaps for the icon: + m_iconPixmap = loadIcon("basket"); +// FIXME: When main window is shown at start, the icon is loaded 1 pixel too high +// and then reloaded instantly after at the right position. +// setPixmap(m_iconPixmap); // Load it the sooner as possible to avoid flicker + QImage lockedIconImage = m_iconPixmap.convertToImage(); + QPixmap lockOverlayPixmap = loadIcon("lockoverlay"); + QImage lockOverlayImage = lockOverlayPixmap.convertToImage(); + KIconEffect::overlay(lockedIconImage, lockOverlayImage); + m_lockedIconPixmap.convertFromImage(lockedIconImage); + + updateToolTip(); // Set toolTip AND icon +} + +SystemTray::~SystemTray() +{ +} + +void SystemTray::mousePressEvent(QMouseEvent *event) +{ + if (event->button() & Qt::LeftButton) { // Prepare drag + m_pressPos = event->globalPos(); + m_canDrag = true; + event->accept(); + } else if (event->button() & Qt::MidButton) { // Paste + Global::bnpView->currentBasket()->setInsertPopupMenu(); + Global::bnpView->currentBasket()->pasteNote(QClipboard::Selection); + Global::bnpView->currentBasket()->cancelInsertPopupMenu(); + if (Settings::usePassivePopup()) + Global::bnpView->showPassiveDropped(i18n("Pasted selection to basket %1")); + event->accept(); + } else if (event->button() & Qt::RightButton) { // Popup menu + KPopupMenu menu(this); + menu.insertTitle( SmallIcon("basket"), kapp->aboutData()->programName() ); + + Global::bnpView->actNewBasket->plug(&menu); + Global::bnpView->actNewSubBasket->plug(&menu); + Global::bnpView->actNewSiblingBasket->plug(&menu); + menu.insertSeparator(); + Global::bnpView->m_actPaste->plug(&menu); + Global::bnpView->m_actGrabScreenshot->plug(&menu); + Global::bnpView->m_actColorPicker->plug(&menu); + + if(!Global::bnpView->isPart()) + { + KAction* action; + + menu.insertSeparator(); + + action = Global::bnpView->actionCollection()->action("options_configure_global_keybinding"); + if(action) + action->plug(&menu); + + action = Global::bnpView->actionCollection()->action("options_configure"); + if(action) + action->plug(&menu); + + menu.insertSeparator(); + + // Minimize / restore : since we manage the popup menu by ourself, we should do that work : + action = Global::bnpView->actionCollection()->action("minimizeRestore"); + if(action) + { + if (Global::mainWindow()->isVisible()) + action->setText(i18n("&Minimize")); + else + action->setText(i18n("&Restore")); + action->plug(&menu); + } + + action = Global::bnpView->actionCollection()->action("file_quit"); + if(action) + action->plug(&menu); + } + + Global::bnpView->currentBasket()->setInsertPopupMenu(); + connect( &menu, SIGNAL(aboutToHide()), Global::bnpView->currentBasket(), SLOT(delayedCancelInsertPopupMenu()) ); + menu.exec(event->globalPos()); + event->accept(); + } else + event->ignore(); +} + +void SystemTray::mouseMoveEvent(QMouseEvent *event) +{ + event->ignore(); +} + +void SystemTray::mouseReleaseEvent(QMouseEvent *event) +{ + m_canDrag = false; + if (event->button() == Qt::LeftButton) // Show / hide main window + if ( rect().contains(event->pos()) ) { // Accept only if released in systemTray + toggleActive(); + emit showPart(); + event->accept(); + } else + event->ignore(); +} + +void SystemTray::dragEnterEvent(QDragEnterEvent *event) +{ + m_showTimer->start( Settings::dropTimeToShow() * 100, true ); + Global::bnpView->currentBasket()->showFrameInsertTo(); +/// m_parentContainer->setStatusBarDrag(); // FIXME: move this line in Basket::showFrameInsertTo() ? + Basket::acceptDropEvent(event); +} + +void SystemTray::dragMoveEvent(QDragMoveEvent *event) +{ + Basket::acceptDropEvent(event); +} + +void SystemTray::dragLeaveEvent(QDragLeaveEvent*) +{ + m_showTimer->stop(); + m_canDrag = false; + Global::bnpView->currentBasket()->resetInsertTo(); + Global::bnpView->updateStatusBarHint(); +} + +#include + +void SystemTray::dropEvent(QDropEvent *event) +{ + m_showTimer->stop(); + + Global::bnpView->currentBasket()->blindDrop(event); + +/* Basket *basket = Global::bnpView->currentBasket(); + if (!basket->isLoaded()) { + Global::bnpView->showPassiveLoading(basket); + basket->load(); + } + basket->contentsDropEvent(event); + std::cout << (long) basket->selectedNotes() << std::endl; + + if (Settings::usePassivePopup()) + Global::bnpView->showPassiveDropped(i18n("Dropped to basket %1"));*/ +} + +/* This function comes directly from JuK: */ + +/* + * This function copies the entirety of src into dest, starting in + * dest at x and y. This function exists because I was unable to find + * a function like it in either QImage or kdefx + */ +static bool copyImage(QImage &dest, QImage &src, int x, int y) +{ + if(dest.depth() != src.depth()) + return false; + if((x + src.width()) >= dest.width()) + return false; + if((y + src.height()) >= dest.height()) + return false; + + // We want to use KIconEffect::overlay to do this, since it handles + // alpha, but the images need to be the same size. We can handle that. + + QImage large_src(dest); + + // It would perhaps be better to create large_src based on a size, but + // this is the easiest way to make a new image with the same depth, size, + // etc. + + large_src.detach(); + + // However, we do have to specifically ensure that setAlphaBuffer is set + // to false + + large_src.setAlphaBuffer(false); + large_src.fill(0); // All transparent pixels + large_src.setAlphaBuffer(true); + + int w = src.width(); + int h = src.height(); + for(int dx = 0; dx < w; dx++) + for(int dy = 0; dy < h; dy++) + large_src.setPixel(dx + x, dy + y, src.pixel(dx, dy)); + + // Apply effect to image + + KIconEffect::overlay(dest, large_src); + + return true; +} + +void SystemTray::updateToolTip() +{ +// return; ///////////////////////////////////////////////////// + + Basket *basket = Global::bnpView->currentBasket(); + if (!basket) + return; + + if (basket->icon().isEmpty() || basket->icon() == "basket" || ! Settings::showIconInSystray()) + setPixmap(basket->isLocked() ? m_lockedIconPixmap : m_iconPixmap); + else { + // Code that comes from JuK: + QPixmap bgPix = loadIcon("basket"); + QPixmap fgPix = SmallIcon(basket->icon()); + + QImage bgImage = bgPix.convertToImage(); // Probably 22x22 + QImage fgImage = fgPix.convertToImage(); // Should be 16x16 + QImage lockOverlayImage = loadIcon("lockoverlay").convertToImage(); + + KIconEffect::semiTransparent(bgImage); + copyImage(bgImage, fgImage, (bgImage.width() - fgImage.width()) / 2, + (bgImage.height() - fgImage.height()) / 2); + if (basket->isLocked()) + KIconEffect::overlay(bgImage, lockOverlayImage); + + bgPix.convertFromImage(bgImage); + setPixmap(bgPix); + } + + //QTimer::singleShot( Container::c_delayTooltipTime, this, SLOT(updateToolTipDelayed()) ); + // No need to delay: it's be called when notes are changed: + updateToolTipDelayed(); +} + +void SystemTray::updateToolTipDelayed() +{ + Basket *basket = Global::bnpView->currentBasket(); + + QString tip = "

      " + ( basket->isLocked() ? kapp->makeStdCaption(i18n("%1 (Locked)")) + : kapp->makeStdCaption( "%1") ) + .arg(Tools::textToHTMLWithoutP(basket->basketName())); + + QToolTip::add(this, tip); +} + +void SystemTray::wheelEvent(QWheelEvent *event) +{ + if (event->delta() > 0) + Global::bnpView->goToPreviousBasket(); + else + Global::bnpView->goToNextBasket(); + + if (Settings::usePassivePopup()) + Global::bnpView->showPassiveContent(); +} + +void SystemTray::enterEvent(QEvent*) +{ + if (Settings::showOnMouseIn()) + m_autoShowTimer->start(Settings::timeToShowOnMouseIn() * 100, true ); +} + +void SystemTray::leaveEvent(QEvent*) +{ + m_autoShowTimer->stop(); +} + +#include "systemtray.moc" diff --git a/src/systemtray.h b/src/systemtray.h new file mode 100644 index 0000000..d36bd9b --- /dev/null +++ b/src/systemtray.h @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef SYSTEMTRAY_H +#define SYSTEMTRAY_H + +#include + +class MainWindow; + +/** Convenient class to develop the displayCloseMessage() dialog + * hopefuly integrated in KDE 3.4 + * @author S�astien Laot + */ +class KSystemTray2 : public KSystemTray +{ + Q_OBJECT + public: + KSystemTray2(QWidget *parent = 0, const char *name = 0); + ~KSystemTray2(); + /** + * Call this method when the user clicked the close button of the window + * (the [x]) to inform him that the application sit in the system tray + * and willn't be closed (as he is used to). + * + * You usualy call it from reimplemented KMainWindow::queryClose() + * + * @since 3.4 + */ + void displayCloseMessage(QString fileMenu = ""); +}; + +/** This class provide a personalized system tray icon. + * @author S�astien Laot + */ +class SystemTray : public KSystemTray2 +{ + Q_OBJECT + public: + SystemTray(QWidget *parent = 0, const char *name = 0); + ~SystemTray(); + protected: + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dragMoveEvent(QDragMoveEvent* event); + virtual void dragLeaveEvent(QDragLeaveEvent*); + virtual void dropEvent(QDropEvent *event); + void wheelEvent(QWheelEvent *event); + void enterEvent(QEvent*); + void leaveEvent(QEvent*); + public slots: + void updateToolTip(); + protected slots: + void updateToolTipDelayed(); + signals: + void showPart(); + private: + QTimer *m_showTimer; + QTimer *m_autoShowTimer; + bool m_canDrag; + QPoint m_pressPos; + QPixmap m_iconPixmap; + QPixmap m_lockedIconPixmap; +}; + +#endif // SYSTEMTRAY_H diff --git a/src/tag.cpp b/src/tag.cpp new file mode 100644 index 0000000..a4ed7e6 --- /dev/null +++ b/src/tag.cpp @@ -0,0 +1,934 @@ +/*************************************************************************** + * Copyright (C) 2005 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tag.h" +#include "xmlwork.h" +#include "global.h" +#include "debugwindow.h" +#include "bnpview.h" +#include "tools.h" +#include "basket.h" + +#include + +/** class State: */ + +State::State(const QString &id, Tag *tag) + : m_id(id), m_name(), m_emblem(), m_bold(false), m_italic(false), m_underline(false), m_strikeOut(false), + m_textColor(), m_fontName(), m_fontSize(-1), m_backgroundColor(), m_textEquivalent(), m_onAllTextLines(false), m_parentTag(tag) +{ +} + +State::~State() +{ +} + +State* State::nextState(bool cycle /*= true*/) +{ + if (!parentTag()) + return 0; + + List states = parentTag()->states(); + // The tag contains only one state: + if (states.count() == 1) + return 0; + // Find the next state: + for (List::iterator it = states.begin(); it != states.end(); ++it) + // Found the current state in the list: + if (*it == this) { + // Find the next state: + State *next = *(++it); + if (it == states.end()) + return (cycle ? states.first() : 0); + return next; + } + // Should not happens: + return 0; +} + +QString State::fullName() +{ + if (!parentTag() || parentTag()->states().count() == 1) + return (name().isEmpty() && parentTag() ? parentTag()->name() : name()); + return QString(i18n("%1: %2")).arg(parentTag()->name(), name()); +} + +QFont State::font(QFont base) +{ + if (bold()) + base.setBold(true); + if (italic()) + base.setItalic(true); + if (underline()) + base.setUnderline(true); + if (strikeOut()) + base.setStrikeOut(true); + if (!fontName().isEmpty()) + base.setFamily(fontName()); + if (fontSize() > 0) + base.setPointSize(fontSize()); + return base; +} + +QString State::toCSS(const QString &gradientFolderPath, const QString &gradientFolderName, const QFont &baseFont) +{ + QString css; + if (bold()) + css += " font-weight: bold;"; + if (italic()) + css += " font-style: italic;"; + if (underline() && strikeOut()) + css += " text-decoration: underline line-through;"; + else if (underline()) + css += " text-decoration: underline;"; + else if (strikeOut()) + css += " text-decoration: line-through;"; + if (textColor().isValid()) + css += " color: " + textColor().name() + ";"; + if (!fontName().isEmpty()) { + QString fontFamily = Tools::cssFontDefinition(fontName(), /*onlyFontFamily=*/true); + css += " font-family: " + fontFamily + ";"; + } + if (fontSize() > 0) + css += " font-size: " + QString::number(fontSize()) + "px;"; + if (backgroundColor().isValid()) { + // Get the colors of the gradient and the border: + QColor topBgColor; + QColor bottomBgColor; + Note::getGradientColors(backgroundColor(), &topBgColor, &bottomBgColor); + // Produce the CSS code: + QString gradientFileName = Basket::saveGradientBackground(backgroundColor(), font(baseFont), gradientFolderPath); + css += " background: " + bottomBgColor.name() + " url('" + gradientFolderName + gradientFileName + "') repeat-x;"; + css += " border-top: solid " + topBgColor.name() + " 1px;"; + css += " border-bottom: solid " + Tools::mixColor(topBgColor, bottomBgColor).name() + " 1px;"; + } + + if (css.isEmpty()) + return ""; + else + return " .tag_" + id() + " {" + css + " }\n"; +} + +void State::merge(const List &states, State *result, int *emblemsCount, bool *haveInvisibleTags, const QColor &backgroundColor) +{ + *result = State(); // Reset to default values. + *emblemsCount = 0; + *haveInvisibleTags = false; + + for (List::const_iterator it = states.begin(); it != states.end(); ++it) { + State *state = *it; + bool isVisible = false; + // For each propertie, if that properties have a value (is not default) is the current state of the list, + // and if it haven't been set to the result state by a previous state, then it's visible and we assign the propertie to the result state. + if (!state->emblem().isEmpty()) { + ++*emblemsCount; + isVisible = true; + } + if (state->bold() && !result->bold()) { + result->setBold(true); + isVisible = true; + } + if (state->italic() && !result->italic()) { + result->setItalic(true); + isVisible = true; + } + if (state->underline() && !result->underline()) { + result->setUnderline(true); + isVisible = true; + } + if (state->strikeOut() && !result->strikeOut()) { + result->setStrikeOut(true); + isVisible = true; + } + if (state->textColor().isValid() && !result->textColor().isValid()) { + result->setTextColor(state->textColor()); + isVisible = true; + } + if (!state->fontName().isEmpty() && result->fontName().isEmpty()) { + result->setFontName(state->fontName()); + isVisible = true; + } + if (state->fontSize() > 0 && result->fontSize() <= 0) { + result->setFontSize(state->fontSize()); + isVisible = true; + } + if (state->backgroundColor().isValid() && !result->backgroundColor().isValid() && state->backgroundColor() != backgroundColor) { // vv + result->setBackgroundColor(state->backgroundColor()); // This is particular: if the note background color is the same as the basket one, don't use that. + isVisible = true; + } + // If it's not visible, well, at least one tag is not visible: the note will display "..." at the tags arrow place to show that: + if (!isVisible) + *haveInvisibleTags = true; + } +} + +void State::copyTo(State *other) +{ + other->m_id = m_id; + other->m_name = m_name; + other->m_emblem = m_emblem; + other->m_bold = m_bold; + other->m_italic = m_italic; + other->m_underline = m_underline; + other->m_strikeOut = m_strikeOut; + other->m_textColor = m_textColor; + other->m_fontName = m_fontName; + other->m_fontSize = m_fontSize; + other->m_backgroundColor = m_backgroundColor; + other->m_textEquivalent = m_textEquivalent; + other->m_onAllTextLines = m_onAllTextLines; // TODO + //TODO: other->m_parentTag; +} + +/** class Tag: */ + +Tag::List Tag::all = Tag::List(); + +long Tag::nextStateUid = 1; + +long Tag::getNextStateUid() +{ + return nextStateUid++; // Return the next Uid and THEN increment the Uid +} + +Tag::Tag() +{ + static int tagNumber = 0; + ++tagNumber; + QString sAction = "tag_shortcut_number_" + QString::number(tagNumber); + m_action = new KAction("FAKE TEXT", "FAKE ICON", KShortcut(), Global::bnpView, SLOT(activatedTagShortcut()), Global::bnpView->actionCollection(), sAction); + m_action->setShortcutConfigurable(false); // We do it in the tag properties dialog + + m_inheritedBySiblings = false; +} + +Tag::~Tag() +{ + delete m_action; +} + +void Tag::setName(const QString &name) +{ + m_name = name; + m_action->setText("TAG SHORTCUT: " + name); // TODO: i18n (for debug purpose only by now). +} + +State* Tag::stateForId(const QString &id) +{ + for (List::iterator it = all.begin(); it != all.end(); ++it) + for (State::List::iterator it2 = (*it)->states().begin(); it2 != (*it)->states().end(); ++it2) + if ((*it2)->id() == id) + return *it2; + return 0; +} + +Tag* Tag::tagForKAction(KAction *action) +{ + for (List::iterator it = all.begin(); it != all.end(); ++it) + if ((*it)->m_action == action) + return *it; + return 0; +} + +QMap Tag::loadTags(const QString &path/* = QString()*//*, bool merge = false*/) +{ + QMap mergedStates; + + bool merge = !path.isEmpty(); + QString fullPath = (merge ? path : Global::savesFolder() + "tags.xml"); + QString doctype = "basketTags"; + + QDir dir; + if (!dir.exists(fullPath)) { + if (merge) + return mergedStates; + DEBUG_WIN << "Tags file does not exist: Creating it..."; + createDefaultTagsSet(fullPath); + } + + QDomDocument *document = XMLWork::openFile(doctype, fullPath); + if (!document) { + DEBUG_WIN << "FAILED to read the tags file"; + return mergedStates; + } + + QDomElement docElem = document->documentElement(); + if (!merge) + nextStateUid = docElem.attribute("nextStateUid", QString::number(nextStateUid)).toLong(); + + QDomNode node = docElem.firstChild(); + while (!node.isNull()) { + QDomElement element = node.toElement(); + if ( (!element.isNull()) && element.tagName() == "tag" ) { + Tag *tag = new Tag(); + // Load properties: + QString name = XMLWork::getElementText(element, "name"); + QString shortcut = XMLWork::getElementText(element, "shortcut"); + QString inherited = XMLWork::getElementText(element, "inherited", "false"); + tag->setName(name); + tag->setShortcut(KShortcut(shortcut)); + tag->setInheritedBySiblings(XMLWork::trueOrFalse(inherited)); + // Load states: + QDomNode subNode = element.firstChild(); + while (!subNode.isNull()) { + QDomElement subElement = subNode.toElement(); + if ( (!subElement.isNull()) && subElement.tagName() == "state" ) { + State *state = new State(subElement.attribute("id"), tag); + state->setName( XMLWork::getElementText(subElement, "name") ); + state->setEmblem( XMLWork::getElementText(subElement, "emblem") ); + QDomElement textElement = XMLWork::getElement(subElement, "text"); + state->setBold( XMLWork::trueOrFalse(textElement.attribute("bold", "false")) ); + state->setItalic( XMLWork::trueOrFalse(textElement.attribute("italic", "false")) ); + state->setUnderline( XMLWork::trueOrFalse(textElement.attribute("underline", "false")) ); + state->setStrikeOut( XMLWork::trueOrFalse(textElement.attribute("strikeOut", "false")) ); + QString textColor = textElement.attribute("color", ""); + state->setTextColor(textColor.isEmpty() ? QColor() : QColor(textColor)); + QDomElement fontElement = XMLWork::getElement(subElement, "font"); + state->setFontName(fontElement.attribute("name", "")); + QString fontSize = fontElement.attribute("size", ""); + state->setFontSize(fontSize.isEmpty() ? -1 : fontSize.toInt()); + QString backgroundColor = XMLWork::getElementText(subElement, "backgroundColor", ""); + state->setBackgroundColor(backgroundColor.isEmpty() ? QColor() : QColor(backgroundColor)); + QDomElement textEquivalentElement = XMLWork::getElement(subElement, "textEquivalent"); + state->setTextEquivalent( textEquivalentElement.attribute("string", "") ); + state->setOnAllTextLines( XMLWork::trueOrFalse(textEquivalentElement.attribute("onAllTextLines", "false")) ); + tag->appendState(state); + } + subNode = subNode.nextSibling(); + } + // If the Tag is Valid: + if (tag->countStates() > 0) { + // Rename Things if Needed: + State *firstState = tag->states().first(); + if (tag->countStates() == 1 && firstState->name().isEmpty()) + firstState->setName(tag->name()); + if (tag->name().isEmpty()) + tag->setName(firstState->name()); + // Add or Merge the Tag: + if (!merge) { + all.append(tag); + } else { + Tag *similarTag = tagSimilarTo(tag); + // Tag does not exists, add it: + if (similarTag == 0) { + // We are merging the new states, so we should choose new and unique (on that computer) ids for those states: + for (State::List::iterator it = tag->states().begin(); it != tag->states().end(); ++it) { + State *state = *it; + QString uid = state->id(); + QString newUid = "tag_state_" + QString::number(getNextStateUid()); + state->setId(newUid); + mergedStates[uid] = newUid; + } + // TODO: if shortcut is already assigned to a previous note, do not import it, keep the user settings! + all.append(tag); + // Tag already exists, rename to theire ids: + } else { + State::List::iterator it2 = similarTag->states().begin(); + for (State::List::iterator it = tag->states().begin(); it != tag->states().end(); ++it, ++it2) { + State *state = *it; + State *similarState = *it2; + QString uid = state->id(); + QString newUid = similarState->id(); + if (uid != newUid) + mergedStates[uid] = newUid; + } + delete tag; // Already exists, not to be merged. Delete the shortcut and all. + } + } + } + } + node = node.nextSibling(); + } + + return mergedStates; +} + +Tag* Tag::tagSimilarTo(Tag *tagToTest) +{ + // Tags are considered similar if they have the same name, the same number of states, in the same order, and the same look. + // Keyboard shortcut, text equivalent and onEveryLines are user settings, and thus not considered during the comparision. + // Default tags (To Do, Important, Idea...) do not take into account the name of the tag and states during the comparision. + // Default tags are equal only if they have the same number of states, in the same order, and the same look. + // This is because default tag names are translated differently in every countries, but they are essentialy the same! + // User tags begins with "tag_state_" followed by a number. Default tags are the other ones. + + // Browse all tags: + for (List::iterator it = all.begin(); it != all.end(); ++it) { + Tag *tag = *it; + bool same = true; + bool sameName; + bool defaultTag = true; + // We test only name and look. Shorcut and whenever it is inherited by sibling new notes are user settings only! + sameName = tag->name() == tagToTest->name(); + if (tag->countStates() != tagToTest->countStates()) + continue; // Tag is different! + // We found a tag with same name, check if every states/look are same too: + State::List::iterator itTest = tagToTest->states().begin(); + for (State::List::iterator it2 = (*it)->states().begin(); it2 != (*it)->states().end(); ++it2, ++itTest) { + State *state = *it2; + State *stateToTest = *itTest; + if (state->id().startsWith("tag_state_") || stateToTest->id().startsWith("tag_state_")) { defaultTag = false; } + if (state->name() != stateToTest->name()) { sameName = false; } + if (state->emblem() != stateToTest->emblem()) { same = false; break; } + if (state->bold() != stateToTest->bold()) { same = false; break; } + if (state->italic() != stateToTest->italic()) { same = false; break; } + if (state->underline() != stateToTest->underline()) { same = false; break; } + if (state->strikeOut() != stateToTest->strikeOut()) { same = false; break; } + if (state->textColor() != stateToTest->textColor()) { same = false; break; } + if (state->fontName() != stateToTest->fontName()) { same = false; break; } + if (state->fontSize() != stateToTest->fontSize()) { same = false; break; } + if (state->backgroundColor() != stateToTest->backgroundColor()) { same = false; break; } + // Text equivalent (as well as onAllTextLines) is also a user setting! + } + // We found an existing tag that is "exactly" the same: + if (same && (sameName || defaultTag)) + return tag; + } + + // Not found: + return 0; +} + +void Tag::saveTags() +{ + DEBUG_WIN << "Saving tags..."; + saveTagsTo(all, Global::savesFolder() + "tags.xml"); +} + +void Tag::saveTagsTo(QValueList &list, const QString &fullPath) +{ + // Create Document: + QDomDocument document(/*doctype=*/"basketTags"); + QDomElement root = document.createElement("basketTags"); + root.setAttribute("nextStateUid", nextStateUid); + document.appendChild(root); + + // Save all tags: + for (List::iterator it = list.begin(); it != list.end(); ++it) { + Tag *tag = *it; + // Create tag node: + QDomElement tagNode = document.createElement("tag"); + root.appendChild(tagNode); + // Save tag properties: + XMLWork::addElement( document, tagNode, "name", tag->name() ); + XMLWork::addElement( document, tagNode, "shortcut", tag->shortcut().toStringInternal() ); + XMLWork::addElement( document, tagNode, "inherited", XMLWork::trueOrFalse(tag->inheritedBySiblings()) ); + // Save all states: + for (State::List::iterator it2 = (*it)->states().begin(); it2 != (*it)->states().end(); ++it2) { + State *state = *it2; + // Create state node: + QDomElement stateNode = document.createElement("state"); + tagNode.appendChild(stateNode); + // Save state properties: + stateNode.setAttribute("id", state->id()); + XMLWork::addElement( document, stateNode, "name", state->name() ); + XMLWork::addElement( document, stateNode, "emblem", state->emblem() ); + QDomElement textNode = document.createElement("text"); + stateNode.appendChild(textNode); + QString textColor = (state->textColor().isValid() ? state->textColor().name() : ""); + textNode.setAttribute( "bold", XMLWork::trueOrFalse(state->bold()) ); + textNode.setAttribute( "italic", XMLWork::trueOrFalse(state->italic()) ); + textNode.setAttribute( "underline", XMLWork::trueOrFalse(state->underline()) ); + textNode.setAttribute( "strikeOut", XMLWork::trueOrFalse(state->strikeOut()) ); + textNode.setAttribute( "color", textColor ); + QDomElement fontNode = document.createElement("font"); + stateNode.appendChild(fontNode); + fontNode.setAttribute( "name", state->fontName() ); + fontNode.setAttribute( "size", state->fontSize() ); + QString backgroundColor = (state->backgroundColor().isValid() ? state->backgroundColor().name() : ""); + XMLWork::addElement( document, stateNode, "backgroundColor", backgroundColor ); + QDomElement textEquivalentNode = document.createElement("textEquivalent"); + stateNode.appendChild(textEquivalentNode); + textEquivalentNode.setAttribute( "string", state->textEquivalent() ); + textEquivalentNode.setAttribute( "onAllTextLines", XMLWork::trueOrFalse(state->onAllTextLines()) ); + } + } + + // Write to Disk: + if (!Basket::safelySaveToFile(fullPath, "\n" + document.toString())) + DEBUG_WIN << "FAILED to save tags!"; +} + +void Tag::copyTo(Tag *other) +{ + other->m_name = m_name; + other->m_action->setShortcut(m_action->shortcut()); + other->m_inheritedBySiblings = m_inheritedBySiblings; +} + +void Tag::createDefaultTagsSet(const QString &fullPath) +{ + QString xml = QString( + "\n" + "\n" + " \n" + " %1\n" // "To Do" + " Ctrl+1\n" + " true\n" + " \n" + " %2\n" // "Unchecked" + " tag_checkbox\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " %3\n" // "Done" + " tag_checkbox_checked\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %4\n" // "Progress" + " Ctrl+2\n" + " true\n" + " \n" + " %5\n" // "0 %" + " tag_progress_000\n" + " \n" + " \n" + " \n" + " %6\n" // "25 %" + " tag_progress_025\n" + " \n" + " \n" + " \n" + " %7\n" // "50 %" + " tag_progress_050\n" + " \n" + " \n" + " \n" + " %8\n" // "75 %" + " tag_progress_075\n" + " \n" + " \n" + " \n" + " %9\n" // "100 %" + " tag_progress_100\n" + " \n" + " \n" + " \n" + "\n") + .arg( i18n("To Do"), i18n("Unchecked"), i18n("Done") ) // %1 %2 %3 + .arg( i18n("Progress"), i18n("0 %"), i18n("25 %") ) // %4 %5 %6 + .arg( i18n("50 %"), i18n("75 %"), i18n("100 %") ) // %7 %8 %9 + + QString( + " \n" + " %1\n" // "Priority" + " Ctrl+3\n" + " true\n" + " \n" + " %2\n" // "Low" + " tag_priority_low\n" + " \n" + " \n" + " \n" + " %3\n" // "Medium + " tag_priority_medium\n" + " \n" + " \n" + " \n" + " %4\n" // "High" + " tag_priority_high\n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %5\n" // "Preference" + " Ctrl+4\n" + " true\n" + " \n" + " %6\n" // "Bad" + " tag_preference_bad\n" + " \n" + " \n" + " \n" + " %7\n" // "Good" + " tag_preference_good\n" + " \n" + " \n" + " \n" + " %8\n" // "Excellent" + " tag_preference_excelent\n" // "excelent": typo error, but we should keep compatibility with old versions. + " \n" + " \n" + " \n" + "\n" + " \n" + " %9\n" // "Highlight" + " Ctrl+5\n" + " \n" + " #ffffcc\n" + " \" />\n" + " \n" + " \n" + "\n") + .arg( i18n("Priority"), i18n("Low"), i18n("Medium") ) // %1 %2 %3 + .arg( i18n("High"), i18n("Preference"), i18n("Bad") ) // %4 %5 %6 + .arg( i18n("Good"), i18n("Excellent"), i18n("Highlight") ) // %7 %8 %9 + + QString( + " \n" + " %1\n" // "Important" + " Ctrl+6\n" + " \n" + " tag_important\n" + " #ffcccc\n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %2\n" // "Very Important" + " Ctrl+7\n" + " \n" + " tag_important\n" + " \n" + " #ff0000\n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %3\n" // "Information" + " Ctrl+8\n" + " \n" + " messagebox_info\n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %4\n" // "Idea" + " Ctrl+9\n" + " \n" + " ktip\n" + " \n" // I. + " \n" + " ""\n" + "\n" + " \n" + " %6\n" // "Title" + " Ctrl+0\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " %7\n" // "Code" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " %8\n" // "Work" + " \n" + " \n" // W. + " \n" + " ""\n" + "\n") + .arg( i18n("Important"), i18n("Very Important"), i18n("Information") ) // %1 %2 %3 + .arg( i18n("Idea"), i18n("The initial of 'Idea'", "I."), i18n("Title") ) // %4 %5 %6 + .arg( i18n("Code"), i18n("Work"), i18n("The initial of 'Work'", "W.") ) // %7 %8 %9 + + QString( + " \n" + " \n" + " %1\n" // "Personal" + " \n" + " \n" // P. + " \n" + " \n" + "\n" + " \n" + " \n" + " %3\n" // "Funny" + " tag_fun\n" + " \n" + " \n" + "\n" + "") + .arg( i18n("Personal"), i18n("The initial of 'Personal'", "P."), i18n("Funny") ); // %1 %2 %3 + + // Write to Disk: + QFile file(fullPath); + if (file.open(IO_WriteOnly)) { + QTextStream stream(&file); + stream.setEncoding(QTextStream::UnicodeUTF8); + stream << "\n"; + stream << xml; + file.close(); + } else + DEBUG_WIN << "FAILED to create the tags file!"; +} + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** class IndentedMenuItem: */ + +IndentedMenuItem::IndentedMenuItem(const QString &text, const QString &icon, const QString &shortcut) + : m_text(text), m_icon(icon), m_shortcut(shortcut) +{ +} + +IndentedMenuItem::~IndentedMenuItem() +{ +} + +void IndentedMenuItem::paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h) +{ + QPen pen = painter->pen(); + QFont font = painter->font(); + + int iconSize = KIcon::SizeSmall; + int iconMargin = StateMenuItem::iconMargin(); + + /* When an item is disabled, it often have a 3D sunken look. + * This is done by calling this paint routine two times, with different pen color and offset. + * A disabled item is first painted in the rect (x+1, y+1, w, h) and with pen of cg.light() color, + * It is then drawn a second time in the rect (x, y, w, h). + * But we don't want to draw the icon two times! So, we try to detect if we are in the "etched-text draw" state and then don't draw the icon. + * This doesn't work for every styles but it's already better than nothing (styles when it doesn't work are seldomly used, if used). + */ + bool drawingEtchedText = !enabled && !active && painter->pen().color() != cg.mid()/*== cg.foreground()*/; + if (drawingEtchedText) { + QString styleName = kapp->style().name(); + if (styleName == "plastik" || styleName == "lipstik") + painter->setPen(cg.light()); + drawingEtchedText = !enabled && !active && painter->pen().color() != cg.foreground(); + } else + drawingEtchedText = !enabled && !active && painter->pen().color() == cg.light(); + if (!m_icon.isEmpty() && !drawingEtchedText) { + QPixmap icon = kapp->iconLoader()->loadIcon(m_icon, KIcon::Small, iconSize, + (enabled ? (active ? KIcon::ActiveState : KIcon::DefaultState) : KIcon::DisabledState), + /*path_store=*/0L, /*canReturnNull=*/true); + painter->drawPixmap(x, y + (h-iconSize)/2, icon); + } + /* Pen and font are already set to the good ones, so we can directly draw the text. + * BUT, for the half of styles provided with KDE, the pen is not set for the Active state (when hovered by mouse of selected by keyboard). + * So, I set the pen myself. + * But it's certainly a bug in those styles because some other styles eg. just draw a 3D sunken rect when an item is selected + * and keep the background to white, drawing a white text over it is... very bad. But I can't see what can be done. + */ + if (active && enabled) + painter->setPen(KGlobalSettings::highlightedTextColor()); + painter->drawText(x + iconSize + iconMargin, y, w - iconSize - iconMargin, h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, m_text/*painter->pen().color().name()*/); + + if (!m_shortcut.isEmpty()) { + painter->setPen(pen); + if (active && enabled) + painter->setPen(KGlobalSettings::highlightedTextColor()); + painter->setFont(font); + painter->setClipping(false); + painter->drawText(x + 5 + w, y, 3000, h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, m_shortcut); + } +} + +QSize IndentedMenuItem::sizeHint() +{ + int iconSize = KIcon::SizeSmall; + int iconMargin = StateMenuItem::iconMargin(); + QSize textSize = QFontMetrics(KGlobalSettings::menuFont()).size( AlignLeft | AlignVCenter | ShowPrefix | DontClip, m_text ); + return QSize(iconSize + iconMargin + textSize.width(), textSize.height()); +} + +/** class StateMenuItem: */ + +StateMenuItem::StateMenuItem(State *state, const QString &shortcut, bool withTagName) + : m_state(state), m_shortcut(shortcut) +{ + m_name = (withTagName && m_state->parentTag() ? m_state->parentTag()->name() : m_state->name()); +} + +StateMenuItem::~StateMenuItem() +{ +} + +void StateMenuItem::paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h) +{ + QPen pen = painter->pen(); + QFont font = painter->font(); + + int iconSize = 16; // We use 16 instead of KIcon::SizeSmall (the size of icons in menus) because tags will always be 16*16 icons + + if (!active && m_state->backgroundColor().isValid()) + painter->fillRect(x/*-1*/, y/*-1*/, w/*+2*/, h/*+2*/, m_state->backgroundColor()); + /* When an item is disabled, it often have a 3D sunken look. + * This is done by calling this paint routine two times, with different pen color and offset. + * A disabled item is first painted in the rect (x+1, y+1, w, h) and with pen of cg.light() color, + * It is then drawn a second time in the rect (x, y, w, h). + * But we don't want to draw the icon two times! So, we try to detect if we are in the "etched-text draw" state and then don't draw the icon. + * This doesn't work for every styles but it's already better than nothing (styles when it doesn't work are seldomly used, if used). + */ + bool drawingEtchedText = !enabled && !active && painter->pen().color() != cg.mid()/*== cg.foreground()*/; + if (drawingEtchedText) { + QString styleName = kapp->style().name(); + if (styleName == "plastik" || styleName == "lipstik") + painter->setPen(cg.light()); + drawingEtchedText = !enabled && !active && painter->pen().color() != cg.foreground(); + } else + drawingEtchedText = !enabled && !active && painter->pen().color() == cg.light(); + if (!m_state->emblem().isEmpty() && !drawingEtchedText) { + QPixmap icon = kapp->iconLoader()->loadIcon(m_state->emblem(), KIcon::Small, iconSize, + (enabled ? (active ? KIcon::ActiveState : KIcon::DefaultState) : KIcon::DisabledState), + /*path_store=*/0L, /*canReturnNull=*/true); + painter->drawPixmap(x, y + (h-iconSize)/2, icon); + } + if (enabled && !active && m_state->textColor().isValid()) + painter->setPen(m_state->textColor()); + /* Pen and font are already set to the good ones, so we can directly draw the text. + * BUT, for the half of styles provided with KDE, the pen is not set for the Active state (when hovered by mouse of selected by keyboard). + * So, I set the pen myself. + * But it's certainly a bug in those styles because some other styles eg. just draw a 3D sunken rect when an item is selected + * and keep the background to white, drawing a white text over it is... very bad. But I can't see what can be done. + */ + if (active && enabled) + painter->setPen(KGlobalSettings::highlightedTextColor()); + painter->setFont( m_state->font(painter->font()) ); + painter->drawText(x + iconSize + iconMargin(), y, w - iconSize - iconMargin(), h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, m_name); + + if (!m_shortcut.isEmpty()) { + painter->setPen(pen); + if (active && enabled) + painter->setPen(KGlobalSettings::highlightedTextColor()); + painter->setFont(font); + painter->setClipping(false); + painter->drawText(x + 5 + w, y, 3000, h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, m_shortcut); + } +} + +QSize StateMenuItem::sizeHint() +{ + int iconSize = 16; // We use 16 instead of KIcon::SizeSmall (the size of icons in menus) because tags will always be 16*16 icons + QFont theFont = m_state->font(KGlobalSettings::menuFont()); + QSize textSize = QFontMetrics(theFont).size( AlignLeft | AlignVCenter | ShowPrefix | DontClip, m_name ); + return QSize(iconSize + iconMargin() + textSize.width(), textSize.height()); +} + +QIconSet StateMenuItem::checkBoxIconSet(bool checked, QColorGroup cg) +{ + int width = kapp->style().pixelMetric(QStyle::PM_IndicatorWidth, 0); + int height = kapp->style().pixelMetric(QStyle::PM_IndicatorHeight, 0); + QRect rect(0, 0, width, height); + + QColor menuBackgroundColor = (dynamic_cast(&(kapp->style())) == NULL ? cg.background() : cg.background().light(103)); + + // Enabled, Not hovering + QPixmap pixmap(width, height); + pixmap.fill(menuBackgroundColor); // In case the pixelMetric() haven't returned a bigger rectangle than what drawPrimitive() draws + QPainter painter(&pixmap); + int style = QStyle::Style_Enabled | QStyle::Style_Active | (checked ? QStyle::Style_On : QStyle::Style_Off); + QColor background = cg.color(QColorGroup::Background); + kapp->style().drawPrimitive(QStyle::PE_Indicator, &painter, rect, cg, style); + painter.end(); + + // Enabled, Hovering + QPixmap pixmapHover(width, height); + pixmapHover.fill(menuBackgroundColor); // In case the pixelMetric() haven't returned a bigger rectangle than what drawPrimitive() draws + painter.begin(&pixmapHover); + style |= QStyle::Style_MouseOver; + cg.setColor(QColorGroup::Background, KGlobalSettings::highlightColor()); + kapp->style().drawPrimitive(QStyle::PE_Indicator, &painter, rect, cg, style); + painter.end(); + + // Disabled + QPixmap pixmapDisabled(width, height); + pixmapDisabled.fill(menuBackgroundColor); // In case the pixelMetric() haven't returned a bigger rectangle than what drawPrimitive() draws + painter.begin(&pixmapDisabled); + style = /*QStyle::Style_Enabled | */QStyle::Style_Active | (checked ? QStyle::Style_On : QStyle::Style_Off); + cg.setColor(QColorGroup::Background, background); + kapp->style().drawPrimitive(QStyle::PE_Indicator, &painter, rect, cg, style); + painter.end(); + + QIconSet iconSet(pixmap); + iconSet.setPixmap(pixmapHover, QIconSet::Automatic, QIconSet::Active); + iconSet.setPixmap(pixmapDisabled, QIconSet::Automatic, QIconSet::Disabled); + return iconSet; +} + +QIconSet StateMenuItem::radioButtonIconSet(bool checked, QColorGroup cg) +{ + int width = kapp->style().pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, 0); + int height = kapp->style().pixelMetric(QStyle::PM_ExclusiveIndicatorHeight, 0); + QRect rect(0, 0, width, height); + + int style = QStyle::Style_Default | QStyle::Style_Enabled | (checked ? QStyle::Style_On : QStyle::Style_Off); + + QPixmap pixmap(width, height); + pixmap.fill(Qt::red); + QPainter painter(&pixmap); + /* We can't use that line of code (like for checkboxes): + * //kapp->style().drawPrimitive(QStyle::PE_ExclusiveIndicator, &painter, rect, cg, style); + * because Plastik (and derived styles) don't care of the QStyle::Style_On flag and will ALWAYS draw an unchecked radiobutton. + * So, we use another method: + */ + QRadioButton rb(0); + rb.setChecked(checked); + kapp->style().drawControl(QStyle::CE_RadioButton, &painter, &rb, rect, cg, style); + painter.end(); + /* Some styles like Plastik (and derived ones) have QStyle::PE_ExclusiveIndicator drawing a radiobutton disc, as wanted, + * and leave pixels ouside it untouched, BUT QStyle::PE_ExclusiveIndicatorMask is a fully black square. + * So, we can't apply the mask to make the radiobutton circle transparent outside. + * We're using an hack by filling the pixmap in Qt::red, drawing the radiobutton and then creating an heuristic mask. + * The heuristic mask is created using the 4 edge pixels (that are red) and by making transparent every pixels that are of this color: + */ + pixmap.setMask(pixmap.createHeuristicMask()); + + QPixmap pixmapHover(width, height); + pixmapHover.fill(Qt::red); + painter.begin(&pixmapHover); + //kapp->style().drawPrimitive(QStyle::PE_ExclusiveIndicator, &painter, rect, cg, style); + style |= QStyle::Style_MouseOver; + cg.setColor(QColorGroup::Background, KGlobalSettings::highlightColor()); + kapp->style().drawControl(QStyle::CE_RadioButton, &painter, &rb, rect, cg, style); + painter.end(); + pixmapHover.setMask(pixmapHover.createHeuristicMask()); + + QIconSet iconSet(pixmap); + iconSet.setPixmap(pixmapHover, QIconSet::Automatic, QIconSet::Active); + return iconSet; +} diff --git a/src/tag.h b/src/tag.h new file mode 100644 index 0000000..687e9d5 --- /dev/null +++ b/src/tag.h @@ -0,0 +1,198 @@ +/*************************************************************************** + * Copyright (C) 2005 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef TAG_H +#define TAG_H + +#include +#include +#include +#include + +#include +#include + +class QPainter; + +class Tag; + +/** + * @author S�astien Laot + */ +class State +{ + public: + /// LIST OF STATES: + typedef QValueList List; + + public: + /// CONSTRUCTOR AND DESTRUCTOR: + State(const QString &id = QString(), Tag *tag = 0); + ~State(); + /// SET PROPERTIES: + void setId(const QString &id) { m_id = id; } + void setName(const QString &name) { m_name = name; } + void setEmblem(const QString &emblem) { m_emblem = emblem; } + void setBold(bool bold) { m_bold = bold; } + void setItalic(bool italic) { m_italic = italic; } + void setUnderline(bool underline) { m_underline = underline; } + void setStrikeOut(bool strikeOut) { m_strikeOut = strikeOut; } + void setTextColor(const QColor &color) { m_textColor = color; } + void setFontName(const QString &font) { m_fontName = font; } + void setFontSize(int size) { m_fontSize = size; } + void setBackgroundColor(const QColor &color) { m_backgroundColor = color; } + void setTextEquivalent(const QString &text) { m_textEquivalent = text; } + void setOnAllTextLines(bool yes) { m_onAllTextLines = yes; } + void setParentTag(Tag *tag) { m_parentTag = tag; } + /// GET PROPERTIES: + QString id() const { return m_id; } + QString name() const { return m_name; } + QString emblem() const { return m_emblem; } + bool bold() const { return m_bold; } + bool italic() const { return m_italic; } + bool underline() const { return m_underline; } + bool strikeOut() const { return m_strikeOut; } + QColor textColor() const { return m_textColor; } + QString fontName() const { return m_fontName; } + int fontSize() const { return m_fontSize; } + QColor backgroundColor() const { return m_backgroundColor; } + QString textEquivalent() const { return m_textEquivalent; } + bool onAllTextLines() const { return m_onAllTextLines; } + Tag* parentTag() const { return m_parentTag; } + /// HELPING FUNCTIONS: + State *nextState(bool cycle = true); + QString fullName(); + QFont font(QFont base); + QString toCSS(const QString &gradientFolderPath, const QString &gradientFolderName, const QFont &baseFont); + static void merge(const List &states, State *result, int *emblemsCount, bool *haveInvisibleTags, const QColor &backgroundColor); + void copyTo(State *other); + private: + /// PROPERTIES: + QString m_id; + QString m_name; + QString m_emblem; + bool m_bold; + bool m_italic; + bool m_underline; + bool m_strikeOut; + QColor m_textColor; + QString m_fontName; + int m_fontSize; + QColor m_backgroundColor; + QString m_textEquivalent; + bool m_onAllTextLines; + Tag *m_parentTag; +}; + +/** A Tag is a category of Notes. + * A Note can have 0, 1 or more Tags. + * A Tag can have a unique State or several States. + * @author S�astien Laot + */ +class Tag +{ + public: + /// LIST OF ALL TAGS IN THE APPLICATION: + typedef QValueList List; + static Tag::List all; + static State* stateForId(const QString &id); + static Tag* tagForKAction(KAction *action); + static Tag* tagSimilarTo(Tag *tagToTest); + static QMap loadTags(const QString &path = QString()/*, bool merge = false*/); /// << Load the tags contained in the XML file @p path or those in the application settings if @p path isEmpty(). If @p merge is true and a tag with the id of a tag that should be loaded already exist, the tag will get a new id. Otherwise, the tag will be dismissed. + static void saveTags(); + static void saveTagsTo(QValueList &list, const QString &fullPath); + static void createDefaultTagsSet(const QString &file); + static long getNextStateUid(); + private: + static long nextStateUid; + + public: + /// CONSTRUCTOR AND DESTRUCTOR: + Tag(/*State *firstState, const QString &name, bool inheritedBySiblings*/); + ~Tag(); + /// SET PROPERTIES: + void setName(const QString &name); + void setShortcut(const KShortcut &shortcut) { m_action->setShortcut(shortcut); } + void setInheritedBySiblings(bool inherited) { m_inheritedBySiblings = inherited; } + void appendState(State *state) { m_states.append(state); state->setParentTag(this); } + void removeState(State *state) { m_states.remove(state); state->setParentTag(0); } + /// GET PROPERTIES: + QString name() const { return m_name; } + KShortcut shortcut() const { return m_action->shortcut(); } + bool inheritedBySiblings() const { return m_inheritedBySiblings; } + State::List& states() const { return (State::List&)m_states; } + int countStates() const { return m_states.count(); } + void copyTo(Tag *other); + private: + /// PROPERTIES: + QString m_name; + KAction *m_action; + bool m_inheritedBySiblings; + State::List m_states; +}; + +#include +#include +#include + +class QPainter; + +/** A menu item to indent icon and text (to keep place for a checkbox or a radiobutton on left). + * You should not set any icon when adding this entry to the menu. + * Instead, the constructor take the icon and the item take care to draw it itself. + * Better suited to be used with StateMenuItem (or TagMenuItem). + * @author S�astien Laot + */ +class IndentedMenuItem : public QCustomMenuItem +{ + public: + IndentedMenuItem(const QString &text, const QString &icon = "", const QString &shortcut = ""); + ~IndentedMenuItem(); + void paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h); + QSize sizeHint(); + bool fullSpan() { return true; } + private: + QString m_text; + QString m_icon; + QString m_shortcut; +}; + +/** A menu item representing a State or a Tag. + * @author S�astien Laot + */ +class StateMenuItem : public QCustomMenuItem +{ + public: + StateMenuItem(State *state, const QString &shortcut, bool withTagName = false); + ~StateMenuItem(); + void paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h); + QSize sizeHint(); + bool fullSpan() { return true; } + private: + State *m_state; + QString m_name; + QString m_shortcut; + public: + static QIconSet checkBoxIconSet(bool checked, QColorGroup cg); + static QIconSet radioButtonIconSet(bool checked, QColorGroup cg); + static int iconMargin() { return 5; } +}; + +#endif // TAG_H diff --git a/src/tagsedit.cpp b/src/tagsedit.cpp new file mode 100644 index 0000000..c327758 --- /dev/null +++ b/src/tagsedit.cpp @@ -0,0 +1,1206 @@ +/*************************************************************************** + * Copyright (C) 2005 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "tag.h" +#include "tagsedit.h" +#include "kcolorcombo2.h" +#include "variouswidgets.h" +#include "global.h" +#include "bnpview.h" + +/** class StateCopy: */ + +StateCopy::StateCopy(State *old/* = 0*/) +{ + oldState = old; + newState = new State(); + if (oldState) + oldState->copyTo(newState); +} + +StateCopy::~StateCopy() +{ +} + +void StateCopy::copyBack() +{ +} + +/** class TagCopy: */ + +TagCopy::TagCopy(Tag *old/* = 0*/) +{ + oldTag = old; + newTag = new Tag(); + if (oldTag) + oldTag->copyTo(newTag); + + if (old) + for (State::List::iterator it = old->states().begin(); it != old->states().end(); ++it) + stateCopies.append(new StateCopy(*it)); + else + stateCopies.append(new StateCopy()); +} + +TagCopy::~TagCopy() +{ +} + +void TagCopy::copyBack() +{ +} + +bool TagCopy::isMultiState() +{ + return (stateCopies.count() > 1); +} + +/** class TagListViewItem: */ + +TagListViewItem::TagListViewItem(QListView *parent, TagCopy *tagCopy) + : QListViewItem(parent), m_tagCopy(tagCopy), m_stateCopy(0) +{ + setText(0, tagCopy->newTag->name()); +} + +TagListViewItem::TagListViewItem(QListViewItem *parent, TagCopy *tagCopy) + : QListViewItem(parent), m_tagCopy(tagCopy), m_stateCopy(0) +{ + setText(0, tagCopy->newTag->name()); +} + +TagListViewItem::TagListViewItem(QListView *parent, QListViewItem *after, TagCopy *tagCopy) + : QListViewItem(parent, after), m_tagCopy(tagCopy), m_stateCopy(0) +{ + setText(0, tagCopy->newTag->name()); +} + +TagListViewItem::TagListViewItem(QListViewItem *parent, QListViewItem *after, TagCopy *tagCopy) + : QListViewItem(parent, after), m_tagCopy(tagCopy), m_stateCopy(0) +{ + setText(0, tagCopy->newTag->name()); +} + +/* */ + +TagListViewItem::TagListViewItem(QListView *parent, StateCopy *stateCopy) + : QListViewItem(parent), m_tagCopy(0), m_stateCopy(stateCopy) +{ + setText(0, stateCopy->newState->name()); +} + +TagListViewItem::TagListViewItem(QListViewItem *parent, StateCopy *stateCopy) + : QListViewItem(parent), m_tagCopy(0), m_stateCopy(stateCopy) +{ + setText(0, stateCopy->newState->name()); +} + +TagListViewItem::TagListViewItem(QListView *parent, QListViewItem *after, StateCopy *stateCopy) + : QListViewItem(parent, after), m_tagCopy(0), m_stateCopy(stateCopy) +{ + setText(0, stateCopy->newState->name()); +} + +TagListViewItem::TagListViewItem(QListViewItem *parent, QListViewItem *after, StateCopy *stateCopy) + : QListViewItem(parent, after), m_tagCopy(0), m_stateCopy(stateCopy) +{ + setText(0, stateCopy->newState->name()); +} + +/* */ + +TagListViewItem::~TagListViewItem() +{ +} + +TagListViewItem* TagListViewItem::lastChild() +{ + TagListViewItem *child = (TagListViewItem*)firstChild(); + while (child) { + if (child->nextSibling()) + child = (TagListViewItem*)(child->nextSibling()); + else + return child; + } + return 0; +} + +bool TagListViewItem::isEmblemObligatory() +{ + return m_stateCopy != 0; // It's a state of a multi-state +} + +TagListViewItem* TagListViewItem::prevSibling() +{ + TagListViewItem *item = this; + while (item) { + if (item->nextSibling() == this) + return item; + item = (TagListViewItem*)(item->itemAbove()); + } + return 0; +} + +TagListViewItem* TagListViewItem::parent() const +{ + return (TagListViewItem*) QListViewItem::parent(); +} + +// TODO: TagListViewItem:: +int TAG_ICON_SIZE = 16; +int TAG_MARGIN = 1; + +int TagListViewItem::width(const QFontMetrics &/* fontMetrics */, const QListView */*listView*/, int /* column */) const +{ + return listView()->visibleWidth(); +} + +void TagListViewItem::setup() +{ + QString text = (m_tagCopy ? m_tagCopy->newTag->name() : m_stateCopy->newState->name()); + State *state = (m_tagCopy ? m_tagCopy->stateCopies[0]->newState : m_stateCopy->newState); + + if (m_tagCopy && !m_tagCopy->newTag->shortcut().isNull()) + text = i18n("Tag name (shortcut)", "%1 (%2)").arg(text, m_tagCopy->newTag->shortcut().toString()); + + QFont font = state->font(listView()->font()); + + QRect textRect = QFontMetrics(font).boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop, text); + + widthChanged(); + int height = TAG_MARGIN + QMAX(TAG_ICON_SIZE, textRect.height()) + TAG_MARGIN; + setHeight(height); + + repaint(); +} + +void TagListViewItem::paintCell(QPainter *painter, const QColorGroup &/*colorGroup*/, int /*column*/, int width, int /*align*/) +{ + bool withIcon = m_stateCopy || (m_tagCopy && !m_tagCopy->isMultiState()); + QString text = (m_tagCopy ? m_tagCopy->newTag->name() : m_stateCopy->newState->name()); + State *state = (m_tagCopy ? m_tagCopy->stateCopies[0]->newState : m_stateCopy->newState); + + if (m_tagCopy && !m_tagCopy->newTag->shortcut().isNull()) + text = i18n("Tag name (shortcut)", "%1 (%2)").arg(text, m_tagCopy->newTag->shortcut().toString()); + + QFont font = (withIcon ? state->font(listView()->font()) : listView()->font()); + + QFontMetrics fontMetrics(font); + QRect textRect = fontMetrics.boundingRect(0, 0, /*width=*/1, 500000, Qt::AlignAuto | Qt::AlignTop, text); + + QPixmap emblem = (withIcon ? kapp->iconLoader()->loadIcon(state->emblem(), KIcon::NoGroup, 16, KIcon::DefaultState, 0L, /*canReturnNull=*/true) : QPixmap()); + + QColor backgroundColor = (isSelected() ? KGlobalSettings::highlightColor() + : (withIcon && state->backgroundColor().isValid() ? state->backgroundColor() + : listView()->paletteBackgroundColor())); + QColor textColor = (isSelected() ? KGlobalSettings::highlightedTextColor() + : (withIcon && state->textColor().isValid() ? state->textColor() + : listView()->paletteForegroundColor())); + + // Bufferize the drawing of items (otherwize, resizing the splitter make the tree act like a Christmas Tree ;-D ): + QPixmap theBuffer(width, height()); + theBuffer.fill(backgroundColor); + QPainter thePainter(&theBuffer); + + if (withIcon) + thePainter.drawPixmap(TAG_MARGIN, (height() - emblem.height()) / 2, emblem); + + int xText = TAG_MARGIN + (withIcon ? TAG_ICON_SIZE + TAG_MARGIN : 0); + thePainter.setPen(textColor); + thePainter.setFont(font); + int textWidth = width - xText; + if (thePainter.fontMetrics().width(text) > textWidth) + text = KStringHandler::rPixelSqueeze(text, fontMetrics, textWidth); + thePainter.drawText(xText, 0, textWidth, height(), Qt::AlignAuto | Qt::AlignVCenter | Qt::ShowPrefix, text); + + // Apply the buffer: + thePainter.end(); + painter->drawPixmap(0, 0, theBuffer); +} + +/** class TagListView: */ + +TagListView::TagListView(QWidget *parent, const char *name, WFlags flags) + : QListView(parent, name, flags) +{ +} + +TagListView::~TagListView() +{ +} + +void TagListView::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Delete) + emit deletePressed(); + else if (event->key() != Qt::Key_Left || (selectedItem() && selectedItem()->parent())) + // Do not allow to open/close first-level items + QListView::keyPressEvent(event); +} + +void TagListView::contentsMouseDoubleClickEvent(QMouseEvent *event) +{ + // Ignore this event! Do not open/close first-level items! + + // But trigger edit (change focus to name) when double-click an item: + if (itemAt(contentsToViewport(event->pos())) != 0) + emit doubleClickedItem(); +} + +void TagListView::contentsMousePressEvent(QMouseEvent *event) +{ + // When clicking on an empty space, QListView would unselect the current item! We forbid that! + if (itemAt(contentsToViewport(event->pos())) != 0) + QListView::contentsMousePressEvent(event); +} + +void TagListView::contentsMouseReleaseEvent(QMouseEvent *event) +{ + // When clicking on an empty space, QListView would unselect the current item! We forbid that! + if (itemAt(contentsToViewport(event->pos())) != 0) + QListView::contentsMouseReleaseEvent(event); +} + +TagListViewItem* TagListView::currentItem() const +{ + return (TagListViewItem*) QListView::currentItem(); +} + +TagListViewItem* TagListView::firstChild() const +{ + return (TagListViewItem*) QListView::firstChild(); +} + +TagListViewItem* TagListView::lastItem() const +{ + return (TagListViewItem*) QListView::lastItem(); +} + +/** class TagsEditDialog: */ + +TagsEditDialog::TagsEditDialog(QWidget *parent, State *stateToEdit, bool addNewTag) + : KDialogBase(KDialogBase::Plain, i18n("Customize Tags"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/"CustomizeTags", /*modal=*/true, /*separator=*/true), + m_loading(false) +{ + QHBoxLayout *layout = new QHBoxLayout(plainPage(), /*margin=*/0, spacingHint()); + + /* Left part: */ + + QPushButton *newTag = new QPushButton(i18n("Ne&w Tag"), plainPage()); + QPushButton *newState = new QPushButton(i18n("New St&ate"), plainPage()); + + connect( newTag, SIGNAL(clicked()), this, SLOT(newTag()) ); + connect( newState, SIGNAL(clicked()), this, SLOT(newState()) ); + + m_tags = new TagListView(plainPage()); + m_tags->header()->hide(); + m_tags->setRootIsDecorated(false); + m_tags->addColumn(""); + m_tags->setSorting(-1); // Sort column -1, so disabled sorting + m_tags->setResizeMode(QListView::LastColumn); + + m_moveUp = new KPushButton( KGuiItem("", "1uparrow"), plainPage() ); + m_moveDown = new KPushButton( KGuiItem("", "1downarrow"), plainPage() ); + m_deleteTag = new KPushButton( KGuiItem("", "editdelete"), plainPage() ); + + QToolTip::add( m_moveUp, i18n("Move Up (Ctrl+Shift+Up)") ); + QToolTip::add( m_moveDown, i18n("Move Down (Ctrl+Shift+Down)") ); + QToolTip::add( m_deleteTag, i18n("Delete") ); + + connect( m_moveUp, SIGNAL(clicked()), this, SLOT(moveUp()) ); + connect( m_moveDown, SIGNAL(clicked()), this, SLOT(moveDown()) ); + connect( m_deleteTag, SIGNAL(clicked()), this, SLOT(deleteTag()) ); + + QHBoxLayout *topLeftLayout = new QHBoxLayout(0, /*margin=*/0, spacingHint()); + topLeftLayout->addWidget(m_moveUp); + topLeftLayout->addWidget(m_moveDown); + topLeftLayout->addWidget(m_deleteTag); + + QVBoxLayout *leftLayout = new QVBoxLayout(0, /*margin=*/0, spacingHint()); + leftLayout->addWidget(newTag); + leftLayout->addWidget(newState); + leftLayout->addWidget(m_tags); + leftLayout->addLayout(topLeftLayout); + + layout->addLayout(leftLayout); + + /* Right part: */ + + QWidget *rightWidget = new QWidget(plainPage()); + + m_tagBox = new QGroupBox(1, Qt::Horizontal, i18n("Tag"), rightWidget); + QWidget *tagWidget = new QWidget(m_tagBox); + + m_tagName = new QLineEdit(tagWidget); + QLabel *tagNameLabel = new QLabel(m_tagName, i18n("&Name:"), tagWidget); + + m_shortcut = new KKeyButton(tagWidget); + m_removeShortcut = new QPushButton(i18n("Remove tag shortcut", "&Remove"), tagWidget); + QLabel *shortcutLabel = new QLabel(m_shortcut, i18n("S&hortcut:"), tagWidget); + connect( m_shortcut, SIGNAL(capturedShortcut(const KShortcut&)), this, SLOT(capturedShortcut(const KShortcut&)) ); + connect( m_removeShortcut, SIGNAL(clicked()), this, SLOT(removeShortcut()) ); + + m_inherit = new QCheckBox(i18n("&Inherited by new sibling notes"), tagWidget); + + QGridLayout *tagGrid = new QGridLayout(tagWidget, /*rows=*/3, /*cols=*/4, /*border=*/0, /*spacing=*/spacingHint()); + tagGrid->addWidget(tagNameLabel, 0, 0); + tagGrid->addMultiCellWidget(m_tagName, /*fromRow=*/0, /*toRow=*/0, /*fromCol=*/1, /*toCol=*/3); + tagGrid->addWidget(shortcutLabel, 1, 0); + tagGrid->addWidget(m_shortcut, 1, 1); + tagGrid->addWidget(m_removeShortcut, 1, 2); + tagGrid->addMultiCellWidget(m_inherit, /*fromRow=*/2, /*toRow=*/2, /*fromCol=*/0, /*toCol=*/3); + tagGrid->setColStretch(/*col=*/3, /*stretch=*/255); + + m_stateBox = new QGroupBox(1, Qt::Horizontal, i18n("State"), rightWidget); + QWidget *stateWidget = new QWidget(m_stateBox); + + m_stateName = new QLineEdit(stateWidget); + m_stateNameLabel = new QLabel(m_stateName, i18n("Na&me:"), stateWidget); + + QWidget *emblemWidget = new QWidget(stateWidget); + m_emblem = new KIconButton(emblemWidget); + m_emblem->setIconType(KIcon::NoGroup, KIcon::Action); + m_emblem->setIconSize(16); + m_emblem->setIcon("editdelete"); + m_removeEmblem = new QPushButton(i18n("Remove tag emblem", "Remo&ve"), emblemWidget); + QLabel *emblemLabel = new QLabel(m_emblem, i18n("&Emblem:"), stateWidget); + connect( m_removeEmblem, SIGNAL(clicked()), this, SLOT(removeEmblem()) ); // m_emblem.resetIcon() is not a slot! + + // Make the icon button and the remove button the same height: + int height = QMAX(m_emblem->sizeHint().width(), m_emblem->sizeHint().height()); + height = QMAX(height, m_removeEmblem->sizeHint().height()); + m_emblem->setFixedSize(height, height); // Make it square + m_removeEmblem->setFixedHeight(height); + m_emblem->resetIcon(); + + QHBoxLayout *emblemLayout = new QHBoxLayout(emblemWidget, /*margin=*/0, spacingHint()); + emblemLayout->addWidget(m_emblem); + emblemLayout->addWidget(m_removeEmblem); + emblemLayout->addStretch(); + + m_backgroundColor = new KColorCombo2(QColor(), KGlobalSettings::baseColor(), stateWidget); + QLabel *backgroundColorLabel = new QLabel(m_backgroundColor, i18n("&Background:"), stateWidget); + + QHBoxLayout *backgroundColorLayout = new QHBoxLayout(0, /*margin=*/0, spacingHint()); + backgroundColorLayout->addWidget(m_backgroundColor); + backgroundColorLayout->addStretch(); + + QIconSet boldIconSet = kapp->iconLoader()->loadIconSet("text_bold", KIcon::Small); + m_bold = new QPushButton(boldIconSet, "", stateWidget); + m_bold->setToggleButton(true); + int size = QMAX(m_bold->sizeHint().width(), m_bold->sizeHint().height()); + m_bold->setFixedSize(size, size); // Make it square! + QToolTip::add(m_bold, i18n("Bold")); + + QIconSet underlineIconSet = kapp->iconLoader()->loadIconSet("text_under", KIcon::Small); + m_underline = new QPushButton(underlineIconSet, "", stateWidget); + m_underline->setToggleButton(true); + m_underline->setFixedSize(size, size); // Make it square! + QToolTip::add(m_underline, i18n("Underline")); + + QIconSet italicIconSet = kapp->iconLoader()->loadIconSet("text_italic", KIcon::Small); + m_italic = new QPushButton(italicIconSet, "", stateWidget); + m_italic->setToggleButton(true); + m_italic->setFixedSize(size, size); // Make it square! + QToolTip::add(m_italic, i18n("Italic")); + + QIconSet strikeIconSet = kapp->iconLoader()->loadIconSet("text_strike", KIcon::Small); + m_strike = new QPushButton(strikeIconSet, "", stateWidget); + m_strike->setToggleButton(true); + m_strike->setFixedSize(size, size); // Make it square! + QToolTip::add(m_strike, i18n("Strike Through")); + + QLabel *textLabel = new QLabel(m_bold, i18n("&Text:"), stateWidget); + + QHBoxLayout *textLayout = new QHBoxLayout(0, /*margin=*/0, spacingHint()); + textLayout->addWidget(m_bold); + textLayout->addWidget(m_underline); + textLayout->addWidget(m_italic); + textLayout->addWidget(m_strike); + textLayout->addStretch(); + + m_textColor = new KColorCombo2(QColor(), KGlobalSettings::textColor(), stateWidget); + QLabel *textColorLabel = new QLabel(m_textColor, i18n("Co&lor:"), stateWidget); + + m_font = new KFontCombo(stateWidget); + m_font->insertItem(i18n("(Default)"), 0); + QLabel *fontLabel = new QLabel(m_font, i18n("&Font:"), stateWidget); + + m_fontSize = new FontSizeCombo(/*rw=*/true, /*withDefault=*/true, stateWidget); + QLabel *fontSizeLabel = new QLabel(m_fontSize, i18n("&Size:"), stateWidget); + + m_textEquivalent = new QLineEdit(stateWidget); + QLabel *textEquivalentLabel = new QLabel(m_textEquivalent, i18n("Te&xt equivalent:"), stateWidget); + QFont font = m_textEquivalent->font(); + font.setFamily("monospace"); + m_textEquivalent->setFont(font); + + QPixmap textEquivalentPixmap(KGlobal::dirs()->findResource("data", "basket/images/tag_export_help.png")); + QMimeSourceFactory::defaultFactory()->setPixmap("__resource_help_tag_export.png", textEquivalentPixmap); + HelpLabel *textEquivalentHelp = new HelpLabel( + i18n("When does this apply?"), + "

      " + i18n("It does apply when you copy and paste, or drag and drop notes to a text editor.") + "

      " + + "

      " + i18n("If filled, this property lets you paste this tag or this state as textual equivalent.") + "
      " + + i18n("For instance, a list of notes with the To Do and Done tags are exported as lines preceded by [ ] or [x], " + "representing an empty checkbox and a checked box.") + "

      " + + "

      ", + stateWidget); + QHBoxLayout *textEquivalentHelpLayout = new QHBoxLayout((QWidget*)0, /*border=*/0, spacingHint()); + textEquivalentHelpLayout->addWidget(textEquivalentHelp); + textEquivalentHelpLayout->addStretch(255); + + m_onEveryLines = new QCheckBox(i18n("On ever&y line"), stateWidget); + + QPixmap onEveryLinesPixmap(KGlobal::dirs()->findResource("data", "basket/images/tag_export_on_every_lines_help.png")); + QMimeSourceFactory::defaultFactory()->setPixmap("__resource_help_tag_export_on_every_lines.png", onEveryLinesPixmap); + HelpLabel *onEveryLinesHelp = new HelpLabel( + i18n("What does it mean?"), + "

      " + i18n("When a note has several lines, you can choose to export the tag or the state on the first line or on every line of the note.") + "

      " + + "

      " + + "

      " + i18n("In the example above, the tag of the top note is only exported on the first line, while the tag of the bottom note is exported on every line of the note."), + stateWidget); + QHBoxLayout *onEveryLinesHelpLayout = new QHBoxLayout((QWidget*)0, /*border=*/0, spacingHint()); + onEveryLinesHelpLayout->addWidget(onEveryLinesHelp); + onEveryLinesHelpLayout->addStretch(255); + + QGridLayout *textEquivalentGrid = new QGridLayout(0, /*rows=*/2, /*cols=*/4, /*border=*/0, /*spacing=*/spacingHint()); + textEquivalentGrid->addWidget(textEquivalentLabel, 0, 0); + textEquivalentGrid->addWidget(m_textEquivalent, 0, 1); + textEquivalentGrid->addLayout(textEquivalentHelpLayout, 0, 2); + textEquivalentGrid->addWidget(m_onEveryLines, 1, 1); + textEquivalentGrid->addLayout(onEveryLinesHelpLayout, 1, 2); + textEquivalentGrid->setColStretch(/*col=*/3, /*stretch=*/255); + + KSeparator *separator = new KSeparator(Qt::Horizontal, stateWidget); + + QGridLayout *stateGrid = new QGridLayout(stateWidget, /*rows=*/6, /*cols=*/7, /*border=*/0, /*spacing=*/spacingHint()); + stateGrid->addWidget(m_stateNameLabel, 0, 0); + stateGrid->addMultiCellWidget(m_stateName, /*fromRow=*/0, /*toRow=*/0, /*fromCol=*/1, /*toCol=*/6); + stateGrid->addWidget(emblemLabel, 1, 0); + stateGrid->addMultiCellWidget(emblemWidget, /*fromRow=*/1, /*toRow=*/1, /*fromCol=*/1, /*toCol=*/6); + stateGrid->addWidget(backgroundColorLabel, 1, 5); + stateGrid->addMultiCellLayout(backgroundColorLayout, /*fromRow=*/1, /*toRow=*/1, /*fromCol=*/6, /*toCol=*/6); + stateGrid->addWidget(textLabel, 2, 0); + stateGrid->addMultiCellLayout(textLayout, /*fromRow=*/2, /*toRow=*/2, /*fromCol=*/1, /*toCol=*/4); + stateGrid->addWidget(textColorLabel, 2, 5); + stateGrid->addWidget(m_textColor, 2, 6); + stateGrid->addWidget(fontLabel, 3, 0); + stateGrid->addMultiCellWidget(m_font, /*fromRow=*/3, /*toRow=*/3, /*fromCol=*/1, /*toCol=*/4); + stateGrid->addWidget(fontSizeLabel, 3, 5); + stateGrid->addWidget(m_fontSize, 3, 6); + stateGrid->addMultiCellWidget(separator, /*fromRow=*/4, /*toRow=*/4, /*fromCol=*/0, /*toCol=*/6); + stateGrid->addMultiCellLayout(textEquivalentGrid, /*fromRow=*/5, /*toRow=*/5, /*fromCol=*/0, /*toCol=*/6); + + QVBoxLayout *rightLayout = new QVBoxLayout(rightWidget, /*margin=*/0, spacingHint()); + rightLayout->addWidget(m_tagBox); + rightLayout->addWidget(m_stateBox); + rightLayout->addStretch(); + + layout->addWidget(rightWidget); + rightWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); + + // Equalize the width of the first column of the two grids: + int maxWidth = tagNameLabel->sizeHint().width(); + maxWidth = QMAX(maxWidth, shortcutLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, m_stateNameLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, emblemLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, textLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, fontLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, backgroundColorLabel->sizeHint().width()); + maxWidth = QMAX(maxWidth, textEquivalentLabel->sizeHint().width()); + + tagNameLabel->setFixedWidth(maxWidth); + m_stateNameLabel->setFixedWidth(maxWidth); + textEquivalentLabel->setFixedWidth(maxWidth); + + // Load Tags: + for (Tag::List::iterator tagIt = Tag::all.begin(); tagIt != Tag::all.end(); ++tagIt) + m_tagCopies.append(new TagCopy(*tagIt)); + + TagListViewItem *lastInsertedItem = 0; + TagListViewItem *lastInsertedSubItem; + TagListViewItem *item; + TagListViewItem *subItem; + for (TagCopy::List::iterator tagCopyIt = m_tagCopies.begin(); tagCopyIt != m_tagCopies.end(); ++tagCopyIt) { + // New List View Item: + if (lastInsertedItem) + item = new TagListViewItem(m_tags, lastInsertedItem, *tagCopyIt); + else + item = new TagListViewItem(m_tags, *tagCopyIt); + item->setOpen(true); + lastInsertedItem = item; + // Load + if ((*tagCopyIt)->isMultiState()) { + lastInsertedSubItem = 0; + StateCopy::List stateCopies = item->tagCopy()->stateCopies; + for (StateCopy::List::iterator stateCopyIt = stateCopies.begin(); stateCopyIt != stateCopies.end(); ++stateCopyIt) { + if (lastInsertedSubItem) + subItem = new TagListViewItem(item, lastInsertedSubItem, *stateCopyIt); + else + subItem = new TagListViewItem(item, *stateCopyIt); + lastInsertedSubItem = subItem; + } + } + } + + // Connect Signals: + connect( m_tagName, SIGNAL(textChanged(const QString&)), this, SLOT(modified()) ); + connect( m_shortcut, SIGNAL(capturedShortcut(const KShortcut&)), this, SLOT(modified()) ); + connect( m_inherit, SIGNAL(stateChanged(int)), this, SLOT(modified()) ); + connect( m_stateName, SIGNAL(textChanged(const QString&)), this, SLOT(modified()) ); + connect( m_emblem, SIGNAL(iconChanged(QString)), this, SLOT(modified()) ); + connect( m_backgroundColor, SIGNAL(changed(const QColor&)), this, SLOT(modified()) ); + connect( m_bold, SIGNAL(toggled(bool)), this, SLOT(modified()) ); + connect( m_underline, SIGNAL(toggled(bool)), this, SLOT(modified()) ); + connect( m_italic, SIGNAL(toggled(bool)), this, SLOT(modified()) ); + connect( m_strike, SIGNAL(toggled(bool)), this, SLOT(modified()) ); + connect( m_textColor, SIGNAL(changed(const QColor&)), this, SLOT(modified()) ); + connect( m_font, SIGNAL(textChanged(const QString&)), this, SLOT(modified()) ); + connect( m_fontSize, SIGNAL(textChanged(const QString&)), this, SLOT(modified()) ); + connect( m_textEquivalent, SIGNAL(textChanged(const QString&)), this, SLOT(modified()) ); + connect( m_onEveryLines, SIGNAL(stateChanged(int)), this, SLOT(modified()) ); + + connect( m_tags, SIGNAL(currentChanged(QListViewItem*)), this, SLOT(currentItemChanged(QListViewItem*)) ); + connect( m_tags, SIGNAL(deletePressed()), this, SLOT(deleteTag()) ); + connect( m_tags, SIGNAL(doubleClickedItem()), this, SLOT(renameIt()) ); + + QListViewItem *firstItem = m_tags->firstChild(); + if (stateToEdit != 0) { + TagListViewItem *item = itemForState(stateToEdit); + if (item) + firstItem = item; + } + // Select the first tag unless the first tag is a multi-state tag. + // In this case, select the first state, as it let customize the state AND the associated tag. + if (firstItem) { + if (firstItem->firstChild()) + firstItem = firstItem->firstChild(); + firstItem->setSelected(true); + m_tags->setCurrentItem(firstItem); + currentItemChanged(firstItem); + if (stateToEdit == 0) + m_tags->ensureVisible(0, 0); + m_tags->setFocus(); + } else { + m_moveUp->setEnabled(false); + m_moveDown->setEnabled(false); + m_deleteTag->setEnabled(false); + m_tagBox->setEnabled(false); + m_stateBox->setEnabled(false); + } + // TODO: Disabled both boxes if no tag!!! + + // Some keyboard shortcuts: // Ctrl+arrows instead of Alt+arrows (same as Go menu in the main window) because Alt+Down is for combo boxes + QAction *selectAbove = new QAction(this); + selectAbove->setAccel(QString("Ctrl+Up")); + connect( selectAbove, SIGNAL(activated()), this, SLOT(selectUp()) ); + + QAction *selectBelow = new QAction(this); + selectBelow->setAccel(QString("Ctrl+Down")); + connect( selectBelow, SIGNAL(activated()), this, SLOT(selectDown()) ); + + QAction *selectLeft = new QAction(this); + selectLeft->setAccel(QString("Ctrl+Left")); + connect( selectLeft, SIGNAL(activated()), this, SLOT(selectLeft()) ); + + QAction *selectRight = new QAction(this); + selectRight->setAccel(QString("Ctrl+Right")); + connect( selectRight, SIGNAL(activated()), this, SLOT(selectRight()) ); + + QAction *moveAbove = new QAction(this); + moveAbove->setAccel(QString("Ctrl+Shift+Up")); + connect( moveAbove, SIGNAL(activated()), this, SLOT(moveUp()) ); + + QAction *moveBelow = new QAction(this); + moveBelow->setAccel(QString("Ctrl+Shift+Down")); + connect( moveBelow, SIGNAL(activated()), this, SLOT(moveDown()) ); + + QAction *rename = new QAction(this); + rename->setAccel(QString("F2")); + connect( rename, SIGNAL(activated()), this, SLOT(renameIt()) ); + + m_tags->setMinimumSize( + m_tags->sizeHint().width() * 2, + m_tagBox->sizeHint().height() + m_stateBox->sizeHint().height() + ); + + if (addNewTag) + QTimer::singleShot(0, this, SLOT(newTag()) ); + else + // Once the window initial size is computed and the window show, allow the user to resize it down: + QTimer::singleShot(0, this, SLOT(resetTreeSizeHint()) ); +} + +TagsEditDialog::~TagsEditDialog() +{ +} + +void TagsEditDialog::resetTreeSizeHint() +{ + m_tags->setMinimumSize(m_tags->sizeHint()); +} + +TagListViewItem* TagsEditDialog::itemForState(State *state) +{ + // Browse all tags: + QListViewItemIterator it(m_tags); + while (it.current()) { + QListViewItem *item = it.current(); + + // Return if we found the tag item: + TagListViewItem *tagItem = (TagListViewItem*)item; + if (tagItem->tagCopy() && tagItem->tagCopy()->oldTag && tagItem->tagCopy()->stateCopies[0]->oldState == state) + return tagItem; + + // Browser all sub-states: + QListViewItemIterator it2(item); + while (it2.current()) { + QListViewItem *subItem = it2.current(); + + // Return if we found the state item: + TagListViewItem *stateItem = (TagListViewItem*)subItem; + if (stateItem->stateCopy() && stateItem->stateCopy()->oldState && stateItem->stateCopy()->oldState == state) + return stateItem; + + ++it2; + } + + ++it; + } + return 0; +} + +void TagsEditDialog::newTag() +{ + // Add to the "model": + TagCopy *newTagCopy = new TagCopy(); + newTagCopy->stateCopies[0]->newState->setId("tag_state_" + QString::number( Tag::getNextStateUid() )); //TODO: Check if it's really unique + m_tagCopies.append(newTagCopy); + m_addedStates.append(newTagCopy->stateCopies[0]->newState); + + // Add to the "view": + TagListViewItem *item; + if (m_tags->firstChild()) { + // QListView::lastItem is the last item in the tree. If we the last item is a state item, the new tag gets appended to the begin of the list. + TagListViewItem *last = m_tags->lastItem(); + if (last->parent()) + last = last->parent(); + item = new TagListViewItem(m_tags, last, newTagCopy); + } else + item = new TagListViewItem(m_tags, newTagCopy); + + m_deleteTag->setEnabled(true); + m_tagBox->setEnabled(true); + + // Add to the "controler": + m_tags->setCurrentItem(item); + currentItemChanged(item); + item->setSelected(true); + m_tagName->setFocus(); +} + +void TagsEditDialog::newState() +{ + TagListViewItem *tagItem = m_tags->currentItem(); + if (tagItem->parent()) + tagItem = ((TagListViewItem*)(tagItem->parent())); + tagItem->setOpen(true); // Show sub-states if we're adding them for the first time! + + State *firstState = tagItem->tagCopy()->stateCopies[0]->newState; + + // Add the first state to the "view". From now on, it's a multi-state tag: + if (tagItem->firstChild() == 0) { + firstState->setName( tagItem->tagCopy()->newTag->name() ); + // Force emblem to exists for multi-state tags: + if (firstState->emblem().isEmpty()) + firstState->setEmblem("empty"); + new TagListViewItem(tagItem, tagItem->tagCopy()->stateCopies[0]); + } + + // Add to the "model": + StateCopy *newStateCopy = new StateCopy(); + firstState->copyTo(newStateCopy->newState); + newStateCopy->newState->setId("tag_state_" + QString::number( Tag::getNextStateUid() )); //TODO: Check if it's really unique + newStateCopy->newState->setName(""); // We copied it too but it's likely the name will not be the same + tagItem->tagCopy()->stateCopies.append(newStateCopy); + m_addedStates.append(newStateCopy->newState); + + // Add to the "view": + TagListViewItem *item = new TagListViewItem(tagItem, tagItem->lastChild(), newStateCopy); + + // Add to the "controler": + m_tags->setCurrentItem(item); + currentItemChanged(item); + m_stateName->setFocus(); +} + +void TagsEditDialog::moveUp() +{ + if (!m_moveUp->isEnabled()) // Trggered by keyboard shortcut + return; + + TagListViewItem *tagItem = m_tags->currentItem(); + TagListViewItem *prevTagItem = ((TagListViewItem*)( tagItem->prevSibling() )); + + // Move in the list view: + prevTagItem->moveItem(tagItem); + + // Move in the value list: + if (tagItem->tagCopy()) { + int pos = m_tagCopies.findIndex(tagItem->tagCopy()); + m_tagCopies.remove(tagItem->tagCopy()); + int i = 0; + for (TagCopy::List::iterator it = m_tagCopies.begin(); it != m_tagCopies.end(); ++it, ++i) + if (i == pos - 1) { + m_tagCopies.insert(it, tagItem->tagCopy()); + break; + } + } else { + StateCopy::List &stateCopies = ((TagListViewItem*)( tagItem->parent() ))->tagCopy()->stateCopies; + int pos = stateCopies.findIndex(tagItem->stateCopy()); + stateCopies.remove(tagItem->stateCopy()); + int i = 0; + for (StateCopy::List::iterator it = stateCopies.begin(); it != stateCopies.end(); ++it, ++i) + if (i == pos - 1) { + stateCopies.insert(it, tagItem->stateCopy()); + break; + } + } + + ensureCurrentItemVisible(); + + m_moveDown->setEnabled( tagItem->nextSibling() != 0 ); + m_moveUp->setEnabled( tagItem->prevSibling() != 0 ); +} + +void TagsEditDialog::moveDown() +{ + if (!m_moveDown->isEnabled()) // Trggered by keyboard shortcut + return; + + TagListViewItem *tagItem = m_tags->currentItem(); + + // Move in the list view: + tagItem->moveItem(tagItem->nextSibling()); + + // Move in the value list: + if (tagItem->tagCopy()) { + uint pos = m_tagCopies.findIndex(tagItem->tagCopy()); + m_tagCopies.remove(tagItem->tagCopy()); + if (pos == m_tagCopies.count() - 1) // Insert at end: iterator does not go there + m_tagCopies.append(tagItem->tagCopy()); + else { + uint i = 0; + for (TagCopy::List::iterator it = m_tagCopies.begin(); it != m_tagCopies.end(); ++it, ++i) + if (i == pos + 1) { + m_tagCopies.insert(it, tagItem->tagCopy()); + break; + } + } + } else { + StateCopy::List &stateCopies = ((TagListViewItem*)( tagItem->parent() ))->tagCopy()->stateCopies; + uint pos = stateCopies.findIndex(tagItem->stateCopy()); + stateCopies.remove(tagItem->stateCopy()); + if (pos == stateCopies.count() - 1) // Insert at end: iterator does not go there + stateCopies.append(tagItem->stateCopy()); + else { + uint i = 0; + for (StateCopy::List::iterator it = stateCopies.begin(); it != stateCopies.end(); ++it, ++i) + if (i == pos + 1) { + stateCopies.insert(it, tagItem->stateCopy()); + break; + } + } + } + + ensureCurrentItemVisible(); + + m_moveDown->setEnabled( tagItem->nextSibling() != 0 ); + m_moveUp->setEnabled( tagItem->prevSibling() != 0 ); +} + +void TagsEditDialog::selectUp() +{ + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, 0, 0); + QApplication::postEvent(m_tags, keyEvent); +} + +void TagsEditDialog::selectDown() +{ + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, 0, 0); + QApplication::postEvent(m_tags, keyEvent); +} + +void TagsEditDialog::selectLeft() +{ + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, 0); + QApplication::postEvent(m_tags, keyEvent); +} + +void TagsEditDialog::selectRight() +{ + QKeyEvent* keyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, 0); + QApplication::postEvent(m_tags, keyEvent); +} + +void TagsEditDialog::deleteTag() +{ + if (!m_deleteTag->isEnabled()) + return; + + TagListViewItem *item = m_tags->currentItem(); + + int result = KMessageBox::Continue; + if (item->tagCopy() && item->tagCopy()->oldTag) + result = KMessageBox::warningContinueCancel( + this, + i18n("Deleting the tag will remove it from every note it is currently assigned to."), + i18n("Confirm Delete Tag"), + KGuiItem(i18n("Delete Tag"), "editdelete") + ); + else if (item->stateCopy() && item->stateCopy()->oldState) + result = KMessageBox::warningContinueCancel( + this, + i18n("Deleting the state will remove the tag from every note the state is currently assigned to."), + i18n("Confirm Delete State"), + KGuiItem(i18n("Delete State"), "editdelete") + ); + if (result != KMessageBox::Continue) + return; + + if (item->tagCopy()) { + StateCopy::List stateCopies = item->tagCopy()->stateCopies; + for (StateCopy::List::iterator stateCopyIt = stateCopies.begin(); stateCopyIt != stateCopies.end(); ++stateCopyIt) { + StateCopy *stateCopy = *stateCopyIt; + if (stateCopy->oldState) { + m_deletedStates.append(stateCopy->oldState); + m_addedStates.remove(stateCopy->oldState); + } + m_addedStates.remove(stateCopy->newState); + } + m_tagCopies.remove(item->tagCopy()); + // Remove the new tag, to avoid keyboard-shortcut clashes: + delete item->tagCopy()->newTag; + } else { + TagListViewItem *parentItem = item->parent(); + // Remove the state: + parentItem->tagCopy()->stateCopies.remove(item->stateCopy()); + if (item->stateCopy()->oldState) { + m_deletedStates.append(item->stateCopy()->oldState); + m_addedStates.remove(item->stateCopy()->oldState); + } + m_addedStates.remove(item->stateCopy()->newState); + delete item; + item = 0; + // Transform to single-state tag if needed: + if (parentItem->childCount() == 1) { + delete parentItem->firstChild(); + m_tags->setCurrentItem(parentItem); + } + } + + delete item; + if (m_tags->currentItem()) + m_tags->currentItem()->setSelected(true); + + if (!m_tags->firstChild()) { + m_deleteTag->setEnabled(false); + m_tagBox->setEnabled(false); + m_stateBox->setEnabled(false); + } +} + +void TagsEditDialog::renameIt() +{ + if (m_tags->currentItem()->tagCopy()) + m_tagName->setFocus(); + else + m_stateName->setFocus(); +} + +void TagsEditDialog::capturedShortcut(const KShortcut &shortcut) +{ + // TODO: Validate it! + m_shortcut->setShortcut(shortcut, /*bQtShortcut=*/true); +} + +void TagsEditDialog::removeShortcut() +{ + m_shortcut->setShortcut(KShortcut(), /*bQtShortcut=*/true); + modified(); +} + +void TagsEditDialog::removeEmblem() +{ + m_emblem->resetIcon(); + modified(); +} + +void TagsEditDialog::modified() +{ + if (m_loading) + return; + + TagListViewItem *tagItem = m_tags->currentItem(); + if (tagItem == 0) + return; + + if (tagItem->tagCopy()) { + if (tagItem->tagCopy()->isMultiState()) { + saveTagTo(tagItem->tagCopy()->newTag); + } else { + saveTagTo(tagItem->tagCopy()->newTag); + saveStateTo(tagItem->tagCopy()->stateCopies[0]->newState); + } + } else if (tagItem->stateCopy()) { + saveTagTo(((TagListViewItem*)(tagItem->parent()))->tagCopy()->newTag); + saveStateTo(tagItem->stateCopy()->newState); + } + + m_tags->currentItem()->setup(); + if (m_tags->currentItem()->parent()) + m_tags->currentItem()->parent()->setup(); + + m_removeShortcut->setEnabled(!m_shortcut->shortcut().isNull()); + m_removeEmblem->setEnabled(!m_emblem->icon().isEmpty() && !m_tags->currentItem()->isEmblemObligatory()); + m_onEveryLines->setEnabled(!m_textEquivalent->text().isEmpty()); +} + +void TagsEditDialog::currentItemChanged(QListViewItem *item) +{ + if (item == 0) + return; + + m_loading = true; + + TagListViewItem *tagItem = (TagListViewItem*)item; + if (tagItem->tagCopy()) { + if (tagItem->tagCopy()->isMultiState()) { + loadTagFrom(tagItem->tagCopy()->newTag); + loadBlankState(); + m_stateBox->setEnabled(false); + m_stateBox->setTitle(i18n("State")); + m_stateNameLabel->setEnabled(true); + m_stateName->setEnabled(true); + } else { + loadTagFrom(tagItem->tagCopy()->newTag); // TODO: No duplicat + loadStateFrom(tagItem->tagCopy()->stateCopies[0]->newState); + m_stateBox->setEnabled(true); + m_stateBox->setTitle(i18n("Appearance")); + m_stateName->setText(""); + m_stateNameLabel->setEnabled(false); + m_stateName->setEnabled(false); + } + } else if (tagItem->stateCopy()) { + loadTagFrom(((TagListViewItem*)(tagItem->parent()))->tagCopy()->newTag); + loadStateFrom(tagItem->stateCopy()->newState); + m_stateBox->setEnabled(true); + m_stateBox->setTitle(i18n("State")); + m_stateNameLabel->setEnabled(true); + m_stateName->setEnabled(true); + } + + ensureCurrentItemVisible(); + + m_loading = false; +} + +void TagsEditDialog::ensureCurrentItemVisible() +{ + TagListViewItem *tagItem = m_tags->currentItem(); + + // Ensure the tag and the states (if available) to be visible, but if there is a looooot of states, + // ensure the tag is still visible, even if the last states are not... + int y = m_tags->itemPos(tagItem); + int height = tagItem->totalHeight(); + int bottom = y + QMIN(height, m_tags->visibleHeight()); + int xMiddle = m_tags->contentsX() + m_tags->visibleWidth() / 2; + m_tags->ensureVisible( xMiddle, bottom, 0,0 ); + m_tags->ensureVisible( xMiddle, y, 0,0 ); + + m_moveDown->setEnabled( tagItem->nextSibling() != 0 ); + m_moveUp->setEnabled( tagItem->prevSibling() != 0 ); +} + +void TagsEditDialog::loadBlankState() +{ + m_stateName->setText(""); + m_emblem->resetIcon(); + m_removeEmblem->setEnabled(false); + m_backgroundColor->setColor(QColor()); + m_bold->setOn(false); + m_underline->setOn(false); + m_italic->setOn(false); + m_strike->setOn(false); + m_textColor->setColor(QColor()); + m_font->setCurrentItem(0); + m_fontSize->setCurrentItem(0); + m_textEquivalent->setText(""); + m_onEveryLines->setChecked(false); +} + +void TagsEditDialog::loadStateFrom(State *state) +{ + m_stateName->setText(state->name()); + if (state->emblem().isEmpty()) + m_emblem->resetIcon(); + else + m_emblem->setIcon(state->emblem()); + m_removeEmblem->setEnabled(!state->emblem().isEmpty() && !m_tags->currentItem()->isEmblemObligatory()); + m_backgroundColor->setColor(state->backgroundColor()); + m_bold->setOn(state->bold()); + m_underline->setOn(state->underline()); + m_italic->setOn(state->italic()); + m_strike->setOn(state->strikeOut()); + m_textColor->setColor(state->textColor()); + m_textEquivalent->setText(state->textEquivalent()); + m_onEveryLines->setChecked(state->onAllTextLines()); + + if (state->fontName().isEmpty()) + m_font->setCurrentItem(0); + else + m_font->setCurrentFont(state->fontName()); + + if (state->fontSize() == -1) + m_fontSize->setCurrentItem(0); + else + m_fontSize->setCurrentText(QString::number(state->fontSize())); +} + +void TagsEditDialog::loadTagFrom(Tag *tag) +{ + m_tagName->setText(tag->name()); + m_shortcut->setShortcut(tag->shortcut(), /*bQtShortcut=*/false); + m_removeShortcut->setEnabled(!tag->shortcut().isNull()); + m_inherit->setChecked(tag->inheritedBySiblings()); +} + +void TagsEditDialog::saveStateTo(State *state) +{ + state->setName(m_stateName->text()); + state->setEmblem(m_emblem->icon()); + state->setBackgroundColor(m_backgroundColor->color()); + state->setBold(m_bold->isOn()); + state->setUnderline(m_underline->isOn()); + state->setItalic(m_italic->isOn()); + state->setStrikeOut(m_strike->isOn()); + state->setTextColor(m_textColor->color()); + state->setTextEquivalent(m_textEquivalent->text()); + state->setOnAllTextLines(m_onEveryLines->isChecked()); + + if (m_font->currentItem() == 0) + state->setFontName(""); + else + state->setFontName(m_font->currentFont()); + + bool conversionOk; + int fontSize = m_fontSize->currentText().toInt(&conversionOk); + if (conversionOk) + state->setFontSize(fontSize); + else + state->setFontSize(-1); +} + +void TagsEditDialog::saveTagTo(Tag *tag) +{ + tag->setName(m_tagName->text()); + tag->setShortcut(m_shortcut->shortcut()); + tag->setInheritedBySiblings(m_inherit->isChecked()); +} + +void TagsEditDialog::slotCancel() +{ + // All copies of tag have a shortcut, that is stored as a QAction. + // So, shortcuts are duplicated, and if the user press one tag keyboard-shortcut in the main window, there is a conflict. + // We then should delete every copies: + for (TagCopy::List::iterator tagCopyIt = m_tagCopies.begin(); tagCopyIt != m_tagCopies.end(); ++tagCopyIt) { + delete (*tagCopyIt)->newTag; + } + + KDialogBase::slotCancel(); +} + +void TagsEditDialog::slotOk() +{ + Tag::all.clear(); + for (TagCopy::List::iterator tagCopyIt = m_tagCopies.begin(); tagCopyIt != m_tagCopies.end(); ++tagCopyIt) { + TagCopy *tagCopy = *tagCopyIt; + // Copy changes to the tag and append in the list of tags:: + if (tagCopy->oldTag) { + tagCopy->newTag->copyTo(tagCopy->oldTag); + delete tagCopy->newTag; + } + Tag *tag = (tagCopy->oldTag ? tagCopy->oldTag : tagCopy->newTag); + Tag::all.append(tag); + // And change all states: + State::List &states = tag->states(); + StateCopy::List &stateCopies = tagCopy->stateCopies; + states.clear(); + for (StateCopy::List::iterator stateCopyIt = stateCopies.begin(); stateCopyIt != stateCopies.end(); ++stateCopyIt) { + StateCopy *stateCopy = *stateCopyIt; + // Copy changes to the state and append in the list of tags: + if (stateCopy->oldState) + stateCopy->newState->copyTo(stateCopy->oldState); + State *state = (stateCopy->oldState ? stateCopy->oldState : stateCopy->newState); + states.append(state); + state->setParentTag(tag); + } + } + Tag::saveTags(); + + // Notify removed states and tags, and then remove them: + if (!m_deletedStates.isEmpty()) + Global::bnpView->removedStates(m_deletedStates); + + // Update every note (change colors, size because of font change or added/removed emblems...): + Global::bnpView->relayoutAllBaskets(); + Global::bnpView->recomputeAllStyles(); + + KDialogBase::slotOk(); +} + +#include "tagsedit.moc" diff --git a/src/tagsedit.h b/src/tagsedit.h new file mode 100644 index 0000000..0986bac --- /dev/null +++ b/src/tagsedit.h @@ -0,0 +1,185 @@ +/*************************************************************************** + * Copyright (C) 2005 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef TAGEDIT_H +#define TAGEDIT_H + +#include +#include +#include +#include + +class QGroupBox; +class QLineEdit; +class QCheckBox; +class KPushButton; +class KKeyButton; +class KIconButton; +class KFontCombo; +class QLabel; +class KShortcut; + +class KColorCombo2; + +class FontSizeCombo; + +class Tag; +class State; + +class StateCopy +{ + public: + typedef QValueList List; + StateCopy(State *old = 0); + ~StateCopy(); + State *oldState; + State *newState; + void copyBack(); +}; + +class TagCopy +{ + public: + typedef QValueList List; + TagCopy(Tag *old = 0); + ~TagCopy(); + Tag *oldTag; + Tag *newTag; + StateCopy::List stateCopies; + void copyBack(); + bool isMultiState(); +}; + +class TagListViewItem : public QListViewItem +{ + public: + TagListViewItem(QListView *parent, TagCopy *tagCopy); + TagListViewItem(QListViewItem *parent, TagCopy *tagCopy); + TagListViewItem(QListView *parent, QListViewItem *after, TagCopy *tagCopy); + TagListViewItem(QListViewItem *parent, QListViewItem *after, TagCopy *tagCopy); + TagListViewItem(QListView *parent, StateCopy *stateCopy); + TagListViewItem(QListViewItem *parent, StateCopy *stateCopy); + TagListViewItem(QListView *parent, QListViewItem *after, StateCopy *stateCopy); + TagListViewItem(QListViewItem *parent, QListViewItem *after, StateCopy *stateCopy); + ~TagListViewItem(); + TagCopy* tagCopy() { return m_tagCopy; } + StateCopy* stateCopy() { return m_stateCopy; } + bool isEmblemObligatory(); + TagListViewItem* lastChild(); + TagListViewItem* prevSibling(); + TagListViewItem* parent() const; // Reimplemented to cast the return value + int width(const QFontMetrics &fontMetrics, const QListView *listView, int column) const; + void setup(); + void paintCell(QPainter *painter, const QColorGroup &colorGroup, int column, int width, int align); + + private: + TagCopy *m_tagCopy; + StateCopy *m_stateCopy; +}; + +class TagListView : public QListView +{ + Q_OBJECT + public: + TagListView(QWidget *parent = 0, const char *name = 0, WFlags flags = 0); + ~TagListView(); + void keyPressEvent(QKeyEvent *event); + void contentsMouseDoubleClickEvent(QMouseEvent *event); + void contentsMousePressEvent(QMouseEvent *event); + void contentsMouseReleaseEvent(QMouseEvent *event); + TagListViewItem* currentItem() const; // Reimplemented to cast the return value + TagListViewItem* firstChild() const; // Reimplemented to cast the return value + TagListViewItem* lastItem() const; // Reimplemented to cast the return value + signals: + void deletePressed(); + void doubleClickedItem(); +}; + +/** + * @author S�astien Laot + */ +class TagsEditDialog : public KDialogBase +{ + Q_OBJECT + public: + TagsEditDialog(QWidget *parent = 0, State *stateToEdit = 0, bool addNewTag = false); + ~TagsEditDialog(); + State::List deletedStates() { return m_deletedStates; } + State::List addedStates() { return m_addedStates; } + TagListViewItem* itemForState(State *state); + private slots: + void newTag(); + void newState(); + void moveUp(); + void moveDown(); + void deleteTag(); + void renameIt(); + void capturedShortcut(const KShortcut &shortcut); + void removeShortcut(); + void removeEmblem(); + void modified(); + void currentItemChanged(QListViewItem *item); + void slotCancel(); + void slotOk(); + void selectUp(); + void selectDown(); + void selectLeft(); + void selectRight(); + void resetTreeSizeHint(); + private: + void loadBlankState(); + void loadStateFrom(State *state); + void loadTagFrom(Tag *tag); + void saveStateTo(State *state); + void saveTagTo(Tag *tag); + void ensureCurrentItemVisible(); + TagListView *m_tags; + KPushButton *m_moveUp; + KPushButton *m_moveDown; + KPushButton *m_deleteTag; + QLineEdit *m_tagName; + KKeyButton *m_shortcut; + QPushButton *m_removeShortcut; + QCheckBox *m_inherit; + QGroupBox *m_tagBox; + QGroupBox *m_stateBox; + QLabel *m_stateNameLabel; + QLineEdit *m_stateName; + KIconButton *m_emblem; + QPushButton *m_removeEmblem; + QPushButton *m_bold; + QPushButton *m_underline; + QPushButton *m_italic; + QPushButton *m_strike; + KColorCombo2 *m_textColor; + KFontCombo *m_font; + FontSizeCombo *m_fontSize; + KColorCombo2 *m_backgroundColor; + QLineEdit *m_textEquivalent; + QCheckBox *m_onEveryLines; + + TagCopy::List m_tagCopies; + State::List m_deletedStates; + State::List m_addedStates; + + bool m_loading; +}; + +#endif // TAGEDIT_H diff --git a/src/tools.cpp b/src/tools.cpp new file mode 100644 index 0000000..9acbda7 --- /dev/null +++ b/src/tools.cpp @@ -0,0 +1,446 @@ +/*************************************************************************** + * Copyright (C) 2003 by S�astien Laot * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tools.h" + +QMemArray StopWatch::starts; +QMemArray StopWatch::totals; +QMemArray StopWatch::counts; + +void StopWatch::start(uint id) +{ + if (id >= starts.size()) { + totals.resize(id + 1); + counts.resize(id + 1); + for (uint i = starts.size(); i <= id; i++) { + totals[i] = 0; + counts[i] = 0; + } + starts.resize(id + 1); + } + starts[id] = QTime::currentTime(); +} + +void StopWatch::check(uint id) +{ + if (id >= starts.size()) + return; + double time = starts[id].msecsTo(QTime::currentTime()) / 1000.0; + totals[id] += time; + counts[id]++; + kdDebug() << k_funcinfo << "Timer_" << id << ": " << time << " s [" << counts[id] << " times, total: " << totals[id] << " s, average: " << totals[id] / counts[id] << " s]" << endl; +} + +QString Tools::textToHTML(const QString &text) +{ + if (text.isEmpty()) + return "

      "; + if (/*text.isEmpty() ||*/ text == " " || text == " ") + return "

       

      "; + + // convertFromPlainText() replace "\n\n" by "

      \n

      ": we don't want that + QString htmlString = QStyleSheet::convertFromPlainText(text, QStyleSheetItem::WhiteSpaceNormal); + return htmlString.replace("

      \n", "
      \n
      \n").replace("\n

      ", "\n"); // Don't replace first and last tags +} + +QString Tools::textToHTMLWithoutP(const QString &text) +{ + // textToHTML(text) return "

      HTMLizedText

      ". We remove the strating "

      " and ending

      " + QString HTMLizedText = textToHTML(text); + return HTMLizedText.mid(3, HTMLizedText.length() - 3 - 4); +} + +QString Tools::htmlToParagraph(const QString &html) +{ + QString result = html; + bool startedBySpan = false; + + // Remove the start tag, all the and the start + // Because can contain style="..." parameter, we transform it to + int pos = result.find("\n", each tag can be separated by space characters (%s) + // "

      " can be omitted (eg. if the HTML doesn't contain paragraph but tables), as well as "" (optinal) + pos = result.find(QRegExp("(?:(?:

      [\\s\\n\\r\\t]*)*[\\s\\n\\r\\t]*)*", false)); // Case unsensitive + if (pos != -1) + result = result.left(pos); + + if (startedBySpan) + result += "
      "; + + return result.replace("

      ", "

      ").replace("

      ", ""); +} + +// The following is adapted from KStringHanlder::tagURLs +// The adaptation lies in the change to urlEx +// Thanks to Richard Heck +QString Tools::tagURLs(const QString &text) +{ + QRegExp urlEx("(www\\.(?!\\.)|([a-zA-z]+)://)[\\d\\w\\./,:_~\\?=&;#@\\-\\+\\%\\$]+[\\d\\w/]"); + + QString richText(text); + int urlPos = 0; + int urlLen; + while ((urlPos = urlEx.search(richText, urlPos)) >= 0) { + urlLen = urlEx.matchedLength(); + QString href = richText.mid(urlPos, urlLen); + // Qt doesn't support (?<=pattern) so we do it here + if ((urlPos > 0) && richText[urlPos-1].isLetterOrNumber()) { + urlPos++; + continue; + } + QString anchor = "" + href + ""; + richText.replace(urlPos, urlLen, anchor); + urlPos += anchor.length(); + } + return richText; +} + +QString Tools::htmlToText(const QString &html) +{ + QString text = htmlToParagraph(html); + text.remove("\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("", "\n"); + text.replace("

      ", " "); + text.replace("","\n"); + text.replace("","\n"); + text.replace("","\n"); + text.replace("", "\n"); + text.replace("", " "); + text.replace("", " "); + text.replace("
      ", "\n"); + text.replace("
      ","\n"); + // FIXME: Format tags better, if possible + // TODO: Replace é and co. by theire equivalent! + + // To manage tags: + int pos = 0; + int pos2; + QString tag, tag3; + // To manage lists: + int deep = 0; // The deep of the current line in imbriqued lists + QValueStack ul; // true if current list is a
        one, false if it's an
          one + QValueStack lines; // The line number if it is an
            list + // We're removing every other tags, or replace them in the case of li: + while ( (pos = text.find("<"), pos) != -1 ) { + // What is the current tag? + tag = text.mid(pos + 1, 2); + tag3 = text.mid(pos + 1, 3); + // Lists work: + if (tag == "ul") { + deep++; + ul.push(true); + lines.push(-1); + } else if (tag == "ol") { + deep++; + ul.push(false); + lines.push(0); + } else if (tag3 == "/ul" || tag3 == "/ol") { + deep--; + ul.pop(); + lines.pop(); + } + // Where the tag closes? + pos2 = text.find(">"); + if (pos2 != -1) { + // Remove the tag: + text.remove(pos, pos2 - pos + 1); + // And replace li with "* ", "x. "... without forbidding to indent that: + if (tag == "li") { + // How many spaces before the line (indentation): + QString spaces = ""; + for (int i = 1; i < deep; i++) + spaces += " "; + // The bullet or number of the line: + QString bullet = "* "; + if (ul.top() == false) { + lines.push(lines.pop() + 1); + bullet = QString::number(lines.top()) + ". "; + } + // Insertion: + text.insert(pos, spaces + bullet); + } + if ( (tag3 == "/ul" || tag3 == "/ol") && deep == 0 ) + text.insert(pos, "\n"); // Empty line before and after a set of lists + } + ++pos; + } + + text.replace(">", ">"); + text.replace("<", "<"); + text.replace(""", "\""); + text.replace(" ", " "); + text.replace("&", "&"); // CONVERT IN LAST!! + + return text; +} + +QString Tools::cssFontDefinition(const QFont &font, bool onlyFontFamily) +{ + // The font definition: + QString definition = QString(font.italic() ? "italic " : "") + + QString(font.bold() ? "bold " : "") + + QString::number(QFontInfo(font).pixelSize()) + "px "; + + // Then, try to match the font name with a standard CSS font family: + QString genericFont = ""; + if (definition.contains("serif", false) || definition.contains("roman", false)) + genericFont = "serif"; + // No "else if" because "sans serif" must be counted as "sans". So, the order between "serif" and "sans" is important + if (definition.contains("sans", false) || definition.contains("arial", false) || definition.contains("helvetica", false)) + genericFont = "sans-serif"; + if (definition.contains("mono", false) || definition.contains("courier", false) || + definition.contains("typewriter", false) || definition.contains("console", false) || + definition.contains("terminal", false) || definition.contains("news", false)) + genericFont = "monospace"; + + // Eventually add the generic font family to the definition: + QString fontDefinition = "\"" + font.family() + "\""; + if (!genericFont.isEmpty()) + fontDefinition += ", " + genericFont; + + if (onlyFontFamily) + return fontDefinition; + + return definition + fontDefinition; +} + +QString Tools::stripEndWhiteSpaces(const QString &string) +{ + uint length = string.length(); + uint i; + for (i = length; i > 0; --i) + if (!string[i-1].isSpace()) + break; + if (i == 0) + return ""; + else + return string.left(i); +} + + + +bool Tools::isWebColor(const QColor &color) +{ + int r = color.red(); // The 216 web colors are those colors whose RGB (Red, Green, Blue) + int g = color.green(); // values are all in the set (0, 51, 102, 153, 204, 255). + int b = color.blue(); + + return ( ( r == 0 || r == 51 || r == 102 || + r == 153 || r == 204 || r == 255 ) && + ( g == 0 || g == 51 || g == 102 || + g == 153 || g == 204 || g == 255 ) && + ( b == 0 || b == 51 || b == 102 || + b == 153 || b == 204 || b == 255 ) ); +} + +QColor Tools::mixColor(const QColor &color1, const QColor &color2) +{ + QColor mixedColor; + mixedColor.setRgb( (color1.red() + color2.red()) / 2, + (color1.green() + color2.green()) / 2, + (color1.blue() + color2.blue()) / 2 ); + return mixedColor; +} + +bool Tools::tooDark(const QColor &color) +{ + int dontCare, value; + color.getHsv(/*hue:*/dontCare, /*saturation:*/dontCare, value); + return value < 175; +} + + +// TODO: Use it for all indentPixmap() +QPixmap Tools::normalizePixmap(const QPixmap &pixmap, int width, int height) +{ + if (height <= 0) + height = width; + + if (pixmap.isNull() || (pixmap.width() == width && pixmap.height() == height)) + return pixmap; + + return pixmap; +} + +QPixmap Tools::indentPixmap(const QPixmap &source, int depth, int deltaX) +{ + // Verify if it is possible: + if (depth <= 0 || source.isNull()) + return source; + + // Compute the number of pixels to indent: + if (deltaX <= 0) + deltaX = 2 * source.width() / 3; + int indent = depth * deltaX; + + // Create the images: + QImage resultImage(indent + source.width(), source.height(), 32); + QImage sourceImage = source.convertToImage(); + resultImage.setAlphaBuffer(true); + + // Clear the indent part (the left part) by making it fully transparent: + uint *p; + for (int row = 0; row < resultImage.height(); ++row) { + for (int column = 0; column < resultImage.width(); ++column) { + p = (uint *)resultImage.scanLine(row) + column; + *p = 0; // qRgba(0, 0, 0, 0) + } + } + + // Copy the source image byte per byte to the right part: + uint *q; + for (int row = 0; row < sourceImage.height(); ++row) { + for (int column = 0; column < sourceImage.width(); ++column) { + p = (uint *)resultImage.scanLine(row) + indent + column; + q = (uint *)sourceImage.scanLine(row) + column; + *p = *q; + } + } + + // And return the result: + QPixmap result; + result.convertFromImage(resultImage); + return result; +} + +#include + +void Tools::deleteRecursively(const QString &folderOrFile) +{ + if (folderOrFile.isEmpty()) + return; + + QFileInfo fileInfo(folderOrFile); + if (fileInfo.isDir()) { + // Delete the child files: + QDir dir(folderOrFile, QString::null, QDir::Name | QDir::IgnoreCase, QDir::All | QDir::Hidden); + QStringList list = dir.entryList(); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) + if ( *it != "." && *it != ".." ) + deleteRecursively(folderOrFile + "/" + *it); + // And then delete the folder: + dir.rmdir(folderOrFile); + } else + // Delete the file: + QFile::remove(folderOrFile); +} + +QString Tools::fileNameForNewFile(const QString &wantedName, const QString &destFolder) +{ + QString fileName = wantedName; + QString fullName = destFolder + fileName; + QString extension = ""; + int number = 2; + QDir dir; + + // First check if the file do not exists yet (simplier and more often case) + dir = QDir(fullName); + if ( ! dir.exists(fullName) ) + return fileName; + + // Find the file extension, if it exists : Split fileName in fileName and extension + // Example : fileName == "note5-3.txt" => fileName = "note5-3" and extension = ".txt" + int extIndex = fileName.findRev('.'); + if (extIndex != -1 && extIndex != int(fileName.length()-1)) { // Extension found and fileName do not ends with '.' ! + extension = fileName.mid(extIndex); + fileName.truncate(extIndex); + } // else fileName = fileName and extension = "" + + // Find the file number, if it exists : Split fileName in fileName and number + // Example : fileName == "note5-3" => fileName = "note5" and number = 3 + int extNumber = fileName.findRev('-'); + if (extNumber != -1 && extNumber != int(fileName.length()-1)) { // Number found and fileName do not ends with '-' ! + bool isANumber; + int theNumber = fileName.mid(extNumber + 1).toInt(&isANumber); + if (isANumber) { + number = theNumber; + fileName.truncate(extNumber); + } // else : + } // else fileName = fileName and number = 2 (because if the file already exists, the genereated name is at last the 2nd) + + QString finalName; + for (/*int number = 2*/; ; ++number) { // TODO: FIXME: If overflow ??? + finalName = fileName + "-" + QString::number(number) + extension; + fullName = destFolder + finalName; + dir = QDir(fullName); + if ( ! dir.exists(fullName) ) + break; + } + + return finalName; +} + + +// TODO: Move it from NoteFactory +/*QString NoteFactory::iconForURL(const KURL &url) +{ + QString icon = KMimeType::iconForURL(url.url()); + if ( url.protocol() == "mailto" ) + icon = "message"; + return icon; +}*/ + +bool Tools::isAFileCut(QMimeSource *source) +{ + if (source->provides("application/x-kde-cutselection")) { + QByteArray array = source->encodedData("application/x-kde-cutselection"); + return !array.isEmpty() && QCString(array.data(), array.size() + 1).at(0) == '1'; + } else + return false; +} + +void Tools::printChildren(QObject* parent) +{ + const QObjectList* objs = parent->children(); + QObjectListIt it(*objs); + QObject *obj; + + while((obj = it.current())!= 0){ + ++it; + kdDebug() << k_funcinfo << obj->className() << ": " << obj->name() << endl; + } +} diff --git a/src/tools.h b/src/tools.h new file mode 100644 index 0000000..338abfd --- /dev/null +++ b/src/tools.h @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef TOOLS_H +#define TOOLS_H + +class QString; +class QColor; +class QMimeSource; + +class StopWatch +{ + public: + static void start(uint id); + static void check(uint id); + private: + static QMemArray starts; + static QMemArray totals; + static QMemArray counts; +}; + +/** Some useful functions for that application. + * @author Sébastien Laoût + */ +namespace Tools +{ + // Text <-> HTML Conversions and Tools: + QString textToHTML(const QString &text); + QString textToHTMLWithoutP(const QString &text); + QString htmlToParagraph(const QString &html); + QString htmlToText(const QString &html); + QString tagURLs(const QString &test); + QString cssFontDefinition(const QFont &font, bool onlyFontFamily = false); + + // String Manipulations: + QString stripEndWhiteSpaces(const QString &string); + + // Pixmap Manipulations: + /** @Return true if it is a Web color + */ + bool isWebColor(const QColor &color); + /** @Return a color that is 50% of @p color1 and 50% of @p color2. + */ + QColor mixColor(const QColor &color1, const QColor &color2); + /** @Return true if the color is too dark to be darkened one more time. + */ + bool tooDark(const QColor &color); + /** Make sure the @p pixmap is of the size (@p width, @p height) and @return a pixmap of this size. + * If @p height <= 0, then width will be used to make the picture square. + */ + QPixmap normalizePixmap(const QPixmap &pixmap, int width, int height = 0); + /** @Return the pixmap @p source with depth*deltaX transparent pixels added to the left.\n + * If @p deltaX is <= 0, then an indent delta is computed depending on the @p source width. + */ + QPixmap indentPixmap(const QPixmap &source, int depth, int deltaX = 0); + + // File and Folder Manipulations: + /** Delete the folder @p folderOrFile recursively (to remove sub-folders and child files too). + */ + void deleteRecursively(const QString &folderOrFile); + /** @Return a new filename that doesn't already exist in @p destFolder. + * If @p wantedName alread exist in @p destFolder, a dash and a number will be added before the extenssion. + * Id there were already such a number in @p wantedName, it is incremented until a free filename is found. + */ + QString fileNameForNewFile(const QString &wantedName, const QString &destFolder); + + // Other: + //void iconForURL(const KURL &url); + /** @Return true if the source is from a file cutting in Konqueror. + * @Return false if it was just a copy or if it was a drag. + */ + bool isAFileCut(QMimeSource *source); + + // Debug + void printChildren(QObject* parent); +} + +#endif // TOOLS_H diff --git a/src/variouswidgets.cpp b/src/variouswidgets.cpp new file mode 100644 index 0000000..3d0fa74 --- /dev/null +++ b/src/variouswidgets.cpp @@ -0,0 +1,325 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "variouswidgets.h" + +/** class RunCommandRequester: */ + +RunCommandRequester::RunCommandRequester(const QString &runCommand, const QString &message, QWidget *parent, const char *name) + : QWidget(parent, name) +{ + m_message = message; + + QHBoxLayout *layout = new QHBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint()); + m_runCommand = new QLineEdit(runCommand, this); + QPushButton *pb = new QPushButton(/*"C&hoose..."*/i18n("..."), this); + + pb->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + layout->addWidget(m_runCommand); + layout->addWidget(pb); + + connect( pb, SIGNAL(clicked()), this, SLOT(slotSelCommand()) ); +} + +RunCommandRequester::~RunCommandRequester() +{ +} + +void RunCommandRequester::slotSelCommand() +{ + KOpenWithDlg *dlg = new KOpenWithDlg(KURL::List(), m_message, m_runCommand->text(), this); + dlg->exec(); + if ( ! dlg->text().isEmpty() ) + m_runCommand->setText(dlg->text()); +} + +QString RunCommandRequester::runCommand() +{ + return m_runCommand->text(); +} + +void RunCommandRequester::setRunCommand(const QString &runCommand) +{ + m_runCommand->setText(runCommand); +} + +/** class IconSizeCombo: */ + +IconSizeCombo::IconSizeCombo(bool rw, QWidget *parent, const char *name) + : QComboBox(rw, parent, name) +{ + insertItem(i18n("16 by 16 pixels")); + insertItem(i18n("22 by 22 pixels")); + insertItem(i18n("32 by 32 pixels")); + insertItem(i18n("48 by 48 pixels")); + insertItem(i18n("64 by 64 pixels")); + insertItem(i18n("128 by 128 pixels")); + setCurrentItem(2); +} + +IconSizeCombo::~IconSizeCombo() +{ +} + +int IconSizeCombo::iconSize() +{ + switch (currentItem()) { + default: + case 0: return 16; + case 1: return 22; + case 2: return 32; + case 3: return 48; + case 4: return 64; + case 5: return 128; + } +} + +void IconSizeCombo::setSize(int size) +{ + switch (size) { + default: + case 16: setCurrentItem(0); break; + case 22: setCurrentItem(1); break; + case 32: setCurrentItem(2); break; + case 48: setCurrentItem(3); break; + case 64: setCurrentItem(4); break; + case 128: setCurrentItem(5); break; + } +} + +/** class ViewSizeDialog: */ + +ViewSizeDialog::ViewSizeDialog(QWidget *parent, int w, int h) + : QDialog(parent, "ViewSizeDialog") +{ + QLabel *label = new QLabel(i18n( + "Resize the window to select the image size\n" + "and close it or press Escape to accept changes."), this); + label->move(8, 8); + label->setFixedSize( label->sizeHint() ); + + // setSizeGripEnabled(true) doesn't work (the grip stay at the same place), so we emulate it: + m_sizeGrip = new QSizeGrip(this); + m_sizeGrip->setFixedSize( m_sizeGrip->sizeHint() ); + + setGeometry(x(), y(), w, h); +} + +ViewSizeDialog::~ViewSizeDialog() +{ +} + +void ViewSizeDialog::resizeEvent(QResizeEvent *) +{ + setCaption( i18n("%1 by %2 pixels").arg(QString::number(width())).arg(QString::number(height())) ); + m_sizeGrip->move( width() - m_sizeGrip->width(), height() - m_sizeGrip->height() ); +} + +/** class HelpLabel: */ + +HelpLabel::HelpLabel(const QString &text, const QString &message, QWidget *parent) + : KURLLabel(parent), m_message(message) +{ + setText(text); + connect( this, SIGNAL(leftClickedURL()), this, SLOT(showMessage()) ); +} + +HelpLabel::~HelpLabel() +{ +} + +void HelpLabel::showMessage() +{ + QWhatsThis::display(m_message, mapToGlobal( QPoint(width() / 2, height()) )); +} + +void HelpLabel::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Space) + showMessage(); + else + KURLLabel::keyPressEvent(event); +} + +/** class IconSizeDialog: */ + +class UndraggableKIconView : public KIconView +{ + public: + UndraggableKIconView(QWidget * parent = 0, const char * name = 0, WFlags f = 0) : KIconView(parent, name, f) {} + QDragObject* dragObject() { return 0; } +}; + +IconSizeDialog::IconSizeDialog(const QString &caption, const QString &message, const QString &icon, int iconSize, QWidget *parent) + : KDialogBase(KDialogBase::Swallow, caption, KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, /*name=*/0, /*modal=*/true, /*separator=*/false) +{ + QWidget *page = new QWidget(this); + QVBoxLayout *topLayout = new QVBoxLayout(page, /*margin=*/0, spacingHint()); + + QLabel *label = new QLabel(message, page); + topLayout->addWidget(label); + + KIconView *iconView = new UndraggableKIconView(page); + iconView->setItemsMovable(false); + iconView->setSelectionMode(KIconView::Single); + m_size16 = new KIconViewItem(iconView, 0, i18n("16 by 16 pixels"), DesktopIcon(icon, 16)); + m_size22 = new KIconViewItem(iconView, m_size16, i18n("22 by 22 pixels"), DesktopIcon(icon, 22)); + m_size32 = new KIconViewItem(iconView, m_size22, i18n("32 by 32 pixels"), DesktopIcon(icon, 32)); + m_size48 = new KIconViewItem(iconView, m_size32, i18n("48 by 48 pixels"), DesktopIcon(icon, 48)); + m_size64 = new KIconViewItem(iconView, m_size48, i18n("64 by 64 pixels"), DesktopIcon(icon, 64)); + m_size128 = new KIconViewItem(iconView, m_size64, i18n("128 by 128 pixels"), DesktopIcon(icon, 128)); + iconView->setMinimumWidth(m_size16->width() + m_size22->width() + m_size32->width() + m_size48->width() + m_size64->width() + m_size128->width() + + (6+2) * iconView->spacing() + 20); + iconView->setMinimumHeight(m_size128->height() + 2 * iconView->spacing() + 20); + topLayout->addWidget(iconView); + switch (iconSize) { + case 16: iconView->setSelected(m_size16, true); m_iconSize = 16; break; + case 22: iconView->setSelected(m_size22, true); m_iconSize = 22; break; + default: + case 32: iconView->setSelected(m_size32, true); m_iconSize = 32; break; + case 48: iconView->setSelected(m_size48, true); m_iconSize = 48; break; + case 64: iconView->setSelected(m_size64, true); m_iconSize = 64; break; + case 128: iconView->setSelected(m_size128, true); m_iconSize = 128; break; + } + + connect( iconView, SIGNAL(executed(QIconViewItem*)), this, SLOT(choose(QIconViewItem*)) ); + connect( iconView, SIGNAL(returnPressed(QIconViewItem*)), this, SLOT(choose(QIconViewItem*)) ); + connect( iconView, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); + + setMainWidget(page); +} + +IconSizeDialog::~IconSizeDialog() +{ +} + +void IconSizeDialog::slotSelectionChanged() +{ + // Change m_iconSize to the new selected one: + if (m_size16->isSelected()) { m_iconSize = 16; return; } + if (m_size22->isSelected()) { m_iconSize = 22; return; } + if (m_size32->isSelected()) { m_iconSize = 32; return; } + if (m_size48->isSelected()) { m_iconSize = 48; return; } + if (m_size64->isSelected()) { m_iconSize = 64; return; } + if (m_size128->isSelected()) { m_iconSize = 128; return; } + + // But if user unselected the item (by eg. right clicking a free space), reselect the last one: + switch (m_iconSize) { + case 16: m_size16->setSelected(true); m_iconSize = 16; break; + case 22: m_size22->setSelected(true); m_iconSize = 22; break; + default: + case 32: m_size32->setSelected(true); m_iconSize = 32; break; + case 48: m_size48->setSelected(true); m_iconSize = 48; break; + case 64: m_size64->setSelected(true); m_iconSize = 64; break; + case 128: m_size128->setSelected(true); m_iconSize = 128; break; + } +} + +void IconSizeDialog::choose(QIconViewItem*) +{ + actionButton(KDialogBase::Ok)->animateClick(); +} + +void IconSizeDialog::slotCancel() +{ + m_iconSize = -1; + KDialogBase::slotCancel(); +} + +/** class FontSizeCombo: */ + +FontSizeCombo::FontSizeCombo(bool rw, bool withDefault, QWidget *parent, const char *name) + : KComboBox(rw, parent, name), m_withDefault(withDefault) +{ + if (m_withDefault) + insertItem(i18n("(Default)")); + + QFontDatabase fontDB; + QValueList sizes = fontDB.standardSizes(); + for (QValueList::Iterator it = sizes.begin(); it != sizes.end(); ++it) + insertItem(QString::number(*it)); + +// connect( this, SIGNAL(acivated(const QString&)), this, SLOT(textChangedInCombo(const QString&)) ); + connect( this, SIGNAL(textChanged(const QString&)), this, SLOT(textChangedInCombo(const QString&)) ); + + // TODO: 01617 void KFontSizeAction::setFontSize( int size ) +} + +FontSizeCombo::~FontSizeCombo() +{ +} + +void FontSizeCombo::textChangedInCombo(const QString &text) +{ + bool ok = false; + int size = text.toInt(&ok); + if (ok) + emit sizeChanged(size); +} + +void FontSizeCombo::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) + emit escapePressed(); + else if (event->key() == Qt::Key_Return) + emit returnPressed2(); + else + KComboBox::keyPressEvent(event); +} + +void FontSizeCombo::setFontSize(int size) +{ + setCurrentText(QString::number(size)); + + // TODO: SEE KFontSizeAction::setFontSize( int size ) !!! for a more complete method! +} + +int FontSizeCombo::fontSize() +{ + bool ok = false; + int size = currentText().toInt(&ok); + if (ok) + return size; + + size = text(currentItem()).toInt(&ok); + if (ok) + return size; + + return font().pointSize(); +} + +#include "variouswidgets.moc" diff --git a/src/variouswidgets.h b/src/variouswidgets.h new file mode 100644 index 0000000..c579b72 --- /dev/null +++ b/src/variouswidgets.h @@ -0,0 +1,151 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef VARIOUSWIDGETS_H +#define VARIOUSWIDGETS_H + +#include +#include +#include +#include +#include +#include + +class QLineEdit; +class KIconViewItem; +class QIconViewItem; + +class Basket; + +/** A widget to select a command to run, + * with a QLineEdit and a QPushButton. + * @author Sébastien Laoût + */ +class RunCommandRequester : public QWidget +{ + Q_OBJECT + public: + RunCommandRequester(const QString &runCommand, const QString &message, QWidget *parent = 0, const char *name = 0); + ~RunCommandRequester(); + QString runCommand(); + void setRunCommand(const QString &runCommand); + QLineEdit *lineEdit() { return m_runCommand; } + private slots: + void slotSelCommand(); + private: + QLineEdit *m_runCommand; + QString m_message; +}; + +/** QComboBox to ask icon size + * @author Sébastien Laoût + */ +class IconSizeCombo : public QComboBox +{ + Q_OBJECT + public: + IconSizeCombo(bool rw, QWidget *parent = 0, const char *name = 0); + ~IconSizeCombo(); + int iconSize(); + void setSize(int size); +}; + +/** A window that the user resize to graphically choose a new image size + * TODO: Create a SizePushButton or even SizeWidget + * @author Sébastien Laoût + */ +class ViewSizeDialog : public QDialog +{ + Q_OBJECT + public: + ViewSizeDialog(QWidget *parent, int w, int h); + ~ViewSizeDialog(); + private: + virtual void resizeEvent(QResizeEvent *); + QWidget *m_sizeGrip; +}; + +/** A label displaying a link that, once clicked, offer a What's This messageBox to help users. + * @author Sébastien Laoût + */ +class HelpLabel : public KURLLabel +{ + Q_OBJECT + public: + HelpLabel(const QString &text, const QString &message, QWidget *parent); + ~HelpLabel(); + QString message() { return m_message; } + public slots: + void setMessage(const QString &message) { m_message = message; } + void showMessage(); + protected: + void keyPressEvent(QKeyEvent *event); + private: + QString m_message; +}; + +/** A dialog to choose the size of an icon. + * @author Sébastien Laoût + */ +class IconSizeDialog : public KDialogBase +{ + Q_OBJECT + public: + IconSizeDialog(const QString &caption, const QString &message, const QString &icon, int iconSize, QWidget *parent); + ~IconSizeDialog(); + int iconSize() { return m_iconSize; } /// << @return the choosen icon size (16, 32, ...) or -1 if canceled! + protected slots: + void slotCancel(); + void slotSelectionChanged(); + void choose(QIconViewItem*); + private: + KIconViewItem *m_size16; + KIconViewItem *m_size22; + KIconViewItem *m_size32; + KIconViewItem *m_size48; + KIconViewItem *m_size64; + KIconViewItem *m_size128; + int m_iconSize; +}; + +/** + * A missing class from KDE (and Qt): a combobox to select a font size! + */ +class FontSizeCombo : public KComboBox +{ + Q_OBJECT + public: + FontSizeCombo(bool rw, bool withDefault, QWidget *parent = 0, const char *name = 0); + ~FontSizeCombo(); + void setFontSize(int size); + int fontSize(); + protected: + void keyPressEvent(QKeyEvent *event); + signals: + void sizeChanged(int size); + void escapePressed(); + void returnPressed2(); + private slots: + void textChangedInCombo(const QString &text); + private: + bool m_withDefault; +}; + +#endif // VARIOUSWIDGETS_H diff --git a/src/xmlwork.cpp b/src/xmlwork.cpp new file mode 100644 index 0000000..92c2aca --- /dev/null +++ b/src/xmlwork.cpp @@ -0,0 +1,110 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include + +#include "xmlwork.h" + +QDomDocument* XMLWork::openFile(const QString &name, const QString &filePath) +{ + QDomDocument *doc = new QDomDocument(name); + QFile file(filePath); + if ( ! file.open(IO_ReadOnly) ) { + // QMessageBox::information(this, "Load an XML file", "Error : un-openable file"); + delete doc; + return 0; + } + if ( ! doc->setContent(&file) ) { + // QMessageBox::information(this, "Load an XML file", "Error : malformed content"); + file.close(); + delete doc; + return 0; + } + file.close(); + return doc; +} + +QDomElement XMLWork::getElement(const QDomElement &startElement, const QString &elementPath) +{ + QStringList elements = QStringList::split("/", elementPath, false); + QDomNode n = startElement.firstChild(); + for (unsigned int i = 0; i < elements.count(); ++i) { // For each elements + while ( ! n.isNull() ) { // Browse theire sub elements + QDomElement e = n.toElement(); // and search the good one + if ( (!e.isNull()) && e.tagName() == *elements.at(i) ) { // If found + if ( i + 1 == elements.count() ) // And if it is the asked element + return e; // Return the first corresponding + else { // Or if it is an intermediate element + n = e.firstChild(); // Continue with the next sub element + break; + } + } + n = n.nextSibling(); + } + } + return QDomElement(); // Not found ! +} + +QString XMLWork::getElementText(const QDomElement &startElement, const QString &elementPath, const QString &defaultTxt) +{ + QDomElement e = getElement(startElement, elementPath); + if (e.isNull()) + return defaultTxt; + else + return e.text(); +} + +void XMLWork::addElement(QDomDocument &document, QDomElement &parent, const QString &name, const QString &text) +{ + QDomElement tag = document.createElement(name); + parent.appendChild(tag); + QDomText content = document.createTextNode(text); + tag.appendChild(content); +} + +bool XMLWork::trueOrFalse(const QString &value, bool defaultValue) +{ + if ( value == "true" || value == "1" || value == "on" || value == "yes" ) + return true; + if ( value == "false" || value == "0" || value == "off" || value == "no" ) + return false; + return defaultValue; +} + +QString XMLWork::trueOrFalse(bool value) +{ + return value ? "true" : "false"; +} + +QString XMLWork::innerXml(QDomElement &element) +{ + QString inner; + for (QDomNode n = element.firstChild(); !n.isNull(); n = n.nextSibling()) + if (n.isCharacterData()) + inner += n.toCharacterData().data(); + else if (n.isElement()) { + QDomElement e = n.toElement(); + inner += "<" + e.tagName() + ">" + innerXml(e) + ""; + } + return inner; +} diff --git a/src/xmlwork.h b/src/xmlwork.h new file mode 100644 index 0000000..e4d1cae --- /dev/null +++ b/src/xmlwork.h @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2003 by Sébastien Laoût * + * slaout@linux62.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef XMLWORKXMLWORK_H +#define XMLWORKXMLWORK_H + +class QString; +class QDomDocument; +class QDomElement; + +/** All related functions to manage XML files and trees + * @author Sébastien Laoût + */ +namespace XMLWork +{ + // Manage XML files : + QDomDocument* openFile(const QString &name, const QString &filePath); + // Manage XML trees : + QDomElement getElement(const QDomElement &startElement, const QString &elementPath); + QString getElementText(const QDomElement &startElement, const QString &elementPath, const QString &defaultTxt = ""); + void addElement(QDomDocument &document, QDomElement &parent, const QString &name, const QString &text); + QString innerXml(QDomElement &element); + // Not directly related to XML : + bool trueOrFalse(const QString &value, bool defaultValue = true); + QString trueOrFalse(bool value); +} + +#endif // XMLWORKXMLWORK_H diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..e69de29 diff --git a/subdirs b/subdirs new file mode 100644 index 0000000..74a388c --- /dev/null +++ b/subdirs @@ -0,0 +1,10 @@ +backgrounds +backgrounds-previews +doc +file-integration +images +kontact_plugin +po +src +tags +welcome diff --git a/tags/Makefile.am b/tags/Makefile.am new file mode 100644 index 0000000..aaac006 --- /dev/null +++ b/tags/Makefile.am @@ -0,0 +1,3 @@ +tagsdir = $(kde_datadir)/basket/icons +tags_ICON = AUTO +KDE_ICON = AUTO diff --git a/tags/cr16-action-tag_checkbox.png b/tags/cr16-action-tag_checkbox.png new file mode 100644 index 0000000..8eddfb5 Binary files /dev/null and b/tags/cr16-action-tag_checkbox.png differ diff --git a/tags/cr16-action-tag_checkbox_checked.png b/tags/cr16-action-tag_checkbox_checked.png new file mode 100644 index 0000000..2a55c9a Binary files /dev/null and b/tags/cr16-action-tag_checkbox_checked.png differ diff --git a/tags/cr16-action-tag_for_later.png b/tags/cr16-action-tag_for_later.png new file mode 100644 index 0000000..3bfa627 Binary files /dev/null and b/tags/cr16-action-tag_for_later.png differ diff --git a/tags/cr16-action-tag_fun.png b/tags/cr16-action-tag_fun.png new file mode 100644 index 0000000..6cb5249 Binary files /dev/null and b/tags/cr16-action-tag_fun.png differ diff --git a/tags/cr16-action-tag_important.png b/tags/cr16-action-tag_important.png new file mode 100644 index 0000000..af62289 Binary files /dev/null and b/tags/cr16-action-tag_important.png differ diff --git a/tags/cr16-action-tag_preference_bad.png b/tags/cr16-action-tag_preference_bad.png new file mode 100644 index 0000000..8057e2b Binary files /dev/null and b/tags/cr16-action-tag_preference_bad.png differ diff --git a/tags/cr16-action-tag_preference_excelent.png b/tags/cr16-action-tag_preference_excelent.png new file mode 100644 index 0000000..ebce7a4 Binary files /dev/null and b/tags/cr16-action-tag_preference_excelent.png differ diff --git a/tags/cr16-action-tag_preference_good.png b/tags/cr16-action-tag_preference_good.png new file mode 100644 index 0000000..bed3617 Binary files /dev/null and b/tags/cr16-action-tag_preference_good.png differ diff --git a/tags/cr16-action-tag_priority_high.png b/tags/cr16-action-tag_priority_high.png new file mode 100644 index 0000000..71b48ba Binary files /dev/null and b/tags/cr16-action-tag_priority_high.png differ diff --git a/tags/cr16-action-tag_priority_low.png b/tags/cr16-action-tag_priority_low.png new file mode 100644 index 0000000..eaf390e Binary files /dev/null and b/tags/cr16-action-tag_priority_low.png differ diff --git a/tags/cr16-action-tag_priority_medium.png b/tags/cr16-action-tag_priority_medium.png new file mode 100644 index 0000000..7356283 Binary files /dev/null and b/tags/cr16-action-tag_priority_medium.png differ diff --git a/tags/cr16-action-tag_progress_000.png b/tags/cr16-action-tag_progress_000.png new file mode 100644 index 0000000..385e613 Binary files /dev/null and b/tags/cr16-action-tag_progress_000.png differ diff --git a/tags/cr16-action-tag_progress_025.png b/tags/cr16-action-tag_progress_025.png new file mode 100644 index 0000000..b507e50 Binary files /dev/null and b/tags/cr16-action-tag_progress_025.png differ diff --git a/tags/cr16-action-tag_progress_050.png b/tags/cr16-action-tag_progress_050.png new file mode 100644 index 0000000..faeb62f Binary files /dev/null and b/tags/cr16-action-tag_progress_050.png differ diff --git a/tags/cr16-action-tag_progress_075.png b/tags/cr16-action-tag_progress_075.png new file mode 100644 index 0000000..2246c13 Binary files /dev/null and b/tags/cr16-action-tag_progress_075.png differ diff --git a/tags/cr16-action-tag_progress_100.png b/tags/cr16-action-tag_progress_100.png new file mode 100644 index 0000000..5ad245d Binary files /dev/null and b/tags/cr16-action-tag_progress_100.png differ diff --git a/welcome/Makefile.am b/welcome/Makefile.am new file mode 100644 index 0000000..7e8def9 --- /dev/null +++ b/welcome/Makefile.am @@ -0,0 +1,10 @@ +welcomedir = $(kde_datadir)/basket/welcome +welcome_DATA = \ + Welcome_de.baskets \ + Welcome_en_US.baskets \ + Welcome_fr.baskets \ + Welcome_it.baskets \ + Welcome_ja.baskets \ + Welcome_nn.baskets \ + Welcome_pt.baskets \ + Welcome_ru.baskets diff --git a/welcome/Welcome_de.baskets b/welcome/Welcome_de.baskets new file mode 100644 index 0000000..c74109b Binary files /dev/null and b/welcome/Welcome_de.baskets differ diff --git a/welcome/Welcome_en_US.baskets b/welcome/Welcome_en_US.baskets new file mode 100644 index 0000000..acda2e9 Binary files /dev/null and b/welcome/Welcome_en_US.baskets differ diff --git a/welcome/Welcome_fr.baskets b/welcome/Welcome_fr.baskets new file mode 100644 index 0000000..c0e9cc7 Binary files /dev/null and b/welcome/Welcome_fr.baskets differ diff --git a/welcome/Welcome_it.baskets b/welcome/Welcome_it.baskets new file mode 100644 index 0000000..03e641d Binary files /dev/null and b/welcome/Welcome_it.baskets differ diff --git a/welcome/Welcome_ja.baskets b/welcome/Welcome_ja.baskets new file mode 100644 index 0000000..250d3a9 Binary files /dev/null and b/welcome/Welcome_ja.baskets differ diff --git a/welcome/Welcome_nn.baskets b/welcome/Welcome_nn.baskets new file mode 100644 index 0000000..d7df2d6 Binary files /dev/null and b/welcome/Welcome_nn.baskets differ diff --git a/welcome/Welcome_pt.baskets b/welcome/Welcome_pt.baskets new file mode 100644 index 0000000..10b01b3 Binary files /dev/null and b/welcome/Welcome_pt.baskets differ diff --git a/welcome/Welcome_ru.baskets b/welcome/Welcome_ru.baskets new file mode 100644 index 0000000..92e86fc Binary files /dev/null and b/welcome/Welcome_ru.baskets differ -- cgit v1.2.1